nginx典型官方模塊解釋

模塊名稱   做用 語法 默認 配置位置 配置舉例 結果驗證 備註
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這一級來配置
二、http、server、location這一級來配置

 

location / {

        root   /usr/share/nginx/html;

        index  index.html index.htm;

        tcp_nopush on

        tcp_nodelay on

}

   
 10 數據壓縮  數據壓縮  

一、gzip on|off
二、gzip_http_version 1.1|1.0
三、gzip_comp_level 級別
四、gzip_types image/png

   

一、http、server、location、if in location這一級來配置
二、http、server、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;
expires epoch|max|off;

   server、location、if in location這一級來配置      
 12 防盜鏈設置  防盜鏈(本質是依據refere來限制)  

valid_referers none|blocked|string...
valid_referers爲關鍵字,後跟容許從哪些地址過來訪問(即容許的refer)
none表明容許沒有帶refer信息的過來訪問
blocked表明容許不帶協議信息的refer過來訪問(即cctv.com,前面沒有http://信息)
string表明支持哪些refer來訪問(例:refer=http://qq.com, string指的是qq.com這部分)(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(成功)
curl -e "http://www.qq.com" -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;
$http_host表明要訪問的主機名
$request_uri表明要訪問的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 redirect replacement

proxy_redirect default http、server、location這一級來配置  

反向代理時後端服務器發來301報文時不是把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時增長X-Real-IP頭部,值爲$remote_addr

在通過中間這層代理後,後端server就拿不到最初源的一些信息了(好比說真實源IP)。
爲了解決這個問題能夠用這個方法爲數據包再加一個映射的頭信息,好讓後端server知道真實的源信息

代理的擴展 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這三臺設備上

後端服務器在負載均衡調度中的狀態:
down:當前的server暫時不參與負載均衡
backup:預留的備份服務器(其餘主機所有down掉它起來)
max_fails:容許請求失敗的次數(健康檢查)
fail_timeout:通過max_fails失敗後,服務暫停的時間
max_conns:限制後端server最大的接收鏈接數


調度算法(默認爲輪詢):
輪詢:按時間順序逐一分配到不一樣的後端服務器
加權輪詢:weight值越大,分配到的機率越高(只要後面加了weight就自動從輪詢變爲加權輪詢)
ip_hash:每一個請求按訪問的源IP的hash結果分配,這樣能夠保證一個源IP的每次訪問固定的一臺後端server
url_hash:按照訪問的URL的hash結果來分配請求,每一個URL定向到同一個後端服務器
hash關鍵數值:hash自定義的key

16 rewrite

跳轉重定向
(不一樣於代理的跳轉重定向,此處nginx不是代理服務器,而是自己就是web服務器)

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
二、訪問http://Nginx地址/down時將跳轉至http://Nginx地址/test/abc.html

正則表達式中()用於匹配括號之間的內容,經過$1,$2調用

flag標誌位:
last:中止rewrite檢測
break:中止rewrite檢測
redirect:返回302臨時重定向,地址欄會顯示跳轉後的地址
permanent:重返301永久重定向,地址欄會顯示跳轉後的地址(瀏覽器會永遠記住,即便nginx服務器關閉了也仍是會跳轉至其餘網頁)(IE是這樣的,可是搜狗瀏覽器收到301依然當作臨時重定向處理)

rewrite加在不一樣位置時的優先級規則:server > location

17 HTTPS HTTPS

ssl on|off
ssl_certificate file
ssl_certificate_key file

  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,能夠存儲大約8k10k的會話

        location / {

                root /opt/app/code;

                index index.html index.htm;

 }

}

 

證書生成步驟:

1、生成祕鑰
openssl genrsa -des3 -out hk.key 1024
-des3:選擇3des算法
1024:加密位數

2、生成證書
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout hk.key -out hk1.crt
-days:證書有效期
-x509:選擇hash算法
rsa:2048:選擇2048位加密
-keyout:key文件
-out:輸出結果

 

 


蘋果終端對服務端的要求:
一、服務器全部的鏈接使用TLS1.2以上的版本(openssl 1.0.2)
二、HTTPS證書必須使用SHA256以上的哈希算法簽名
三、HTTPS證書必須使用RSA 2048位或ECC 256位以上公鑰算法
四、使用前向加密技術

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/目錄找,
若是這個目錄沒有目標文件則匹配 @code1 這個location

 

測試時候發現location裏面有try_files後index語句將失效,即訪問http://nginx服務器/時
也會被導向@code1

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):
vi /etc/security/limits.conf
root soft nofile 65535
root hard nofile 65535
* soft nofile 25535
* hard nofile 25535

21 CPU親和 將全部進程均勻的分佈在各個cpu核心上 worker_cpu_affinity auto;   最開頭那級來配置,和worker_processes  1;是一級

user nginx;
worker_processes 24;
worker_cpu_affinity auto;

[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

相關文章
相關標籤/搜索