欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:運(yùn)維 nginx全解

柚子快報(bào)激活碼778899分享:運(yùn)維 nginx全解

http://yzkb.51969.com/

一、Nginx配置文件

1.1 主配置文件

主配置文件位置:nginx.conf

tip:安裝方式不同,路徑不同

#主配置文件格式

?

main block:主配置段,即全局配置段,對(duì)http,mail都有效

?

#配置Nginx服務(wù)器的事件模塊相關(guān)參數(shù)

events {

...

} ?

#http/https 協(xié)議相關(guān)配置段

http {

...

}

?

#默認(rèn)配置文件不包括下面兩個(gè)模塊

#mail 協(xié)議相關(guān)配置段

mail {

...

} ? ?

#stream 服務(wù)器相關(guān)配置段

stream {負(fù)載均衡

...

}

?

?

[root@localhost ~]# vim /apps/nginx/conf/nginx.conf

#編譯安裝nginx后,nginx.conf為例

1.2 子配置文件

子配置文件位置:conf.d/*.conf

tip:須在http模塊下添加include 子配置文件位置

http塊中可以包含多個(gè)子配置文件,常見(jiàn)的子配置文件

server塊:用于配置HTTP服務(wù)器的具體行為,包括監(jiān)聽(tīng)的端口、虛擬主機(jī)的配置、請(qǐng)求處理邏輯等。

location塊:用于指定不同URL請(qǐng)求的處理方式,例如靜態(tài)文件的服務(wù)、反向代理等。

upstream塊:用于配置反向代理的目標(biāo)服務(wù)器列表。

include指令:用于引入其他的子配置文件,可以將一些通用的配置項(xiàng)單獨(dú)放在一個(gè)文件中,然后通過(guò)include指令引入。

二、全局配置部分(調(diào)優(yōu))

2.1 修改啟動(dòng)的工作進(jìn)程數(shù)

通過(guò)使用 auto 參數(shù),Nginx 可以根據(jù)系統(tǒng)的負(fù)載情況智能地分配工作進(jìn)程,以提供更好的性能和資源利用率。

#修改主配置文件中的work_processes項(xiàng)

vim /apps/nginx/conf/nginx.conf

[root@localhost ~]# nginx -s reload

#重新加載配置文件

[root@localhost ~]# ps axo pid,cmd,psr,ni|grep nginx

13013 nginx: master process /apps ? 1 ? 0

13019 nginx: worker process ? ? ? ? 0 ? 0

13020 nginx: worker process ? ? ? ? 0 ? 0

13021 nginx: worker process ? ? ? ? 0 ? 0

13022 nginx: worker process ? ? ? ? 1 ? 0

13035 grep --color=auto nginx ? ? ? 0 ? 0

?

2.2 cpu與worker process綁定

在 Nginx 配置文件中,worker_cpu_affinity 指令用于控制 worker 進(jìn)程與 CPU 的親緣性(affinity)關(guān)系

?

[root@localhost ~]# vim /apps/nginx/conf/nginx.conf

?

user nginx;

worker_processes auto;

worker_cpu_affinity 00000001 00000010;

#綁定到 第一 和 第二塊cpu上

error_log /var/log/nginx/error.log;

#指定錯(cuò)誤日志的路徑和文件名

?

[root@localhost ~]# nginx -t

nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /apps/nginx/conf/nginx.conf test is successful

?

2.3PID路徑修改

2.4 修改工作進(jìn)程的優(yōu)先級(jí)

工作進(jìn)程優(yōu)先級(jí),-20~19

[root@localhost ~]# nginx -s reload

[root@localhost ~]# ps axo pid,cmd,psr,ni|grep nginx|sort -n

13501 nginx: master process /apps ? 2 ? 0

14025 nginx: worker process ? ? ? ? 2 -20

14026 nginx: worker process ? ? ? ? 3 -20

14027 nginx: worker process ? ? ? ? 1 -20

14028 nginx: worker process ? ? ? ? 0 -20

14038 grep --color=auto nginx ? ? ? 3 ? 0

?

2.5 調(diào)試工作進(jìn)程打開(kāi)文件的數(shù)量

2.5.1 基本原理

所有worker進(jìn)程能打開(kāi)的文件數(shù)量上限,包括:Nginx的所有連接(例如與代理服務(wù)器的連接等),而不僅僅是與客戶端的連接,另一個(gè)考慮因素是實(shí)際的并發(fā)連接數(shù)不能超過(guò)系統(tǒng)級(jí)別的最大打開(kāi)文件數(shù)的限制.最好與ulimit -n 或者limits.conf的值保持一致,

2.5.2 配置過(guò)程

先修改主配置文件

vim /apps/nginx/conf/nginx.conf

#添加

worker_rlimit_nofile 65536

?

再修改系統(tǒng)默認(rèn)項(xiàng)

臨時(shí)修改:

ulimit -n 70000

#修改單個(gè)進(jìn)程能打開(kāi)的最大文件數(shù)為 70000

#僅應(yīng)用于當(dāng)前會(huì)話即不會(huì)永久修改限制

ulimit -a

#顯示當(dāng)前用戶的所有資源限制信息

[root@localhost ~]# ulimit -n 70000

[root@localhost ~]# ulimit -a

core file size ? ? ? ? (blocks, -c) 0

data seg size ? ? ? ? ? (kbytes, -d) unlimited

scheduling priority ? ? ? ? ? ? (-e) 0

file size ? ? ? ? ? ? ? (blocks, -f) unlimited

pending signals ? ? ? ? ? ? ? ? (-i) 7168

max locked memory ? ? ? (kbytes, -l) 64

max memory size ? ? ? ? (kbytes, -m) unlimited

open files ? ? ? ? ? ? ? ? ? ? (-n) 70000

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #默認(rèn)值為1024

pipe size ? ? ? ? ? (512 bytes, -p) 8

POSIX message queues ? ? (bytes, -q) 819200

real-time priority ? ? ? ? ? ? (-r) 0

stack size ? ? ? ? ? ? (kbytes, -s) 8192

cpu time ? ? ? ? ? ? ? (seconds, -t) unlimited

max user processes ? ? ? ? ? ? (-u) 7168

virtual memory ? ? ? ? (kbytes, -v) unlimited

file locks ? ? ? ? ? ? ? ? ? ? (-x) unlimited

?

永久修改:

vim /etc/security/limits.conf

#在最后加入

* ? ? ? ? ? ? ? soft ? core ? ? ? ? ? unlimited

* ? ? ? ? ? ? ? hard ? core ? ? ? ? ? unlimited

* ? ? ? ? ? ? ? soft ? nproc ? ? ? ? ? 1000000

* ? ? ? ? ? ? ? hard ? nproc ? ? ? ? ? 1000000

* ? ? ? ? ? ? ? soft ? nofile ? ? ? ? ?1000000

* ? ? ? ? ? ? ? hard ? nofile ? ? ? ? ?1000000

* ? ? ? ? ? ? ? soft ? memlock ? ? ? ? 32000

* ? ? ? ? ? ? ? hard ? memlock ? ? ? ? 32000

* ? ? ? ? ? ? ? soft ? msgqueue ? ? ? ?8192000

* ? ? ? ? ? ? ? hard ? msgqueue ? ? ? ?8192000

?

?

`nproc`(最大進(jìn)程數(shù)限制)的軟限制和硬限制都設(shè)置為 1000000,當(dāng)前用戶在單個(gè)會(huì)話中可以創(chuàng)建的最大進(jìn)程數(shù)為 1000000

?

`nofile`(打開(kāi)文件描述符限制)的軟限制和硬限制都設(shè)置為 1000000,這意味著當(dāng)前用戶在單個(gè)會(huì)話中可以使用的最大文件描述符數(shù)將被限制為 1000000。軟限制是軟性限制,用戶可以根據(jù)需要進(jìn)行調(diào)整,而硬限制是硬性限制,一旦設(shè)定,用戶無(wú)法超過(guò)該限制

?

`memlock`(鎖定內(nèi)存限制)的軟限制和硬限制都設(shè)置為 32000,這意味著當(dāng)前用戶在單個(gè)會(huì)話中可以鎖定的最大內(nèi)存量為 32000KB

?

`msgqueue`(消息隊(duì)列限制)的軟限制和硬限制都設(shè)置為 8192000,這意味著當(dāng)前用戶在單個(gè)會(huì)話中可以使用的最大消息隊(duì)列大小為 8192000字節(jié)

?

2.6 關(guān)閉master-worker工作模式(僅測(cè)試用)

master_process off|on;

#是否開(kāi)啟Nginx的master-worker工作模式,僅用于開(kāi)發(fā)調(diào)試場(chǎng)景,默認(rèn)為on

?

三、events部分

在Nginx的主配置文件中,events部分用于配置Nginx服務(wù)器的事件模塊相關(guān)參數(shù),控制Nginx服務(wù)器在處理連接請(qǐng)求時(shí)的行為。

常見(jiàn)的events配置參數(shù):

worker_connections:指定每個(gè)工作進(jìn)程可以同時(shí)處理的最大連接數(shù)。

multi_accept:指定是否一次接受多個(gè)連接。默認(rèn)情況下,Nginx在每個(gè)循環(huán)中只接受一個(gè)連接,但設(shè)置multi_accept為"on"后可以同時(shí)接受多個(gè)連接。

use:指定Nginx使用的事件模塊。常見(jiàn)的事件模塊有"epoll"、"kqueue"和"eventport"等。

#舉個(gè)例子

events {

? worker_connections 1024;

? multi_accept on;

? use epoll;

}

#指定了每個(gè)工作進(jìn)程可以處理的最大連接數(shù)為1024,啟用了多個(gè)連接同時(shí)接受,以及使用了epoll事件模塊

?

四、http設(shè)置 (重要)

4.1http部分詳解

include:引入其他配置文件,通常用于加載 MIME 類型配置文件。

default_type:指定默認(rèn)的 MIME 類型。

server:定義一個(gè)或多個(gè)虛擬主機(jī)。

listen:指定該虛擬主機(jī)監(jiān)聽(tīng)的端口。

server_name:指定域名,用于匹配請(qǐng)求的主機(jī)頭。

root:指定虛擬主機(jī)的根目錄。

location:用于匹配不同的 URL,并定義相關(guān)配置規(guī)則。

#基本格式

http {

...

... ?#各server的公共配置

server { ? ?#每個(gè)server用于定義一個(gè)虛擬主機(jī),第一個(gè)server為默認(rèn)虛擬服務(wù)器

...

}

server { ? ?

...

server_name ? #虛擬主機(jī)名

root ? ? #主目錄

alias ? ? #路徑別名

location [OPERATOR] URL { ? ? #指定URL的特性

...

if CONDITION {

...

}

}

}

}

?

#詳解

http {

? include ? ? ? mime.types; #導(dǎo)入支持的文件類型,是相對(duì)于/apps/nginx/conf的目錄

? default_type application/octet-stream; #除mime.types中文件類型外,設(shè)置其它文件默認(rèn)類型,訪問(wèn)其它類型時(shí)會(huì)提示下載不匹配的類型文件

#日志配置部分

? ?#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

? ?# ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" ' refer是跳轉(zhuǎn)的源地址,如果沒(méi)有跳轉(zhuǎn) 沒(méi)有refer

? ?# ? ? ? ? ? ? ? ? '"$http_user_agent" "$http_x_forwarded_for"';

? ?#access_log logs/access.log main;

#自定義優(yōu)化參數(shù)

? sendfile ? ? ? on;

? ?#tcp_nopush ? ? on; #在開(kāi)啟了sendfile的情況下,合并請(qǐng)求后統(tǒng)一發(fā)送給客戶端。

? ?#tcp_nodelay ? off; #在開(kāi)啟了keepalived模式下的連接是否啟用TCP_NODELAY選項(xiàng),當(dāng)為off時(shí),延遲0.2s發(fā)送,默認(rèn)On時(shí),不延遲發(fā)送,立即發(fā)送用戶響應(yīng)報(bào)文。

? ?#keepalive_timeout 0;

? keepalive_timeout ?65 65; #設(shè)置會(huì)話保持時(shí)間,第二個(gè)值為響應(yīng)首部:keepAlived:timeout=65,可以和第一個(gè)值不同

? ?#gzip on; #開(kāi)啟文件壓縮

? server {

? ? ? listen ? ? ? 80; #設(shè)置監(jiān)聽(tīng)地址和端口

? ? ? server_name localhost; #設(shè)置server name,可以以空格隔開(kāi)寫(xiě)多個(gè)并支持正則表達(dá)式,如:*.kgc.com www.kgc.* ~^www\d+\.kgc\.com$ default_server

? ? ? ?#charset koi8-r; #設(shè)置編碼格式,默認(rèn)是俄語(yǔ)格式,建議改為utf-8

? ? ? ?#access_log logs/host.access.log main;

? ? ? location / {

? ? ? ? ? root ? html;

? ? ? ? ? index index.html index.htm;

? ? ? }

? ? ? ?#error_page 404 ? ? ? ? ? ? /404.html;

? ? ? ?# redirect server error pages to the static page /50x.html

? ? ? ?#

? ? ? error_page ? 500 502 503 504 /50x.html; #定義錯(cuò)誤頁(yè)面

? ? ? location = /50x.html {

? ? ? ? ? root ? html;

? ? ? }

? ? ? ?# proxy the PHP scripts to Apache listening on 127.0.0.1:80

? ? ? ?#

? ? ? ?#location ~ \.php$ { #以http的方式轉(zhuǎn)發(fā)php請(qǐng)求到指定web服務(wù)器

? ? ? ?# ? proxy_pass ? http://127.0.0.1;

? ? ? ?#}

? ? ? ?# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

? ? ? ?#

? ? ? ?#location ~ \.php$ { #以fastcgi的方式轉(zhuǎn)發(fā)php請(qǐng)求到php處理

? ? ? ?# ? root ? ? ? ? ? html;

? ? ? ?# ? fastcgi_pass ? 127.0.0.1:9000;

? ? ? ?# ? fastcgi_index index.php;

? ? ? ?# ? fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

? ? ? ?# ? include ? ? ? fastcgi_params;

? ? ? ?#}

? ? ? ?# deny access to .htaccess files, if Apache's document root

? ? ? ?# concurs with nginx's one

? ? ? ?#

? ? ? ?#location ~ /\.ht { #拒絕web形式訪問(wèn)指定文件,如很多的網(wǎng)站都是通過(guò).htaccess文件

來(lái)改變自己的重定向等功能。

? ? ? ?# ? deny all;

? ? ? ?#}

? ? ? location ~ /passwd.html {

? ? ? ? ? deny all;

? ? ? }

? }

? ?# another virtual host using mix of IP-, name-, and port-based configuration

? ?#

? ?#server { #自定義虛擬server

?

4.2 mime

在Nginx中,“mime” 是一種配置指令,用于設(shè)置 MIME 類型與文件擴(kuò)展名的映射關(guān)系。

vim /apps/nginx/conf/mime.types

#查看當(dāng)前Nginx服務(wù)器配置的MIME類型列表

?

4.3 server 下的 root指令

在Nginx配置中,"root"指令用于設(shè)置服務(wù)器塊(server block)的根目錄,即指明軟件的根目錄。

通常,"root"指令位于Nginx配置文件中的服務(wù)器塊(server block)中。

server {

? listen 80;

? server_name example.com;

?

? root /var/www/html;

?

? location / {

? ? ? ...

? }

?

? ...

}

#指定了服務(wù)器塊的根目錄為"/var/www/html"

#訪問(wèn)該服務(wù)器的網(wǎng)站時(shí),Nginx會(huì)在"/var/www/html"文件夾中查找并提供相應(yīng)的靜態(tài)文件

?

4.4 構(gòu)建虛擬主機(jī)

4.4.1 基于域名的虛擬主機(jī)

以手機(jī)端和電腦端為例

mkdir -p /apps/nginx/conf.d/#建立虛擬主機(jī)配置文件目錄

?

cd /apps/nginx/conf #主配置文件所在目錄

?

#添加到http模塊中

vim nginx.conf

?

include ? ? ? ? ? ? /apps/nginx/conf.d/*.conf;

#聲明子配置文件的位置,需要寫(xiě)在最上面

?

nginx -t #保存后檢查語(yǔ)法

?

cd /apps/nginx/conf.d/

?

#編寫(xiě)電腦端的配置文件

vim computer.conf

?

server{

? ? ? listen ? 192.168.10.10:80;

? ? ? server_name www.computer.com;

? ? location / {

? ? ? root /data/nginx/html/pc;

? }

}

#編寫(xiě)手機(jī)端的配置文件

vim mobile.conf

?

server {

? listen 192.168.10.10:80;

? server_name www.mobile.com;

? root /data/nginx/html/mobile/;

}

[root@localhost logs]# nginx -t

nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /apps/nginx/conf/nginx.conf test is successful

[root@localhost logs]# nginx -s reload

?

#構(gòu)建數(shù)據(jù)文件夾

mkdir /apps/nginx/html/pc -pv

mkdir /apps/nginx/html/mobile -pv

?

#構(gòu)建數(shù)據(jù)文件

echo This is computer > /apps/nginx/html/pc/index.html

echo This is mobile > /apps/nginx/html/mobile/index.html

?

#切換到測(cè)試機(jī)

#修改本地hosts文件 添加對(duì)應(yīng)映射

vim /etc/hosts

192.168.10.10 www.computer.com

192.168.10.10 www.mobile.com

?

#測(cè)試

curl www.mobile.com

This is mobile

curl www.computer.com

This is computer

?

?

4.4.2 基于端口

服務(wù)端

#編輯子配置文件 mobile.conf,修改端口號(hào)

server{

? ? ? ?listen 192.168.10.10:8080;

? ? ? ?server_name www.mobile.com;

? ? ? ?root /data/nginx/html/moblie;

?

}

?

#computer.conf 不變

server{

? ? ? ?listen ? 192.168.10.10:80;

? ? ? ?server_name www.computer.com;

? ? ? ?root /data/nginx/html/pc;

}

?

?

?

切換到客戶端

curl 192.168.10.10:8080

This is mobile

curl 192.168.10.10:80

This is computer

?

4.4.3 基于ip地址

服務(wù)端

添加新網(wǎng)卡并配置

?

#編輯子配置文件mobile.conf,修改IP地址

cd /apps/nginx/conf.d/

vim mobile.conf

?

server{

? ? ? listen 192.168.10.11:80;

? ? ? server_name www.mobile.com;

? ? ? root /data/nginx/html/mobile;

?

}

?

#computer.conf不變

server{

? ? ? listen ? 192.168.10.10:80;

? ? ? server_name www.computer.com;

? ? ? root /data/nginx/html/pc;

}

?

?

修改客戶端hosts文件

?

vim /etc/hosts

192.168.10.10 www.computer.com

192.168.10.11 www.mobile.com

?

curl 192.168.10.11

This is mobile

curl 192.168.10.10

This is computer

4.5 路徑別名-----alias

在 Nginx 中,alias 用于創(chuàng)建一個(gè)路徑別名的指令。

別名可以用于將文件或目錄從一個(gè)位置映射到另一個(gè)位置,提供更靈活的訪問(wèn)控制。

服務(wù)端

#編輯子配置文件cxk.conf,使用alias

server {

listen 80;

? location /test{

? ? ?alias /apps/nginx/html/pc;

#相當(dāng)于替換,訪問(wèn)/test/就是訪問(wèn)/apps/nginx/html/pc;

?

}

}

?

?

?

4.6 location模塊

在Nginx中,location 是一個(gè)用于匹配請(qǐng)求 URL 路徑的指令。它在 Nginx 配置文件中使用,在不同的 location 塊中定義不同的行為或處理規(guī)則。

#官方幫助文檔

http://nginx.org/en/docs/http/ngx_http_core_module.html#location

?

#基本語(yǔ)法

location [修飾符] 匹配的路徑 {

? ... 配置指令 ...

}

```

?

修飾符功能=精確字符串匹配^~前綴匹配,如果URL路徑以指定的字符串開(kāi)始,則停止查找其他匹配。~使用正則表達(dá)式進(jìn)行匹配,區(qū)分大小寫(xiě)~*使用正則表達(dá)式進(jìn)行匹配,不區(qū)分大小寫(xiě)不帶符號(hào)匹配起始于此uri的所有的uri\表示包含正則表達(dá)式并且轉(zhuǎn)義字符

優(yōu)先級(jí)

4.7 基于四層的訪問(wèn)控制-----access模塊

Nginx的access模塊允許用戶定義基于IP地址、請(qǐng)求方法、URI等條件的訪問(wèn)規(guī)則,以控制客戶端對(duì)NGINX服務(wù)器上特定資源的訪問(wèn)。

1)IP地址訪問(wèn)控制:允許或拒絕特定IP地址或IP地址范圍的訪問(wèn)。

拒絕特定IP地址的訪問(wèn)

?

location / {

? ?deny 192.168.10.10;

? ?#默認(rèn)允許所有

}

?

?

允許特定IP地址段的訪問(wèn)

?

location / {

? ?allow 192.168.2.0/24;

? ?deny all;

}

?

?

2)請(qǐng)求方法訪問(wèn)控制:允許或拒絕特定HTTP請(qǐng)求方法(如GET、POST等)的訪問(wèn)。

僅允許GET請(qǐng)求

?

if ($request_method != GET) {

? ?return 403;

}

?

3)URI訪問(wèn)控制:允許或拒絕特定URI或URI模式的訪問(wèn)。

拒絕特定URI的訪問(wèn)

?

location /cxk {

? ?deny all;

}

允許特定URI模式的訪問(wèn)

?

location ~ ^/api/ {

? ?allow all;

}

?

4)條件組合訪問(wèn)控制:根據(jù)多個(gè)條件的組合來(lái)實(shí)施訪問(wèn)控制策略。

僅允許特定IP地址段的GET請(qǐng)求訪問(wèn)特定URI模式

?

#舉個(gè)例子

location ~ ^/api/ {

? ?if ($request_method != GET) {

? ? ? ?return 403;

? }

? ?allow 192.168.1.0/24;

? ?deny all;

}

?

4.8 驗(yàn)證模塊

4.8.1 htpasswd命令

安裝

yum install httpd-tools -y

?

常用命令

?

#第一次生成文件

htpasswd -c 文件路徑 姓名 ? ? ? 交互式生成密碼

htpasswd -bc 文件路徑 姓名 密碼 ? 直接將密碼跟在

?

-c 代表新建用戶名和密碼對(duì)應(yīng)的文件

-b 將密碼跟在用戶名后

?

#非第一次生成文件

htpasswd ? ? 文件路徑 姓名 ? ? ? 交互式生成密碼

htpasswd -b 文件路徑 姓名 密碼 ? 直接將密碼跟在后面

?

4.8.2 配置驗(yàn)證模塊

#編輯配置文件

vim cxk.conf

?

server {

listen 80;

? location /test{

? ? ?alias /apps/nginx/html/pc;

}

location /admin{

? ? ? ?root /data/nginx/html/pc;

? ? ? ?auth_basic ? ?"admin site";

? ? ? ?#提示信息,不是所有瀏覽器都有用

? ? ? ?auth_basic_user_file /apps/nginx/conf.d/.httpuser;

? ? ? ?#密碼文件存放位置

}

}

?

使用 Basic 認(rèn)證(基本認(rèn)證)對(duì)用戶進(jìn)行身份驗(yàn)證

htpasswd -bc /apps/nginx/conf.d/.httpuser byyd 123456

#創(chuàng)建一個(gè).htpasswd文件,并添加一個(gè)使用Basic認(rèn)證的用戶名和密碼

使用主機(jī)瀏覽器

訪問(wèn)192.168.10.10/admin

4.9 關(guān)閉或修改版本信息

4.9.1 關(guān)閉版本信息顯示

Syntax: server_tokens on | off | build | string;

Default:

server_tokens on;

Context: http, server, location

?

#修改配置文件 放在 ? http語(yǔ)句中

http {

? server_tokens off;

? ?

?

?

[root@localhost nginx]#nginx -s reload

#重新加載

?

驗(yàn)證

[root@localhost sbin]#curl -I http://192.168.10.10/

HTTP/1.1 200 OK

Server: nginx/1.18.0

Date: Thu, 21 Apr 2022 03:34:51 GMT

Content-Type: text/html

Content-Length: 612

Last-Modified: Tue, 19 Apr 2022 02:43:17 GMT

Connection: keep-alive

ETag: "625e21c5-264"

Accept-Ranges: bytes

?

[root@localhost sbin]#curl -I http://192.168.10.10/

HTTP/1.1 200 OK

Server: nginx

Date: Thu, 21 Apr 2022 04:04:23 GMT

Content-Type: text/html

Content-Length: 612

Last-Modified: Tue, 19 Apr 2022 02:43:17 GMT

Connection: keep-alive

ETag: "625e21c5-264"

Accept-Ranges: bytes

?

4.9.2 修改nginx 版本信息 優(yōu)化

思路: 修改安裝包里源碼, 再重新編譯

?

源碼路徑

/nginx-1.18.0/src/core/nginx.h

?

cd /opt

vim./nginx-1.18.0/src/core/nginx.h

?

#修改前

#define nginx_version ? ? 1018000

#define NGINX_VERSION ? ? "1.18.0"

#define NGINX_VER ? ? ? ? "nginx/" NGINX_VERSION

?

#修改后

#define nginx_version ? ? 1018000

#define NGINX_VERSION ? ? "cxk"

#define NGINX_VER ? ? ? ? "nginx/" NGINX_VERSION

?

vim ./nginx-1.18.0/src/http/ngx_http_header_filter_module.c

#修改模塊的源代碼文件

?

#修改前

static u_char ngx_http_server_string[] = "Server: nginx" CRLF;

static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;

?

#修改后

static u_char ngx_http_server_string[] = "Server: cxk" CRLF;

static u_char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

static u_char ngx_http_server_build_string[] = "Server: " NGINX_VER_BUILD CRLF;

?

?

##然后重新編譯安裝

./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

?

make -j2 && make install

?

?

編譯安裝完成后,重啟

nginx -v #查看版本信息

curl -I 192.168.2.100

?

4.10 自定義 錯(cuò)誤頁(yè)面

#error_page 404 ? ? ? ? ? ? /404.html;

#默認(rèn)錯(cuò)誤頁(yè)面

?

修改錯(cuò)誤頁(yè)面的主要目的是為了提供更友好的用戶體驗(yàn)和品牌一致性。

也可以用指定的響應(yīng)狀態(tài)碼進(jìn)行響應(yīng)。

#部分響應(yīng)狀態(tài)碼

400 Bad Request:請(qǐng)求不正確或無(wú)效的錯(cuò)誤頁(yè)面。

401 Unauthorized:未授權(quán)訪問(wèn)的錯(cuò)誤頁(yè)面。

403 Forbidden:禁止訪問(wèn)的錯(cuò)誤頁(yè)面。

404 Not Found:頁(yè)面未找到的錯(cuò)誤頁(yè)面。

500 Internal Server Error:服務(wù)器內(nèi)部錯(cuò)誤的錯(cuò)誤頁(yè)面。

502 Bad Gateway:錯(cuò)誤的網(wǎng)關(guān)請(qǐng)求的錯(cuò)誤頁(yè)面。

503 Service Unavailable:服務(wù)不可用的錯(cuò)誤頁(yè)面

?

配置文件中的可用位置:http, server, location, if in location。

#基本格式

error_page code ... [=[response]] uri;

?

#構(gòu)成詳解

error_page ? 固定寫(xiě)法

code ? ? ? ? 響應(yīng)碼

= ? ? ? ? ? ? 可以將響應(yīng)碼轉(zhuǎn)換

uri ? ? ? ? ? 訪問(wèn)連接

?

新建錯(cuò)誤頁(yè)面和錯(cuò)誤頁(yè)面目錄

?

mkdir /apps/nginx/html/pc/error/

cd /appsnginx/html/pc/error/

?

vim 40x.html #錯(cuò)誤頁(yè)面

在子配置文件的sever語(yǔ)塊下

error_page 404 =302 /40x.html;

location = /40x.html {

? ? root /apps/nginx/html/pc/error/;

}

?

?

4.11 修改日志的位置

通過(guò)修改日志的路徑,可以實(shí)現(xiàn)日志分離,即不同網(wǎng)站的日志單獨(dú)存放。

mkdir /data/logs #新建存放日志的目錄

?

?

#編輯子配置文件,指定日志存放位置

在server語(yǔ)塊下添加

error_log ? /data/logs/m_error.log;

? ? ? access_log /data/logs/m_access.log;

? ? ? ?

nginx -t

nginx -s reload #語(yǔ)法檢查無(wú)誤后重載

?

4.13 長(zhǎng)連接相關(guān)-----keepalive指令

4.13.1 原理

HTTP Keep-Alive 功能用于實(shí)現(xiàn)長(zhǎng)連接,允許客戶端和服務(wù)器之間的 TCP 連接在發(fā)送完一個(gè)請(qǐng)求后保持打開(kāi)狀態(tài),以便在同一連接上發(fā)送多個(gè)請(qǐng)求和響應(yīng)。

可以加在全局或者 server 。

keepalive 配置指令僅對(duì) HTTP/1.0 和 HTTP/1.1 版本的連接有效。

對(duì)于 HTTP/2 連接,keepalive 功能是默認(rèn)啟用的,并且無(wú)需額外配置。

4.13.2 keepalive_timeout

keepalive_timeout timeout [header_timeout];

#設(shè)定保持連接超時(shí)時(shí)長(zhǎng)

?

keepalive_timeout 用于定義長(zhǎng)連接超時(shí)時(shí)間。

當(dāng)一個(gè)客戶端與服務(wù)器之間的連接完成一個(gè)請(qǐng)求后的等待時(shí)間。 如果在這個(gè)時(shí)間內(nèi)沒(méi)有收到新的請(qǐng)求,服務(wù)器會(huì)關(guān)閉連接。 這個(gè)時(shí)間是以秒為單位的,默認(rèn)值是 75 秒。

4.13.3 keepalive_requests

keepalive_requests number; ?

#在一次長(zhǎng)連接上所允許請(qǐng)求的資源的最大數(shù)量

?

keepalive_requests 用于設(shè)置一個(gè)連接上可以處理的最大請(qǐng)求數(shù)量。

當(dāng)達(dá)到指定數(shù)量后,服務(wù)器會(huì)關(guān)閉該連接并且客戶端需要重新建立新連接。

默認(rèn)情況下,keepalive_requests 的值是 100。

如果將 keepalive_requests 設(shè)置為 0,則表示在完成每個(gè)請(qǐng)求后立即關(guān)閉連接,禁用了 Keep-Alive 功能。

4.14 用戶上傳資料

client_max_body_size 1m;

#設(shè)置允許客戶端上傳單個(gè)文件的最大值,默認(rèn)值為1m,上傳文件超過(guò)此值會(huì)出413錯(cuò)誤

client_body_buffer_size size;

#用于接收每個(gè)客戶端請(qǐng)求報(bào)文的body部分的緩沖區(qū)大小;默認(rèn)16k;超出此大小時(shí),其將被暫存到磁盤上的由下面client_body_temp_path指令所定義的位置

client_body_temp_path path [level1 [level2 [level3]]];

#設(shè)定存儲(chǔ)客戶端請(qǐng)求報(bào)文的body部分的臨時(shí)存儲(chǔ)路徑及子目錄結(jié)構(gòu)和數(shù)量,目錄名為16進(jìn)制的數(shù)字,使用hash之后的值從后往前截取1位、2位、2位作為目錄名

?

上傳文件大于限制 ?錯(cuò)誤代碼413

?

4.15 其他設(shè)置

directio size | off;

#操作完全和aio相反,aio是讀取文件而directio是寫(xiě)文件到磁盤,啟用直接I/O,默認(rèn)為關(guān)閉,當(dāng)文件大于等于給定大小時(shí),例如:directio 4m;同步(直接)寫(xiě)磁盤,而非寫(xiě)緩存。

?

直接 寫(xiě)入 磁盤 ? ? 還是等待一定數(shù)據(jù)量寫(xiě)入磁盤

?

open_file_cache off; ?#是否緩存打開(kāi)過(guò)的文件信息

open_file_cache max=N [inactive=time];

#nginx可以緩存以下三種信息:

(1) 文件元數(shù)據(jù):文件的描述符、文件大小和最近一次的修改時(shí)間

(2) 打開(kāi)的目錄結(jié)構(gòu)

(3) 沒(méi)有找到的或者沒(méi)有權(quán)限訪問(wèn)的文件的相關(guān)信息

max=N:#可緩存的緩存項(xiàng)上限數(shù)量;達(dá)到上限后會(huì)使用LRU(Least recently used,最近最少使用)算法實(shí)現(xiàn)管理

inactive=time:#緩存項(xiàng)的非活動(dòng)時(shí)長(zhǎng),在此處指定的時(shí)長(zhǎng)內(nèi)未被命中的或命中的次數(shù)少于

?

?

?

open_file_cache_min_uses ? ?

#指令所指定的次數(shù)的緩存項(xiàng)即為非活動(dòng)項(xiàng),將被刪除

open_file_cache_valid time;

#緩存項(xiàng)有效性的檢查驗(yàn)證頻率,默認(rèn)值為60s

open_file_cache_errors on | off;

#是否緩存查找時(shí)發(fā)生錯(cuò)誤的文件一類的信息,默認(rèn)值為off

open_file_cache_min_uses number;

#open_file_cache指令的inactive參數(shù)指定的時(shí)長(zhǎng)內(nèi),至少被命中此處指定的次數(shù)方可被歸類為活動(dòng)項(xiàng),默認(rèn)值為1

?

范例:

open_file_cache max=10000 inactive=60s;

#最大緩存10000個(gè)文件,非活動(dòng)數(shù)據(jù)超時(shí)時(shí)長(zhǎng)60s

open_file_cache_valid ? 60s; ?

#每間隔60s檢查一下緩存數(shù)據(jù)有效性

open_file_cache_min_uses 5;

#60秒內(nèi)至少被命中訪問(wèn)5次才被標(biāo)記為活動(dòng)數(shù)據(jù)

open_file_cache_errors ? on;

#緩存錯(cuò)誤信息

?

?

?

limit_except method ... { ... },僅用于location

#限制客戶端使用除了指定的請(qǐng)求方法之外的其它方法

method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND,

PROPPATCH, LOCK, UNLOCK, PATCH

limit_except GET {

allow 192.168.91.101;

deny all;

}

#除了GET和HEAD 之外其它方法僅允許192.168.1.0/24網(wǎng)段主機(jī)使用

?

五、變量

在NGINX中,變量是一種用于存儲(chǔ)和檢索HTTP請(qǐng)求和響應(yīng)中的數(shù)據(jù)的機(jī)制。

變量可以包含請(qǐng)求頭、請(qǐng)求方法、請(qǐng)求參數(shù)、時(shí)間戳等信息。

http://nginx.org/en/docs/varindex.html

官方文檔

?

5.1 內(nèi)置變量

5.1.1 常用內(nèi)置變量

當(dāng)NGINX作為反向代理服務(wù)器時(shí),它將接收到的客戶端請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)器。為了保持請(qǐng)求的來(lái)源信息,NGINX可以在轉(zhuǎn)發(fā)請(qǐng)求時(shí)設(shè)置X-Forwarded-For頭部,以便后端服務(wù)器知道真實(shí)的客戶端IP地址。

內(nèi)置變量功能$remote_addr客戶端的地址,注意是客戶端的公網(wǎng)IP$proxy_add_x_forwarded_for在反向代理服務(wù)器中設(shè)置X-Forwarded-For請(qǐng)求頭$args請(qǐng)求的查詢參數(shù)$arg_輸出名為的查詢參數(shù)的值$document_root當(dāng)前請(qǐng)求的根目錄路徑$document_uri當(dāng)前請(qǐng)求的URI,不包括查詢字符串部分$host存放了請(qǐng)求的主機(jī)名limit_rate如果nginx服務(wù)器使用limit_rate配置了顯示網(wǎng)絡(luò)速率,則會(huì)顯示,如果沒(méi)有設(shè)置, 則顯示0$remote_port客戶端請(qǐng)求Nginx服務(wù)器時(shí)隨機(jī)打開(kāi)的端口,這是每個(gè)客戶端自己的端口$remote_user已經(jīng)經(jīng)過(guò)Auth Basic Module驗(yàn)證的用戶名$request_body_file做反向代理時(shí)發(fā)給后端服務(wù)器的本地資源的名稱$request_method請(qǐng)求資源的方式,GET/PUT/DELETE等$request_filename當(dāng)前請(qǐng)求的文件路徑$request_uri包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名$scheme請(qǐng)求使用的協(xié)議(http或https)$server_protocol保存了客戶端請(qǐng)求資源使用的協(xié)議的版本$server_addr保存了服務(wù)器的IP地址$server_name請(qǐng)求的服務(wù)器的主機(jī)名$server_port請(qǐng)求的服務(wù)器的端口號(hào)$http_記錄請(qǐng)求報(bào)文的首部字段$http_user_agent客戶端使用的用戶代理$http_cookie請(qǐng)求中的Cookie$cookie_name為任意請(qǐng)求報(bào)文首部字部cookie的key名$sent_http_name為響應(yīng)報(bào)文的首部字段

5.1.2自定義變量

假如需要自定義變量名稱和值,使用指令set $variable value;

語(yǔ)法格式:

Syntax: set $variable value;

Default: —

Context: server, location, if

范例:

set $name kgc;

echo $name;

set $my_port $server_port;

echo $my_port;

echo "$server_name:$server_port"; #輸出信息如下

[root@centos6 ~]#curl www.kgc.org/main

kgc

80

www.kgc.org:80

?

######################################################

實(shí)際例子:

location /test {

? ? ? ?set $name kgc;

? ? ? ?echo $name;

? ? ? ?set $my_port $server_port;

? ? ? ?echo $my_port;

? ? ? }

?

六、自定義訪問(wèn)日志 (優(yōu)化)

自定義訪問(wèn)日志可以提供更靈活和定制化的日志記錄方式。

1.滿足特定需求:通過(guò)自定義訪問(wèn)日志,你可以選擇記錄特定的訪問(wèn)信息,如客戶端IP地址、訪問(wèn)時(shí)間、請(qǐng)求內(nèi)容、狀態(tài)碼、傳輸字節(jié)數(shù)、引用頁(yè)面、用戶代理等。這些信息可以根據(jù)你的需求進(jìn)行自定義,以滿足特定的分析、監(jiān)控或統(tǒng)計(jì)需求。

2.減少日志量:默認(rèn)情況下,Nginx 記錄的訪問(wèn)日志較為詳細(xì),包含了大量的信息。而自定義訪問(wèn)日志可以讓你只記錄感興趣的信息,避免產(chǎn)生過(guò)多的日志數(shù)據(jù),減少磁盤空間和讀寫(xiě)開(kāi)銷。

3.提高性能:自定義訪問(wèn)日志可以減少磁盤的寫(xiě)入操作,從而減小對(duì)系統(tǒng)性能的影響。尤其在高訪問(wèn)量的情況下,減少日志量可以提高系統(tǒng)的處理能力和響應(yīng)速度。

4.日志分析與監(jiān)控:自定義訪問(wèn)日志可以使日志數(shù)據(jù)更易于分析和監(jiān)控。你可以根據(jù)自定義的格式,使用各種日志分析工具或腳本,提取有用的信息,進(jìn)行訪問(wèn)分析、安全審計(jì)、性能優(yōu)化等工作。

6.1自定義訪問(wèn)日志的格式

要自定義 Nginx 的訪問(wèn)日志,你需要編輯 Nginx 的配置文件,并修改 http 部分的日志格式。

以下是一個(gè)簡(jiǎn)單的例子,展示了如何在 Nginx 配置文件中定義一個(gè)自定義的訪問(wèn)日志格式:

http {

? ?# 定義自定義訪問(wèn)日志格式

? ?log_format my_custom_log '$remote_addr - $remote_user [$time_local] "$request" '

? ? ? ? ? ? ? ? ? ? ? ? ? '$status $body_bytes_sent "$http_referer" '

? ? ? ? ? ? ? ? ? ? ? ? ? '"$http_user_agent"';

?

? ?# 配置使用自定義訪問(wèn)日志格式的訪問(wèn)日志文件

? ?access_log /path/to/custom_access.log my_custom_log;

?

? ?# 其他配置項(xiàng)...

}

?

在上述例子中,我們使用 `log_format` 指令定義了一個(gè)名為 `my_custom_log` 的自定義日志格式,該格式包含了 IP 地址、用戶名、訪問(wèn)時(shí)間、請(qǐng)求內(nèi)容、狀態(tài)碼、傳輸字節(jié)數(shù)、引用頁(yè)面和用戶代理等信息。

?

然后,在 `access_log` 指令中指定了一個(gè)自定義訪問(wèn)日志文件的路徑 `/path/to/custom_access.log`,并且將之前定義的 `my_custom_log` 格式應(yīng)用于該日志文件。

?

請(qǐng)注意,修改完配置文件之后,記得重新加載 Nginx 配置使改動(dòng)生效,使用命令 `nginx -s reload` 可以實(shí)現(xiàn)配置文件的熱重載。

?

6.2 自定義json 格式日志

log_format access_json '{"@timestamp":"$time_iso8601",'

? ? ? ?'"host":"$server_addr",'

? ? ? ?'"clientip":"$remote_addr",'

? ? ? ?'"size":$body_bytes_sent,'

? ? ? ?'"responsetime":$request_time,'

? ? ? ?'"upstreamtime":"$upstream_response_time",'

? ? ? ?'"upstreamhost":"$upstream_addr",' ?

? ? ? ?'"http_host":"$host",'

? ? ? ?'"uri":"$uri",'

? ? ? ?'"xff":"$http_x_forwarded_for",'

? ? ? ?'"referer":"$http_referer",'

? ? ? ?'"tcp_xff":"$proxy_protocol_addr",'

? ? ? ?'"http_user_agent":"$http_user_agent",'

? ? ? ?'"status":"$status"}';

?

?

location / {

?root /data/nginx/pc/;

?access_log logs/access.log access_json;

}

'"http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTMLe/101.0.4951.54 Safari/537.36",' ? ?'"status":"304"}'

?

?

七、Nginx壓縮功能(重要)

Nginx通過(guò)在服務(wù)器上啟用gzip模塊來(lái)提供壓縮功能。

啟用gzip后,Nginx會(huì)自動(dòng)檢測(cè)客戶端的瀏覽器支持情況,然后在服務(wù)器和客戶端之間壓縮和解壓縮文件。

太小的文件沒(méi)必要壓縮,壓縮說(shuō)不定變大了。

官方文檔: Module ngx_http_gzip_module

參數(shù)項(xiàng)釋義參數(shù)值gzip開(kāi)啟或關(guān)閉壓縮機(jī)制on/off;gzip_types根據(jù)文件類型選擇性開(kāi)啟壓縮機(jī)制image/png、text/css…gzip_comp_level用于設(shè)置壓縮級(jí)別,級(jí)別越高越耗時(shí)1~9(越高壓縮效果越好)gzip_vary設(shè)置是否攜帶Vary:Accept-Encoding頭域的響應(yīng)頭部on/offgzip_buffers設(shè)置處理壓縮請(qǐng)求的緩沖區(qū)數(shù)量和大小 數(shù)量 大小如16 8kgzip_disable針對(duì)不同客戶端的請(qǐng)求來(lái)設(shè)置是否開(kāi)啟壓縮如 .Chrome.gzip_http_version指定壓縮響應(yīng)所需要的最低HTTP請(qǐng)求版本如1.1gzip_min_length設(shè)置觸發(fā)壓縮的文件最低大小如512kgzip_proxied對(duì)于后端服務(wù)器的響應(yīng)結(jié)果是否開(kāi)啟壓縮off、expired、no-cache…

http{

? ?# 開(kāi)啟壓縮機(jī)制

? ?gzip on;

? ?# 指定會(huì)被壓縮的文件類型(也可自己配置其他類型)

? ?gzip_types text/plain application/javascript text/css application/xml text/javascript image/jpeg image/gif image/png;

? ?# 設(shè)置壓縮級(jí)別,越高資源消耗越大,但壓縮效果越好

? ?gzip_comp_level 5;

? ?# 在頭部中添加Vary: Accept-Encoding(建議開(kāi)啟)

? ?gzip_vary on;

? ?# 處理壓縮請(qǐng)求的緩沖區(qū)數(shù)量和大小

? ?gzip_buffers 16 8k;

? ?# 對(duì)于不支持壓縮功能的客戶端請(qǐng)求不開(kāi)啟壓縮機(jī)制

? ?gzip_disable "MSIE [1-6]\."; # 低版本的IE瀏覽器不支持壓縮

? ?# 設(shè)置壓縮響應(yīng)所支持的HTTP最低版本

? ?gzip_http_version 1.1;

? ?# 設(shè)置觸發(fā)壓縮的最小閾值

? ?gzip_min_length 2k;

? ?# 關(guān)閉對(duì)后端服務(wù)器的響應(yīng)結(jié)果進(jìn)行壓縮

? ?gzip_proxied off;

}

?

八、HTTPS 功能

8.1 Nginx的HTTPS工作原理的詳解

1)客戶端發(fā)送HTTPS請(qǐng)求:客戶端(例如Web瀏覽器)通過(guò)HTTPS協(xié)議向Nginx服務(wù)器發(fā)送加密的HTTP請(qǐng)求。默認(rèn)情況下,HTTPS使用443端口進(jìn)行通信。

2)服務(wù)器證書(shū)握手:Nginx服務(wù)器接收到HTTPS請(qǐng)求后,會(huì)向客戶端發(fā)送已經(jīng)配置好的SSL證書(shū)。該證書(shū)包含了服務(wù)器的公鑰以及其他相關(guān)信息,例如服務(wù)器的域名。

3)客戶端驗(yàn)證證書(shū):客戶端接收到服務(wù)器發(fā)送的證書(shū)后,會(huì)使用預(yù)置的受信任證書(shū)頒發(fā)機(jī)構(gòu)(CA)根證書(shū)列表來(lái)驗(yàn)證詳細(xì)的服務(wù)器證書(shū)鏈。客戶端會(huì)檢查證書(shū)是否由受信任的CA簽發(fā),并驗(yàn)證證書(shū)的有效性和真實(shí)性。如果證書(shū)通過(guò)驗(yàn)證,客戶端可以確認(rèn)服務(wù)器的身份。

4)密鑰交換:如果服務(wù)器的證書(shū)被成功驗(yàn)證,客戶端會(huì)生成一個(gè)隨機(jī)的對(duì)稱密鑰,稱為“會(huì)話密鑰”。然后,客戶端使用服務(wù)器的公鑰來(lái)加密該會(huì)話密鑰,并將其發(fā)送給服務(wù)器。

5)數(shù)據(jù)加密:Nginx服務(wù)器接收到客戶端發(fā)送的加密的會(huì)話密鑰后,使用服務(wù)器的私鑰解密該會(huì)話密鑰。此后,Nginx服務(wù)器和客戶端使用會(huì)話密鑰來(lái)進(jìn)行對(duì)稱加密和解密,以加密和解密數(shù)據(jù)的傳輸。

6)安全數(shù)據(jù)傳輸:一旦會(huì)話密鑰被交換并使用,Nginx服務(wù)器和客戶端之間的通信將通過(guò)使用會(huì)話密鑰進(jìn)行加密和解密來(lái)保證安全性。所有通過(guò)HTTPS協(xié)議傳輸?shù)臄?shù)據(jù),包括HTTP請(qǐng)求和響應(yīng)內(nèi)容,都將被加密。

客戶端和服務(wù)器之間的加密通道建立后,數(shù)據(jù)在傳輸過(guò)程中將經(jīng)過(guò)加密,從而提供了更高的安全性。

8.2 啟用功能模塊的配置過(guò)程

Nginx的HTTPS功能通過(guò)ngx_http_ssl_module模塊來(lái)實(shí)現(xiàn)的。

ngx_http_ssl_module模塊為Nginx添加了對(duì)SSL/TLS協(xié)議的支持,使其能夠提供HTTPS服務(wù)。

ngx_http_ssl_module模塊提供了一組配置項(xiàng),用于指定SSL證書(shū)、私鑰、加密算法、協(xié)議版本以及其他與SSL/TLS相關(guān)的設(shè)置。

配置步驟:

1)獲取SSL證書(shū)和私鑰:從證書(shū)頒發(fā)機(jī)構(gòu)(CA)或自簽名證書(shū)頒發(fā)機(jī)構(gòu)獲取有效的SSL證書(shū)和對(duì)應(yīng)的私鑰文件。證書(shū)用于驗(yàn)證服務(wù)器的身份,私鑰用于解密SSL連接。

2)配置Nginx:編輯主配置文件nginx.conf

ssl_certificate:指定SSL證書(shū)文件的路徑。

?

ssl_certificate_key:指定SSL私鑰文件的路徑。

?

ssl_protocols:指定支持的TLS協(xié)議版本,例如TLSv1.2、TLSv1.3。

?

ssl_ciphers:指定加密算法套件,例如AES128-GCM-SHA256、ECDHE-RSA-AES256-GCM-SHA384。

?

其他可選的SSL配置項(xiàng):ssl_prefer_server_ciphers、ssl_session_timeout等。

#舉例子

server {

? ?listen 443 ssl;

? ?server_name example.com;

?

? ?ssl_certificate /path/to/certificate.crt;

? ?ssl_certificate_key /path/to/private/key.key;

?

? ?# SSL配置項(xiàng)

? ?ssl_protocols TLSv1.2 TLSv1.3;

? ?ssl_prefer_server_ciphers on;

? ?ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

}

?

3)重啟Nginx:保存配置文件,并重新加載或重啟Nginx服務(wù)。

nginx -s reload

?

九、自定義圖標(biāo)

favicon.ico 文件是瀏覽器收藏網(wǎng)址時(shí)顯示的圖標(biāo)。

當(dāng)客戶端使用瀏覽器問(wèn)頁(yè)面時(shí),瀏覽器會(huì)自己主動(dòng)發(fā)起請(qǐng)求獲取頁(yè)面的favicon.ico文件。 當(dāng)瀏覽器請(qǐng)求的favicon.ico文件不存在時(shí),服務(wù)器會(huì)記錄404日志,而瀏覽器會(huì)顯示404報(bào)錯(cuò)。

#方法一:服務(wù)器不記錄訪問(wèn)日志:

location = /favicon.ico {

? log_not_found off;

? access_log off;

}

#方法二:將圖標(biāo)保存到指定目錄訪問(wèn):

#location ~ ^/favicon\.ico$ {

location = /favicon.ico {

? ? root ? /data/nginx/html/pc/images;

? ? expires 365d; ?#設(shè)置文件過(guò)期時(shí)間

}

?

十、重寫(xiě)功能 rewrite

Nginx服務(wù)器利用 ngx_http_rewrite_module 模塊解析和處理rewrite請(qǐng)求。

Nginx 的重寫(xiě)功能是指通過(guò)修改請(qǐng)求 URL 的方式來(lái)實(shí)現(xiàn)URL重定向或者路由轉(zhuǎn)發(fā)的功能。

通過(guò)使用重寫(xiě)規(guī)則,可以對(duì)訪問(wèn)的URL進(jìn)行匹配和替換,以達(dá)到用戶期望的效果。

#舉個(gè)例子

location /old-url {

?rewrite ^/old-url/(.*)$ /new-url/$1 permanent;

}

?

匹配以 "/old-url/" 開(kāi)頭的請(qǐng)求,并將其重定向到 "/new-url/"。

?

10.1 if指令

基本原理

官方文檔 Module ngx_http_rewrite_module

if指令用于條件匹配判斷,并根據(jù)條件判斷結(jié)果選擇不同的Nginx配置,可以配置在server或location塊中。

Nginx的if語(yǔ)法僅能使用if做單次判斷,不支持使用if else或者if elif這樣的多重判斷。

基本語(yǔ)法

if (條件匹配) {

action

}

?

使用正則表達(dá)式對(duì)變量進(jìn)行匹配,匹配成功時(shí)if指令認(rèn)為條件為true,否則認(rèn)為false。

變量與表達(dá)式之間使用以下符號(hào)鏈接

= ? #比較變量和字符串是否相等,相等時(shí)if指令認(rèn)為該條件為true,反之為false

!= #比較變量和字符串是否不相等,不相等時(shí)if指令認(rèn)為條件為true,反之為false

~ ? #區(qū)分大小寫(xiě)字符,可以通過(guò)正則表達(dá)式匹配,滿足匹配條件為真,不滿足匹配條件為假

!~ #區(qū)分大小寫(xiě)字符,判斷是否匹配,不滿足匹配條件為真,滿足匹配條件為假

?

~* #不區(qū)分大小寫(xiě)字符,可以通過(guò)正則表達(dá)式匹配,滿足匹配條件為真,不滿足匹配條件為假

!~* #不區(qū)分大小字符,判斷是否匹配,滿足匹配條件為假,不滿足匹配條件為真

?

-f 和 !-f #判斷請(qǐng)求的文件是否存在和是否不存在

-d 和 !-d #判斷請(qǐng)求的目錄是否存在和是否不存在

-x 和 !-x #判斷文件是否可執(zhí)行和是否不可執(zhí)行

-e 和 !-e #判斷請(qǐng)求的文件或目錄是否存在和是否不存在(包括文件,目錄,軟鏈接)

?

如果$ 變量的值為空字符串或0,則if指令認(rèn)為該條件為false,其他條件為true。

$變量的值如果以0開(kāi)頭的任意字符串會(huì)返回false

location /main {

? ? index index.html;

? ? default_type text/html;

? ? if ( $scheme = http ){

? ? ? echo "if-----> $scheme";

? ? }

? ? if ( $scheme = https ){

? ? ?echo "if ----> $scheme";

? }

? ?

? ? #if (-f $request_filename) {

? ? # ? echo "$request_filename is exist";

? ? #}

? ? if (!-e $request_filename) {

? ? ? ?echo "$request_filename is not exist";

? ? ? ?#return ;

? }

}

?

?

【用戶訪問(wèn)的文件不存在 直接返回主頁(yè)】

server {

? ?listen 80;

? ?server_name www.kgc.com;

? ?root /data/nginx/pc/;

? ?location / {

? ?root /data/nginx/pc/;

}

? ?location /test {

? ?default_type text/plain;

? ?return ?301 http://www.baidu.com;

}

? ?location /main {

? ?index index.html;

? ?default_type text/html;

? ?if ( $scheme = http ){

? ?return 666 "if-----> $scheme";

? }

? ?if (!-e $request_filename){

? ?return 302 /index.html; ? ? ? ? ?#如果用戶不存在直接跳轉(zhuǎn)到主頁(yè)面

?

}

}

}

www.kgc.com/main/xxxxx ? ?

#注意訪問(wèn)的main下的不存在 目錄 ?

#注意前面的if語(yǔ)句執(zhí)行后會(huì) 停止匹配

【想控制所有網(wǎng)站可以 ?放到前面】

server {

? ?listen 80;

? ?server_name www.kgc.com;

? ?root /data/nginx/pc/;

? ?if (!-e $request_filename){

? ?return 302 /index.html; ? ? ? ? ?#如果用戶不存在直接跳轉(zhuǎn)到主頁(yè)面

}

location / {

? ?root /data/nginx/pc/;

}

? ?location /test {

? ?default_type text/plain;

? ?return ?301 http://www.baidu.com;

}

? ?location /main {

? ?index index.html;

? ?default_type text/html;

? ?if ( $scheme = http ){

? ?return 666 "if-----> $scheme";

? }

? ?

}

}

?

10.2 return指令

return用于完成對(duì)請(qǐng)求的處理,并直接向客戶端返回響應(yīng)狀態(tài)碼,比如:可以指定重定向URL(對(duì)于特殊重定向狀態(tài)碼,301/302等) 或者是指定提示文本內(nèi)容(對(duì)于特殊狀態(tài)碼403/500等),處于此指令后的所有配置都將不被執(zhí)行,return可以在server、if 和 location塊進(jìn)行配置

語(yǔ)法格式:

www.kgc.com/test/

404

return code; #返回給客戶端指定的HTTP狀態(tài)碼

return code [text]; #返回給客戶端的狀態(tài)碼及響應(yīng)報(bào)文的實(shí)體內(nèi)容,可以調(diào)用變量,其中text如果有空格,需要用單或雙引號(hào)

return code url; #返回給客戶端的URL地址 ? ?

范例:

location / {

? root /data/nginx/html/pc;

? ?default_type text/html;

? index index.html;

? ? ?if ( $scheme = http ){

? ? ? ?#return 666;

? ? ? ?#return 666 "not allow http";

? ? ? ?#return 301 http://www.baidu.com;

? ? ? return 500 "service error";

? ? ? ?echo "if-----> $scheme"; #return后面的將不再執(zhí)行

? ? }

? ? if ( $scheme = https ){

? ? ?echo "if ----> $scheme";

? }

}

##############################################################

例子1:

server {

? ?listen 80;

? ?server_name www.kgc.com;

? ?root /data/nginx/pc/;

location /{

? ? ? ?root /data/nginx/pc/;

?

}

?location /test { ? ? ?#訪問(wèn)test 直接返回403

return 403; ? ? ? ? #可以改成666 ? ?

}

?

}

?

例子2:

location /test { ? ? ? ? ? ? ? ?#訪問(wèn)test 直接返回403

return 666 "hello"; ? ? ? ? #可以改成666自定義,hello是描述 文字可以 圖形瀏覽器不可以 ? ?

}

?

?

例子3:

?location /test {

?default_type text/plain; ? ? #定義文本格式后圖形瀏覽器可以看見(jiàn)

?return 666 "hello";

}

?

?

例子4:

location /test {

? ? ? ?default_type text/plain;

? ? ? ?return 302 http://www.baidu.com; ? ?

}

?

location /test {

? ? ? ?default_type text/plain;

? ? ? ?return 301 /index.html; ? ?

}

301 緩存在磁盤上,有些

302 沒(méi)有緩存 , 服務(wù)器斷開(kāi)無(wú)法重定向 ? jd

?

永久重定向

10.3 set 指令

指定key并給其定義一個(gè)變量,變量可以調(diào)用Nginx內(nèi)置變量賦值給key,另外set定義格式為set $key value,value可以是text, variables和兩者的組合。

location /main {

? root /data/nginx/html/pc;

? index index.html;

? default_type text/html;

? ?set $name kgc;

? ?echo $name;

? ?set $my_port $server_port(nginx ?自帶的變量 ?服務(wù)端口 一般80);

? ?echo $my_port;

}

10.4 break指令

用于中斷當(dāng)前相同作用域(location)中的其他Nginx配置,與該指令處于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模塊中指令就不再執(zhí)行,Nginx服務(wù)器在根據(jù)配置處理請(qǐng)求的過(guò)程中遇到該指令的時(shí)候,回到上一層作用域繼續(xù)向下讀取配置,該指令可以在server塊和locationif塊中使用

注意: 如果break指令在location塊中后續(xù)指令還會(huì)繼續(xù)執(zhí)行,只是不執(zhí)行 ngx_http_rewrite_module 模塊的指令,其它指令還會(huì)執(zhí)行

使用語(yǔ)法如下:

if ($slow) {

? limit_rate 10k;

? break;

}

location /main {

? root /data/nginx/html/pc;

? index index.html;

? default_type text/html;

? ?set $name kgc;

? ?echo $name;

? break; ?#location塊中break后面指令還會(huì)執(zhí)行

? ?set $my_port $server_port;

? ?echo $my_port;

}

10.5 rewrite 指令

通過(guò)正則表達(dá)式的匹配來(lái)改變URI,可以同時(shí)存在一個(gè)或多個(gè)指令,按照順序依次對(duì)URI進(jìn)行匹配,rewrite主要是針對(duì)用戶請(qǐng)求的URL或者是URI做具體處理

官方文檔:

https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite

?

?

% s/舊的/新的/

rewrite可以配置在 server、location、if

語(yǔ)法格式 :

rewrite可以配置在 server、location、if

語(yǔ)法格式 :

rewrite regex ? ? ? ? ? ? ? replacement(www.baidu.com) ? ? ? [flag];

? ? ? 正則匹配原始訪問(wèn)url ? 替代你想讓客戶訪問(wèn)的 ? ? ? ? ? ? ? ? ? 標(biāo)志 ()premanent301 ? redirect302 break last

rewrite將用戶請(qǐng)求的URI基于regex所描述的模式進(jìn)行檢查,匹配到時(shí)將其替換為表達(dá)式指定的新的URI

注意:如果在同一級(jí)配置塊中存在多個(gè)rewrite規(guī)則,那么會(huì)自下而下逐個(gè)檢查;被某條件規(guī)則替換完成后,會(huì)重新一輪的替換檢查,隱含有循環(huán)機(jī)制,但不超過(guò)10次;如果超過(guò),提示500響應(yīng)碼,[flag]所表示的標(biāo)志位用于控制此循環(huán)機(jī)制如果替換后的URL是以http://或https://開(kāi)頭,則替換結(jié)果會(huì)直接以重定向返回給客戶端, 即永久重定向 301

正則表達(dá)式格式

. #匹配除換行符以外的任意字符

\w #匹配字母或數(shù)字或下劃線或漢字

\s #匹配任意的空白符

\d #匹配數(shù)字 ? [0-9] ?

\b #匹配單詞的開(kāi)始或結(jié)束

^ #匹配字付串的開(kāi)始

$ #匹配字符串的結(jié)束

* #匹配重復(fù)零次或更多次

+ #匹配重復(fù)一次或更多次

? #匹配重復(fù)零次或一次

(n) #匹配重復(fù)n次

{n,} #匹配重復(fù)n次或更多次

{n,m} #匹配重復(fù)n到m次

*? #匹配重復(fù)任意次,但盡可能少重復(fù)

+? #匹配重復(fù)1次或更多次,但盡可能少重復(fù)

?? #匹配重復(fù)0次或1次,但盡可能少重復(fù)

{n,m}? #匹配重復(fù)n到m次,但盡可能少重復(fù)

{n,}? #匹配重復(fù)n次以上,但盡可能少重復(fù)

\W ?#匹配任意不是字母,數(shù)字,下劃線,漢字的字符

\S #匹配任意不是空白符的字符

\D #匹配任意非數(shù)字的字符

\B #匹配不是單詞開(kāi)頭或結(jié)束的位置

[^x] #匹配除了x以外的任意字符

[^kgc] #匹配除了kgc 這幾個(gè)字母以外的任意字符

rewrite flag 使用介紹

利用nginx的rewrite的指令,可以實(shí)現(xiàn)url的重新跳轉(zhuǎn),rewrtie有四種不同的flag,分別是redirect(臨時(shí)重定向302)、permanent(永久重定向301)、break和last。其中前兩種是跳轉(zhuǎn)型的flag,后兩種是代理型

跳轉(zhuǎn)型指由客戶端瀏覽器重新對(duì)新地址進(jìn)行請(qǐng)求 代理型是在WEB服務(wù)器內(nèi)部實(shí)現(xiàn)跳轉(zhuǎn)

rewrite 格式

Syntax: rewrite regex replacement [flag]; #通過(guò)正則表達(dá)式處理用戶請(qǐng)求并返回替換后的數(shù)據(jù)包。

Default: —

Context: server, location, if

?

?

hn ? 湖南 ? 海南 ? 河南

?

?

hn ? hainan

flag 說(shuō)明

redirect;302

#臨時(shí)重定向,重寫(xiě)完成后以臨時(shí)重定向方式直接返回重寫(xiě)后生成的新URL給客戶端,由客戶端重新發(fā)起請(qǐng)求;使用相對(duì)路徑,或者h(yuǎn)ttp://或https://開(kāi)頭,狀態(tài)碼:302

?

permanent;301 ? ? ? www.bj.com ? ? www.beijing.com

#重寫(xiě)完成后以永久重定向方式直接返回重寫(xiě)后生成的新URL給客戶端,由客戶端重新發(fā)起請(qǐng)求,狀態(tài)碼:301

?

?

?

break; ? ? ? www.bj.com

#重寫(xiě)完成后,停止對(duì)當(dāng)前URL在當(dāng)前l(fā)ocation中后續(xù)的其它重寫(xiě)操作,而后直接跳轉(zhuǎn)至重寫(xiě)規(guī)則配置塊之后的其它配置;結(jié)束循環(huán),建議在location中使用

#適用于一個(gè)URL一次重寫(xiě)

?

?

?

last;

#重寫(xiě)完成后,停止對(duì)當(dāng)前URI在當(dāng)前l(fā)ocation中后續(xù)的其它重寫(xiě)操作,而后對(duì)新的URL啟動(dòng)新一輪重寫(xiě)檢查,不建議在location中使用

#適用于一個(gè)URL多次重寫(xiě),要注意避免出現(xiàn)超過(guò)十次以及URL重寫(xiě)后返回錯(cuò)誤的給用戶301

例子:

www.haishi.com www.hs.com

#訪問(wèn) bj ? 跳轉(zhuǎn)到 beijing ?

location /bj {

? root /data/nginx/pc; ?

? rewrite ^/bj/(.*) ? /beijing/$1 ? permanent;

?

}

?

此處的$1代表后項(xiàng)引用

?

?

?

?

location / {

? root /data/nginx/html/pc;

? index index.html;

? rewrite / http://www.kgc.com permanent;

? ?#rewrite / http://www.kgc.com redirect;

}

#重啟Nginx并訪問(wèn)域名 http://www.kgc.org 進(jìn)行測(cè)試

?

?

?

【rewrite】

rewrite regex replacement [flag];

指令 ? ? 正則 ? 替換 ? ? ? ? 標(biāo)志

?

?

【訪問(wèn)bj ?等于 訪問(wèn)beijing】

location /bj {

? rewrite ^/bj/(.*) /beijing/$1 permanent;

}

mkdir beijing

echo beijing > beijing/index.html

?

?

整個(gè)網(wǎng)頁(yè)跳轉(zhuǎn) ?老域名跳轉(zhuǎn)到新域名

location / {

? ? ? ? root /data/nginx/pc/;

? ? ? ?rewrite / ?http://www.accp.com permanent;

}

server {

?

listen 80;

server_name www.accp.com;

root /data/nginx/pc/accp/;

}

~ ? ? ? ? ? ? ?

cd /data/nginx/pc/

mkdir accp

echo accp > accp/index.html

?

?

【break】

server {

? ?listen 80;

? ?server_name www.kgc.com;

? ?root /data/nginx/pc/;

? ?if (!-e $request_filename){

? ?return 302 /index.html;

}

? ?location /test {

? ?default_type text/plain;

? ?set $name kgc;

? ?return ?666 $name;

}

? ?location /main {

? ?index index.html;

? ?default_type text/html;

? ?if ( $scheme = http ){

? ?return 666 "if-----> $scheme";

? }

}

location /bj {

? rewrite ^/bj/(.*) /beijing/$1 ?break;

}

}

?

mkdir beijing

echo beijing > beijing/index.html

?

mkdir bj

echo bj > bj/index.html

?

?

301 302 ? 請(qǐng)求后 ?告訴你重定向的域名, 讓你重新發(fā)起請(qǐng)求

break ? ? 服務(wù)器緩存好網(wǎng)頁(yè)直接讓你訪問(wèn),直接給你結(jié)果

?

實(shí)戰(zhàn)案例 http 轉(zhuǎn)https

server {

listen 443 ssl;

listen 80;

ssl_certificate /apps/nginx/certs/www.kgc.org.crt;

ssl_certificate_key /apps/nginx/certs/www.kgc.org.key;

ssl_session_cache shared:sslcache:20m;

ssl_session_timeout 10m;

server_name www.kgc.org;

location / { ? ?#針對(duì)全站跳轉(zhuǎn)

? root /data/nginx/html/pc;

? index index.html;

? ?if ($scheme = http ){ ?#如果沒(méi)有加條件判斷,會(huì)導(dǎo)致死循環(huán)

? rewrite / https://$host redirect;

? } ? ? http://www.kgc.com ? ? https://www.kgc.com ?

}

location /login { ? ? #針對(duì)特定的URL進(jìn)行跳轉(zhuǎn)https

if ($scheme = http ){ ?#如果沒(méi)有加條件判斷,會(huì)導(dǎo)致死循環(huán)

? rewrite / https://$host/login redirect;

? }

? }

}

10.6 防盜鏈

10.6.1什么是盜鏈?

盜鏈(Hotlinking)是指在一個(gè)網(wǎng)站上使用或顯示其他網(wǎng)站的資源(如圖片、視頻、音頻等)的行為,而不是通過(guò)將資源保存到本地服務(wù)器來(lái)引用這些資源。

盜鏈者直接鏈接到原始資源的URL,使得資源消耗原始網(wǎng)站的帶寬和服務(wù)器資源,會(huì)給原始網(wǎng)站帶來(lái)額外的負(fù)擔(dān),并且可能導(dǎo)致資源被濫用或不當(dāng)使用。

10.6.2 防盜鏈簡(jiǎn)介

Nginx的防盜鏈機(jī)制實(shí)現(xiàn),跟一個(gè)頭部字段:Referer有關(guān),該字段主要描述了當(dāng)前請(qǐng)求是從哪兒發(fā)出的,那么在Nginx中就可獲取該值,然后判斷是否為本站的資源引用請(qǐng)求,如果不是則不允許訪問(wèn)。

基本語(yǔ)法

valid_referers none | blocked | server_names | string ...;

?

none:表示接受沒(méi)有Referer字段的HTTP請(qǐng)求訪問(wèn)。

blocked:表示允許http://或https//以外的請(qǐng)求訪問(wèn)。

server_names:資源的白名單,這里可以指定允許訪問(wèn)的域名。

string:可自定義字符串,支配通配符、正則表達(dá)式寫(xiě)法。

實(shí)現(xiàn)防盜鏈

在第二臺(tái)機(jī)器上:

systemctl ? stop firewalld

setenforce ?0

yum install epel-release.noarch -y

yum install nginx

cd /usr/share/nginx/html

vim ?index.html

this is yunjisuan ?

systemctl start nginx ?

?

vim ? /etc/nginx/nginx.conf

41 ? ? ? ? server_name www.accp.com;

修改41行如上

?

真機(jī)上 添加dns ?解析

C:\Windows\System32\drivers\etc ?

打開(kāi) ?hosts ?文件 ?

第二臺(tái)機(jī)器的IP地址 ? ? ? www.accp.com

真機(jī)上測(cè)試

www.accp.com ?是否可以打開(kāi)圖片

?

第一臺(tái)服務(wù)器

vim ? /apps/nginx/conf.d/pc.conf

server{

? ? ? ?listen 80;

? ? ? ?server_name www.pc.com;

? ? ? ?root ? /data/nginx/pc;

? ? ? ?location / {

? ? ? ?root /data/nginx/pc;

}

? ? ? ?location ~* \.(jpg|gif|swf|jpeg|bmp)$ {

? ? ? ? root /data/nginx/pc;

? ? ? ? valid_referers none blocked *.pc.com pc.com;

? ? ? ? if ( $invalid_referer ) {

? ? ? ? ? #rewrite ^/ http://www.pc.com/error.png;

? ? ? ? ? return ? 403;

? ? ? }

? ? ? }

}

}

?

cd /data/nginx/pc/

拖入兩張圖片 ? a.jpg ? ? error.png

再次測(cè)試www.accp.com ?是否可以打開(kāi)圖片

?

?

?

?

?

?

?

?

www.kgc.com

www.accp.com

?

80

/data/nginx/kgc

/data/nginx/accp

?

server {

? listen 80;

server_name ? www.kgc.com;

root /data/nginx/kgc;

}

?

server {

? listen 80;

server_name ? www.accp.com;

root /data/nginx/accp;

}

?

location ~* \.(jpg|gif|swf)$ { ? ? ? ? ? ?

? ? ? ? root /data/nginx/pc;

? ? ? ? valid_referers none blocked *.pc.com pc.com; ?

? ? ? ? if ( $invalid_referer ) {

? ? ? ? ? rewrite ^/ http://www.pc.com/error.png;

? ? ? ? ? #return 403

? ? ? ? ? }

? ? ? }

? ? ? ?

? ? ? ?

? ? ? ?

~* \.(jpg|gif|swf)$:這段正則表達(dá)式表示匹配不區(qū)分大小寫(xiě),以.jpg 或.gif 或.swf 結(jié)尾的文件

Valid_referers:設(shè)置信任的網(wǎng)站,可以正常使用圖片。

None :瀏覽器中 referer 為空的情況,就是直接在瀏覽器訪問(wèn)圖片。

Blocked :referer 不為空的情況 ,但是值被代理或防火墻刪除了,這些值不以 http://或https://開(kāi)頭。后面的網(wǎng)址或者域名:referer 中包含相關(guān)字符串的網(wǎng)址。

If 語(yǔ)句:如果鏈接的來(lái)源域名不在 valid_referers 所列出的列表中,$invalid_referer 為1,則執(zhí)行后面的操作,即進(jìn)行重寫(xiě)或返回 403 頁(yè)面。

十一、正向代理與反向代理

11.1 正向代理簡(jiǎn)介

正向代理代理的是客戶端。

客戶端設(shè)備要訪問(wèn)局域網(wǎng)以外的 Internet 時(shí),需在客戶端瀏覽器中配置代理服務(wù)器,然后通過(guò)代理服 務(wù)器來(lái)進(jìn)行訪問(wèn),將訪問(wèn)到的局域網(wǎng)以外的 Internet 網(wǎng)站內(nèi)容返回給客戶端,而不是通過(guò)局域網(wǎng)中的客 戶端設(shè)備直接訪問(wèn)。

正向代理的用途:

訪問(wèn)原來(lái)無(wú)法訪問(wèn)的資源;

可做緩存,加速訪問(wèn)資源;

對(duì)客戶端訪問(wèn)授權(quán),上網(wǎng)進(jìn)行認(rèn)證;

代理可以記錄用戶訪問(wèn)記錄等,且對(duì)外隱藏用戶信息。

簡(jiǎn)單配置:

server {

? ?listen 80;

? ?server_name ....;#客戶端訪問(wèn)的域名或IP地址

?

? ?location / {

? ? ?proxy_pass http://目標(biāo)服務(wù)器地址;

? }

}

?

11.2 反向代理簡(jiǎn)介

反向代理代理的是服務(wù)端。

在使用反向代理時(shí),客戶端向一個(gè)服務(wù)器發(fā)送請(qǐng)求,而實(shí)際上該請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到后端的多個(gè)真實(shí)服務(wù)器(也稱為上游服務(wù)器),然后由反向代理服務(wù)器來(lái)處理請(qǐng)求并將結(jié)果返回給客戶端。

客戶端不直接與后端服務(wù)器進(jìn)行通信,而是與反向代理服務(wù)器進(jìn)行通信,隱藏了后端服務(wù)器的 IP 地址。

反向代理能實(shí)現(xiàn)的功能

反向代理的主要作用是提供負(fù)載均衡和高可用性。

負(fù)載均衡:Nginx可以將傳入的請(qǐng)求分發(fā)給多個(gè)后端服務(wù)器,以平衡服務(wù)器的負(fù)載,提高系統(tǒng)性能和可靠性。

緩存功能:Nginx可以緩存靜態(tài)文件或動(dòng)態(tài)頁(yè)面,減輕服務(wù)器的負(fù)載,提高響應(yīng)速度。

動(dòng)靜分離:將動(dòng)態(tài)生成的內(nèi)容(如 PHP、Python、Node.js 等)和靜態(tài)資源(如 HTML、CSS、JavaScript、圖片、視頻等)分別存放在不同的服務(wù)器或路徑上。

多站點(diǎn)代理:Nginx可以代理多個(gè)域名或虛擬主機(jī),將不同的請(qǐng)求轉(zhuǎn)發(fā)到不同的后端服務(wù)器上,實(shí)現(xiàn)多個(gè)站點(diǎn)的共享端口。

反向代理的可用模塊

ngx_http_proxy_module ? ?

#將客戶端的請(qǐng)求以http協(xié)議轉(zhuǎn)發(fā)至指定服務(wù)器進(jìn)行處理

ngx_http_upstream_module

#用于定義為proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后端服務(wù)器分組

ngx_stream_proxy_module ?

#將客戶端的請(qǐng)求以tcp協(xié)議轉(zhuǎn)發(fā)至指定服務(wù)器處理

ngx_http_fastcgi_module ?

#將客戶端對(duì)php的請(qǐng)求以fastcgi協(xié)議轉(zhuǎn)發(fā)至指定服務(wù)器助理

ngx_http_uwsgi_module ? ?

#將客戶端對(duì)Python的請(qǐng)求以u(píng)wsgi協(xié)議轉(zhuǎn)發(fā)至指定服務(wù)器處理

?

十二、配置反向代理

12.1 反向代理配置參數(shù)

12.1.1 proxy_pass

proxy_pass 地址:端口的方式 ; ?

#用來(lái)設(shè)置將客戶端請(qǐng)求轉(zhuǎn)發(fā)給的后端服務(wù)器的主機(jī),可以是主機(jī)名(將轉(zhuǎn)發(fā)至后端服務(wù)做為主機(jī)頭首部)、IP

#也可以代理到預(yù)先設(shè)置的主機(jī)群組,需要模塊ngx_http_upstream_module支持

#如果location定義其uri時(shí)使用了正則表達(dá)式模式(包括~,~*,但不包括^~),則proxy_pass之后必須不能使用uri; 即不能有/ ,用戶請(qǐng)求時(shí)傳遞的uri將直接附加至后端服務(wù)器之后

?

?

proxy_pass http://10.0.0.18:8080; 和

proxy_pass http://10.0.0.18:8080/;主要有以下區(qū)別:

?

1. 尾部斜杠的處理:在 `proxy_pass` 指令中,尾部斜杠的有無(wú)會(huì)影響代理的行為。當(dāng) `proxy_pass` 后跟一個(gè)斜杠 `/` 時(shí),表示將請(qǐng)求的 URI 附加到代理服務(wù)器的地址后面。而當(dāng) `proxy_pass` 后沒(méi)有斜杠時(shí),請(qǐng)求的 URI 將被完全忽略,并將直接轉(zhuǎn)發(fā)到指定的代理服務(wù)器。

?

? - `proxy_pass http://10.0.0.18:8080;`:請(qǐng)求將直接轉(zhuǎn)發(fā)到 `http://10.0.0.18:8080`,不附加任何 URI。

? - `proxy_pass http://10.0.0.18:8080/;`:請(qǐng)求將被附加上原始 URI,并轉(zhuǎn)發(fā)到 `http://10.0.0.18:8080`。

?

2. 請(qǐng)求路徑的保留:當(dāng)使用 `proxy_pass` 指令時(shí),代理服務(wù)器會(huì)保留原始請(qǐng)求的路徑信息。這意味著,無(wú)論使用哪種形式,原始請(qǐng)求的路徑將被傳遞到目標(biāo)服務(wù)器。只是在轉(zhuǎn)發(fā)時(shí)是否附加原始路徑的處理不同。

?

12.1.2 其余參數(shù)

proxy_hide_header field;

#用于nginx作為反向代理的時(shí)候,在返回給客戶端http響應(yīng)時(shí),隱藏后端服務(wù)器相應(yīng)頭部的信息,可以設(shè)置

?

proxy_pass_header field;

#默認(rèn)nginx在響應(yīng)報(bào)文中不傳遞后端服務(wù)器的首部字段Date, Server, X-Pad, X-Accel等參數(shù),如果

要傳遞的話則要使用 proxy_pass_header field聲明將后端服務(wù)器返回的值傳遞給客戶端

#field 首部字段大小不敏感

#示例:透?jìng)骱蠖朔?wù)器的Server和Date首部給客戶端,同時(shí)不再響應(yīng)報(bào)中顯示前端服務(wù)器的Server字段`

proxy_pass_header Server;

proxy_pass_header Date;

?

?

proxy_pass_request_body on | off;

#是否向后端服務(wù)器發(fā)送HTTP實(shí)體部分,可以設(shè)置在http,server或location塊,默認(rèn)即為開(kāi)啟

?

proxy_pass_request_headers on | off;

#是否將客戶端的請(qǐng)求頭部轉(zhuǎn)發(fā)給后端服務(wù)器,可以設(shè)置在http,server或location塊,默認(rèn)即為開(kāi)啟

2.2 配置實(shí)例:反向代理單臺(tái)web服務(wù)器

配置部分

7-1 ? 代理服務(wù)器

?

vim /apps/nginx/conf.d/computer.conf

#添加

location / {

? ?proxy_pass http://192.168.2.102;

}

?

7-2 ? 真實(shí)服務(wù)器

?

yum ?install ? httpd ?-y #安裝服務(wù)

?

cd /var/www/html

echo ? "Hello World" > index.html #主頁(yè)內(nèi)容

?

systemctl start httpd #開(kāi)啟服務(wù)

7-3 ? 客戶機(jī)

?

vim /etc/hosts

192.168.2.100 www.byyb.com

?

測(cè)試

7-3(客戶端)訪問(wèn) 7-2(代理服務(wù)器)

curl 192.168.2.100

Hello World

?

十三、反向代理實(shí)現(xiàn)動(dòng)靜分離

server {

listen 80;

server_name www.kgc.org;

location / {

? index index.html index.php;

? root /data/nginx/html/pc;

? }

location /api {

? #proxy_pass http://10.0.0.18:80/; #注意有后面的/, 表示置換

? proxy_pass http://192.168.91.101; ?#后面沒(méi)有 / , 表示追加

}

}

?

?

?

server {

......

location ~* \.(jpe?g|png|bmp|gif)$ {

? proxy_pass http://192.168.91.103; ? ? #如果加/ 語(yǔ)法出錯(cuò) ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

}

}

?

#如果 http://10.0.0.18/ 有 / 語(yǔ)法出錯(cuò)

?

?

?

server{

? ? ? ?listen 80;

? ? ? ?server_name www.pc.com;

? ? ? ?root ? /data/nginx/pc;

? ? location / {

? ? ? ?root /data/nginx/pc;

}

? ? location /api {

? ? ? ?root /data/nginx/pc;

? ? ? ?proxy_pass http://192.168.91.101:8080;

?

? ? ? }

? ? location ~* \.(jpg|jpeg|png|gif|bmp)$ {

? ? ? ?root /data/nginx/pc;

? ? ? ?proxy_pass http://192.168.91.102;

? ? ? }

?

}

十四、緩存功能

反向代理可以緩存靜態(tài)資源,如圖片、CSS和JavaScript文件等。

當(dāng)客戶端再次請(qǐng)求相同資源時(shí),反向代理可以直接返回緩存中的響應(yīng),減少對(duì)后端服務(wù)器的請(qǐng)求壓力,并加快響應(yīng)速度。

proxy_cache zone_name | off; 默認(rèn)off

#指明調(diào)用的緩存,或關(guān)閉緩存機(jī)制;Context:http, server, location

#zone_name 表示緩存的名稱.需要由proxy_cache_path事先定義

?

proxy_cache_key string;

#緩存中用于“鍵”的內(nèi)容,默認(rèn)值:proxy_cache_key $scheme$proxy_host$request_uri;

?

?

?

proxy_cache_valid [code ...] time;

#定義對(duì)特定響應(yīng)碼的響應(yīng)內(nèi)容的緩存時(shí)長(zhǎng),定義在http{...}中

示例:

proxy_cache_valid 200 302 10m;

proxy_cache_valid 404 1m;

proxy_cache_path;

#定義可用于proxy功能的緩存;Context:http

proxy_cache_path path [levels=levels] [use_temp_path=on|off]

keys_zone=zone_name:size [inactive=time] [max_size=size] [manager_files=number]

[manager_sleep=time] [manager_threshold=time] [loader_files=number]

[loader_sleep=time] [loader_threshold=time] [purger=on|off]

[purger_files=number] [purger_sleep=time] [purger_threshold=time];

?

?

#示例:在http配置定義緩存信息

? proxy_cache_path /var/cache/nginx/proxy_cache #定義緩存保存路徑,proxy_cache會(huì)自動(dòng)創(chuàng)建

? levels=1:2:2 #定義緩存目錄結(jié)構(gòu)層次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576個(gè)目錄

? keys_zone=proxycache:20m #指內(nèi)存中緩存的大小,主要用于存放key和metadata(如:使用次數(shù)),一般1M可存放8000個(gè)左右的key

? inactive=120s ?#緩存有效時(shí)間 ?

? max_size=10g; #最大磁盤占用空間,磁盤存入文件內(nèi)容的緩存空間最大值

?

?

#調(diào)用緩存功能,需要定義在相應(yīng)的配置段,如server{...};或者location等

proxy_cache proxycache;

proxy_cache_key $request_uri; #對(duì)指定的數(shù)據(jù)進(jìn)行MD5的運(yùn)算做為緩存的key

proxy_cache_valid 200 302 301 10m; #指定的狀態(tài)碼返回的數(shù)據(jù)緩存多長(zhǎng)時(shí)間

proxy_cache_valid any 1m; ? #除指定的狀態(tài)碼返回的數(shù)據(jù)以外的緩存多長(zhǎng)時(shí)間,必須設(shè)置,否則不會(huì)緩存

?

?

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 |

http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默認(rèn)是off

#在被代理的后端服務(wù)器出現(xiàn)哪種情況下,可直接使用過(guò)期的緩存響應(yīng)客戶端

#示例

proxy_cache_use_stale error http_502 http_503;

?

?

proxy_cache_methods GET | HEAD | POST ...;

#對(duì)哪些客戶端請(qǐng)求方法對(duì)應(yīng)的響應(yīng)進(jìn)行緩存,GET和HEAD方法總是被緩存

?

proxy_cache_path /data/nginx/proyxcache ? levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;

?

#上面那段寫(xiě)在 http語(yǔ)句

?

:1:1 ?16個(gè)二進(jìn)制

?

?

server {

? listen 80;

? proxy_cache proxycache;

? proxy_cache_key $request_uri;

? #proxy_cache_key $host$uri$is_args$args;

? proxy_cache_valid 200 302 301 10m;

? proxy_cache_valid any 5m;

? server_name www.kgc.com;

? root /data/nginx/pc;

?location / {

?root /data/nginx/pc;

}

?location /api {

?proxy_pass http://192.168.91.101:9527;

}

?location ~* \.(jpg|png|gif|html)$ {

?proxy_pass http://192.168.91.102;

}

?

}

?

?

十五、反向代理客戶端的IP透?jìng)?/p>

15.1 原理概述

反向代理客戶端IP透?jìng)魇侵冈谑褂梅聪虼矸?wù)器時(shí),將客戶端的真實(shí)IP地址傳遞給后端服務(wù)器。

這可以通過(guò)一些特定的 HTTP 頭字段來(lái)實(shí)現(xiàn),比如 X-Forwarded-For (XFF) 頭字段。

當(dāng)請(qǐng)求經(jīng)過(guò)反向代理服務(wù)器時(shí),代理服務(wù)器會(huì)將客戶端的真實(shí)IP地址添加到 XFF 頭字段中,然后轉(zhuǎn)發(fā)給后端服務(wù)器。

15.2 一級(jí)代理

配置部分

7-1 代理服務(wù)器

?

#編輯子配置文件

vim /apps/nginx/conf.d/computer.conf

#修改location部分

location / {

? index index.html index.php;

? root /data/nginx/html/pc;

? proxy_pass http://192.168.2.102;

? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

}

#####

`$proxy_add_x_forwarded_for` 是一個(gè) nginx 變量,用于獲取客戶端的真實(shí) IP 地址并將其添加到請(qǐng)求中的 `X-Forwarded-For` 頭字段中,后端服務(wù)器可以通過(guò)檢查該頭字段來(lái)獲取請(qǐng)求的真實(shí)客戶端 IP 地址。

?

`X-Forwarded-For` 頭字段是一個(gè)常用的 HTTP 請(qǐng)求頭,用于指示請(qǐng)求的真實(shí)客戶端 IP 地址。

?

7-2 后端服務(wù)器

?

#關(guān)閉防火墻和selinux

systemctl stop firewalld

setenforce 0

?

#安裝服務(wù)

yum install -y epel-release #依賴

yum install nginx -y

systemctl start nginx

?

?

?

測(cè)試部分

7-3客戶端,訪問(wèn)代理服務(wù)器

curl 192.168.2.100

?

7-2 后端服務(wù)器,查看日志

cat /var/log/nginx/access.log | tail -n -2

#后端服務(wù)器可以看到客戶端的真實(shí)地址

?

?

十六、反向代理負(fù)載均衡

Nginx 可以基于ngx_http_upstream_module模塊提供服務(wù)器分組轉(zhuǎn)發(fā)、權(quán)重分配、狀態(tài)監(jiān)測(cè)、調(diào)度算法等高級(jí)功能。

16.1 工作原理

Nginx負(fù)載均衡通過(guò)將傳入的請(qǐng)求分發(fā)到多個(gè)后端服務(wù)器來(lái)實(shí)現(xiàn)負(fù)載均衡。

它可以根據(jù)不同的調(diào)度算法(如輪詢、IP哈希、最小連接數(shù)等)將請(qǐng)求分發(fā)到后端服務(wù)器。

16.2 部分配置參數(shù)

s

erver address [parameters];

#配置一個(gè)后端web服務(wù)器,配置在upstream內(nèi),至少要有一個(gè)server服務(wù)器配置。

#server支持的parameters如下:

?

weight=number #設(shè)置權(quán)重,默認(rèn)為1,實(shí)現(xiàn)類似于LVS中的WRR,WLC等

?

max_conns=number ?#給當(dāng)前后端server設(shè)置最大活動(dòng)鏈接數(shù),默認(rèn)為0表示沒(méi)有限制

max_fails=number ?#后端服務(wù)器的下線條件,當(dāng)客戶端訪問(wèn)時(shí),對(duì)本次調(diào)度選中的后端服務(wù)器連續(xù)進(jìn)行檢測(cè)多少次,如果都失敗就標(biāo)記為不可用,默認(rèn)為1次,當(dāng)客戶端訪問(wèn)時(shí),才會(huì)利用TCP觸發(fā)對(duì)探測(cè)后端服務(wù)器健康性檢查,而非周期性的探測(cè)

?

fail_timeout=time #后端服務(wù)器的上線條件,對(duì)已經(jīng)檢測(cè)到處于不可用的后端服務(wù)器,每隔此時(shí)間間隔再次進(jìn)行檢測(cè)是否恢復(fù)可用,如果發(fā)現(xiàn)可用,則將后端服務(wù)器參與調(diào)度,默認(rèn)為10秒

?

?

?

sorry server ? 自己不能轉(zhuǎn)自己

?

down ? ?#標(biāo)記為down狀態(tài)

?

resolve #當(dāng)server定義的是主機(jī)名的時(shí)候,當(dāng)A記錄發(fā)生變化會(huì)自動(dòng)應(yīng)用新IP而不用重啟Nginx

backup ?#設(shè)置為備份服務(wù)器,當(dāng)所有后端服務(wù)器不可用時(shí),才會(huì)啟用此備用服務(wù)器

?

upstream backend {

? ?server backend1.example.com;

? ?server backend2.example.com backup;

? ?server backend3.example.com;

}

?

16.3 調(diào)度算法

1)輪詢(Round Robin):這是默認(rèn)的調(diào)度算法,Nginx依次分配每個(gè)請(qǐng)求給后端服務(wù)器,實(shí)現(xiàn)簡(jiǎn)單且公平的請(qǐng)求分發(fā)。

http {

? ?upstream backend {

? ? ? ?server backend1.example.com;

? ? ? ?server backend2.example.com;

? }

? ?

? ?server {

? ? ? ?listen 80;

? ? ? ?location / {

? ? ? ? ? ?proxy_pass http://backend;

? ? ? }

? }

}

?

2)加權(quán)輪詢(Weighted Round Robin):通過(guò)為每個(gè)后端服務(wù)器指定一個(gè)權(quán)重,根據(jù)權(quán)重比例來(lái)分配請(qǐng)求。具有更高權(quán)重的服務(wù)器將獲得更多的請(qǐng)求。

http {

? ?upstream backend {

? ? ? ?server backend1.example.com weight=3;

? ? ? ?server backend2.example.com weight=1;

? }

? ?

? ?server {

? ? ? ?listen 80;

? ? ? ?location / {

? ? ? ? ? ?proxy_pass http://backend;

? ? ? }

? }

?

}

?

3)IP Hash:根據(jù)客戶端的IP地址進(jìn)行散列,將同一IP的請(qǐng)求分配給同一臺(tái)后端服務(wù)器,實(shí)現(xiàn)會(huì)話保持。

http {

? ?upstream backend {

? ? ? ?ip_hash;

? ? ? ?server backend1.example.com;

? ? ? ?server backend2.example.com;

? }

? ?

? ?server {

? ? ? ?listen 80;

? ? ? ?location / {

? ? ? ? ? ?proxy_pass http://backend;

? ? ? }

? }

}

?

4)URL哈希(URL Hash):基于請(qǐng)求的URL進(jìn)行散列計(jì)算,將相同URL的請(qǐng)求分發(fā)到同一臺(tái)后端服務(wù)器,用于緩存或會(huì)話的需要。

http {

? ?upstream backend {

? ? ? ?hash $request_uri;

? ? ? ?server backend1.example.com;

? ? ? ?server backend2.example.com;

? }

? ?

? ?server {

? ? ? ?listen 80;

? ? ? ?location / {

? ? ? ? ? ?proxy_pass http://backend;

? ? ? }

? }

}

?

5)參數(shù)哈希(Parameter Hash):基于請(qǐng)求的特定參數(shù)進(jìn)行散列計(jì)算,將具有相同參數(shù)值的請(qǐng)求分發(fā)到同一臺(tái)后端服務(wù)器。

6)最小連接數(shù)(Least Connections):將請(qǐng)求分發(fā)給連接數(shù)最少的服務(wù)器,以確保服務(wù)器的負(fù)載盡可能均衡。

http {

? ?upstream backend {

? ? ? least_conn;

? ? ? ?server backend1.example.com;

? ? ? ?server backend2.example.com;

? }

? ?

? ?server {

? ? ? ?listen 80;

? ? ? ?location / {

? ? ? ? ? ?proxy_pass http://backend;

? ? ? }

? }

}

?

7)最少響應(yīng)時(shí)間(Least Time):根據(jù)服務(wù)器的響應(yīng)時(shí)間進(jìn)行選擇,將請(qǐng)求分配給響應(yīng)時(shí)間最短的服務(wù)器。

柚子快報(bào)激活碼778899分享:運(yùn)維 nginx全解

http://yzkb.51969.com/

推薦鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19141914.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄