模塊名稱 | 做用 | 語法 | 默認 | 配置位置 | 配置舉例 | 結果驗證 | 備註 |
1 --with-http_stub_status_module | 監控Nginx的服務器鏈接狀態 | stub_status | server、location這一級來配置 | location = /mystatus{ stub_status; } |
此時訪問http://127.0.0.1/mystatus 便可查看如今有nginx如今有多少鏈接了 |
||
2 --with-http_random_index_module | 目錄中選擇隨機一個頁面做爲主頁 | random_index on|off | location這一級來配置 | location / { root /usr/share/nginx/html; #index index.html index.htm; random_index on; } |
不會隨機到隱藏文件 | ||
3 --with-http_sub_module | HTTP內容替換 | 一、sub_filter '要替換的字符' '替換後的字符' 二、sub_filter_last_modified on|off 三、sub_filter_once on|off |
http、server、location這一級來配置 | location / { root /usr/share/nginx/html; #index index.html index.htm; random_index on; sub_filter '1' '2'; sub_filter_once off; } |
二、用於服務端和瀏覽器端進行每一次請求的時候校驗服務端是否有發生過變動 三、爲on時只替換第一個匹配到的; 爲off時替換所有匹配到的 |
||
4 -limit_conn_module | 鏈接頻率限制 | 一、limit_conn_zone key zone=name:size; key:以key爲依據來限制頻率(例:key爲源IP) name:保存鏈接數須要一塊內存,name爲這塊內存地址 size:name這塊內存的大小 其他爲關鍵字javascript 二、limit_conn zone number; zone:爲1中的name number:限制的大小(例:限制源IP爲1.1.1.1的併發爲1000)php |
一、http這一級來配置 二、http、server、location這一級來配置 |
http{ limit_conn_zone $remote_addr zone=abc:10m; server { location / { root /usr/share/nginx/html; index index.html index.htm; limit_conn zone zone=bcd 1; } } } |
實驗沒作成功,NND | 一個TCP鏈接爲一個鏈接,在一個TCP鏈接裏能夠有多個HTTP鏈接 (即:TCP三次握手一次後就能夠發送多個http請求了。即:單路複用) |
|
5 -limit_req_module | 請求頻率限制 | 一、limit_req_zone key zone=name:size rate=rate key、name、size同limit_conn_module rate:以秒爲單位的頻率(例:每秒100次請求)css 二、limit_req zone=name [burst=number][nodelay] name:爲1中的name [burst=number]:選填,number爲客戶端在超過速率後的前number個放到下一秒執行 [nodelay]:選填,超過速率的直接返回503html |
一、http這一級來配置 二、http、server、location這一級來配置 |
http{ limit_req_zone $remote_addr zone=bcd:1m rate=1r/s; server { location / { root /usr/share/nginx/html; index index.html index.htm; limit_req zone=bcd burst=3 nodelay; } } } |
限定每秒請求爲1時,在1秒內訪問2次的話第二次返回503. (小米搶手機估計就是用的這套路) |
||
6 -http_access_module | 基於IP的訪問控制 | 一、allow address|CIDR|unix:|all 二、deny address|CIDR|unix:|all |
http、server、location、limit_except這一級來配置 | location ~ ^/admin.html { root /var/log/html/; deny 172.20.163.127; allow all; } |
172.20.163.127訪問主頁時會返回403,其餘正常 | ~ ^/admin.html:表明要訪問admin.html這個頁面時去/var/log/html/取找。 管理後臺只對指定IP開放能夠用這個方法 |
|
7 -http_auth_basic_module | 基於用戶的信任登錄 | 一、auth_basic string|off; 二、auth_basic_user_file file; |
http、server、location、limit_except這一級來配置 | location / {java root /usr/share/nginx/html; node index index.html index.htm; linux auth_basic 'input password:'; nginx auth_basic_user_file /passwd.txt; web }正則表達式 htpasswd -c /passwd.txt liwei ====>使用htpasswd生成保存帳號的文件,普通文本nginx不識別 |
auth_basic string|off;這裏的string輸入一個字符串後也當on使, 輸入一個字符串後在登錄提示框會將該字符串顯示出來(至關於提示語) |
||
8 文件讀取 | 文件讀取 | sendfile on|off ===>(提升讀取靜態文件效率。直接經過系統內核將文件放入socket,沒必要再打開一遍) | http、server、location、if in location這一級來配置 | location / { root /usr/share/nginx/html; index index.html index.htm; sendfile on } |
|||
9 數據傳輸 | 數據傳輸 | 一、tcp_nopush on|off ===>(senffile開啓的狀況下,提升數據包的傳輸效率。即:攢夠必定量的包再一塊兒發送,而不是來一個包發一個包) 二、tcp_nodelay on|off ===>(長鏈接下(keepalive),提升數據包傳輸實時性。即:來一個包發一個包。適用於對網絡實時性要求比較高的場景) |
一、http、server、location這一級來配置 |
location / { root /usr/share/nginx/html; index index.html index.htm; tcp_nopush on tcp_nodelay on } |
|||
10 數據壓縮 | 數據壓縮 | 一、gzip on|off |
一、http、server、location、if in location這一級來配置 |
location ~ .*\.(jpg|gif|png)$ { gzip off; gzip_http_version 1.1; gzip_comp_level 2; gzip_types application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; root /opt/app/code/images; } |
一、二、三、4步組合成一個功能 | ||
11 緩存時間設置 | 緩存時間設置 | expires [modified] time; |
server、location、if in location這一級來配置 | ||||
12 防盜鏈設置 | 防盜鏈(本質是依據refere來限制) | valid_referers none|blocked|string... |
server、location這一級來配置 | location /download { gzip_static off; tcp_nopush off; alias /opt/app/code; valid_referers none blocked; if ($invalid_referer){ return 403; } } |
curl -e "http://172.20.163.127" -I http://172.20.163.99/download/2.txt(成功) |
$invalid_referer:若是valid_referers後面沒有值則$invalid_referer爲真 | |
13 代理服務 | 反向代理 | proxy_pass URL | location、if in location、limit_except這一級來配置 | server { listen 80; server_name localhost;
#charset koi8-r; #access_log /var/log/nginx/host.access.log main;
location ~ \.php{ proxy_pass http://172.20.163.135:80; root index.html; } |
此時訪問http://nginx服務器/1.php 至關於訪問了http://172.20.163.135/1.php | ||
14 代理服務 | 正向代理 | proxy_pass http://$http_host$request_uri; |
resolver 114.114.114.114; location / { proxy_pass http://$http_host$request_uri; } |
此時掛好代理就能夠訪問http的網頁了,可是不能訪問https網頁 | |||
代理的擴展 | 緩衝區 | proxy_buffering on|off | proxy_buffering on | http、server、location這一級來配置 | location / { proxy_pass http://127.0.0.1:8080; proxy_redirect default;
proxy_set_header Host $http_host; ===>要訪問的目的主機 proxy_set_header X-Real-IP $remote_addr; ===>客戶端真實IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; ==>若是使用代理訪問的話使用此方式可獲取代理鏈 proxy_connect_timeout 30; proxy_send_timeout 60; proxy_read_timeout 60;
proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k; } |
儘量的將請求信息接收完再將數據包統一轉發出去 | |
代理的擴展 | 跳轉重定向 | proxy_redirect default|off |
proxy_redirect default | http、server、location這一級來配置 | 反向代理時後端服務器發來301報文時不是把301轉發給客戶端,而是根據301再去訪問被重定向到的地址,拿到最終數據後再返回給客戶端 |
||
代理的擴展 | 修改頭信息 | proxy_set_header field value 擴展:proxy_hide_header、proxy_set_body |
http、server、location這一級來配置 | proxy_set_header X-Real-IP $remote_addr; |
在通過中間這層代理後,後端server就拿不到最初源的一些信息了(好比說真實源IP)。 |
||
代理的擴展 | Nginx做爲代理到後端server的超時 | proxy_connect_timeout time 擴展:proxy_read_timeout、proxy_send_timeout |
proxy_connect_timeout 60s | http、server、location這一級來配置 | TCP鏈接超時 擴展:TCP已經創建的基礎上等待迴應的時間 測試的時候沒測出來有什麼效果 |
||
15 負載均衡 | upstream name{ server IP|域名 端口 屬性; } location / { proxy_pass http://name; } |
http這一級來配置 | upstream imooc { ip_hash; server 172.20.163.135:80 weight=5; server cctv.com:80; server 172.20.163.126:80 backup; server 172.20.163.123:80 down; server 172.20.163.111:80 max_fails 5; server 172.20.163.33:80 fail_timeout 60s; server 172.20.163.42:80 max_conns 1024; }
location / { proxy_pass http://imooc; } |
訪問http://Nginx地址/時流量會負載均衡到13五、12三、126這三臺設備上 | 後端服務器在負載均衡調度中的狀態:
|
||
16 rewrite | 跳轉重定向 |
rewrite 正則表達式 replacement[flag] | server、location、if一級來配置 | 1、 location /down { rewrite ^/down http://www.cctv.com permanent; }
2、 location / { rewrite ^/down /test/abc.html permanent; root /opt/work; } |
一、訪問http://Nginx地址/down時將跳轉至http://www.cctv.com |
正則表達式中()用於匹配括號之間的內容,經過$1,$2調用 flag標誌位: rewrite加在不一樣位置時的優先級規則:server > location |
|
17 HTTPS | HTTPS | ssl on|off |
http、server這一級來配置 | server{ listen 443; server_name hk.com;
keepalive_timeout 100; ===>優化之使用長鏈接,100s
ssl on; ssl_certificate /etc/nginx/ssl_key/hk1.crt; ssl_certificate_key /etc/nginx/ssl_key/hk.key;
ssl_session_timeout 10m; ===>優化之SSL會話過時,10分鐘 ssl_session_cache shared:SSL:10m; ===>優化之使用SSL緩存,大小爲10M,能夠存儲大約8k到10k的會話 location / { root /opt/app/code; index index.html index.htm; } } |
證書生成步驟: 1、生成祕鑰 2、生成證書
|
||
18 try_files | 至關於if語句(若是這個路徑下找不到則匹配另外一個location) | try_files $uri @其餘location | location一級來配置 | location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri @code1; } location @code1 { proxy_pass http://www.cctv.com; } |
此時訪問http://nginx服務器/1.html時會先去/usr/share/nginx/html/目錄找, |
測試時候發現location裏面有try_files後index語句將失效,即訪問http://nginx服務器/時 |
|
19 worker_processes | 制定nginx的work進程數(不包含manage進程) | worker_processes 進程數 | 最開頭那級來配置 | worker_processes 10 |
建議和物理CPU核心數相同 | ||
20 worker_rlimit_nofile | 修改nginx最大句柄 | worker_rlimit_nofile 句柄數 | 最開頭那級來配置,和worker_processes 1;是一級 | worker_rlimit_nofile 65535; | 文件句柄的理解:程序打開一個本地文件產生一個文件句柄,默認操做系統只容許一個應用程序打開最多1024個文件 感受只有nginx作web服務器時才須要調文件句柄,由於作反向代理的時候也不老是打開本地文件啊 linux修改文件句柄最大數(默認爲1024): |
||
21 CPU親和 | 將全部進程均勻的分佈在各個cpu核心上 | worker_cpu_affinity auto; | 最開頭那級來配置,和worker_processes 1;是一級 | user nginx; |
[root@localhost conf.d]# ps -eo pid,args,psr | grep [n]ginx 9062 nginx: master process nginx 19 9371 nginx: worker process 0 9372 nginx: worker process 1 9373 nginx: worker process 2 9374 nginx: worker process 3 9375 nginx: worker process 4 9376 nginx: worker process 5 9377 nginx: worker process 6 9378 nginx: worker process 7 9379 nginx: worker process 8 9380 nginx: worker process 9 9381 nginx: worker process 10 9382 nginx: worker process 11 9383 nginx: worker process 12 9384 nginx: worker process 13 9385 nginx: worker process 14 9386 nginx: worker process 15 9387 nginx: worker process 16 9388 nginx: worker process 17 9389 nginx: worker process 18 9390 nginx: worker process 19 9391 nginx: worker process 20 9392 nginx: worker process 21 9393 nginx: worker process 22 9394 nginx: worker process 23 |
沒有配置worker_cpu_affinity auto;時的CPU佔用狀況: [root@localhost conf.d]# ps -eo pid,args,psr | grep [n]ginx 9062 nginx: master process nginx 22 9406 nginx: worker process 5 9407 nginx: worker process 0 9408 nginx: worker process 9 9409 nginx: worker process 2 9410 nginx: worker process 1 9411 nginx: worker process 3 9412 nginx: worker process 11 9413 nginx: worker process 0 9414 nginx: worker process 12 9415 nginx: worker process 6 9416 nginx: worker process 2 9417 nginx: worker process 5 9418 nginx: worker process 15 9419 nginx: worker process 9 9420 nginx: worker process 17 9421 nginx: worker process 0 9422 nginx: worker process 7 9423 nginx: worker process 2 9424 nginx: worker process 8 9425 nginx: worker process 9 9426 nginx: worker process 5 9427 nginx: worker process 0 9428 nginx: worker process 6 9429 nginx: worker process 2 |