1. 程式人生 > >nginx 引數詳解

nginx 引數詳解

https://www.cnblogs.com/woodman/p/6200634.html

nginx的http web功能

    必須使用虛擬機器來配置站點:每個虛擬主機使用一個server{}段來配置

    非虛擬主機的配置、公共選項,需要定義在server之外,http之內

        http{

            directive value;

            ....

            server{

 

            }

            server{

            }

            ......

        }

 

    1.server{}

      定義一個虛擬主機:nginx支援使用基於主機名或IP的虛擬主機

    注意:

        PORT :基於監聽的埠

        server_name :基於主機名區分

    2.listen

 

        listen address[:port][default_server][ssl][http2|spdy] [rcvbuf=size] [sndbuf=size] ;

        listen port [default_server][ssl][http2|spdy] [rcvbuf=size] [sndbuf=size] ;

 

 

 

       default_server:定義此server為http中預設的server;如果所有的server中無任何一個listen使用此引數,那麼第一個server即為預設server

 

       rcvbuf=SIZE:接收快取大小

       sndbuf=SIZE: 傳送快取大小

       ssl:https server:必須以ssl連線

    3.server_name [...];

       server_name可以跟多個主機名,名稱可以使用萬用字元和正則表示式(通常以~開頭):當nginx收到一個請求時,會取出其首部的server的值,而後跟眾server_name進行比較:比較方式

            (1) 先做精確匹配    www.tshare365.com

            (2) 左側萬用字元匹配    *.tshare365.com

            (3) 右側萬用字元匹配     www.*

            (4) 正則表示式匹配    ~^.*\.tshare365\.com$

    4.server_name_hash_bucket_size 32|64|128

       為了實現快速主機查詢,nginx使用hash表來儲存主機名

    5.location [ =|~|~*|^~] uri { ... }

         location @name { ... }

        功能:允許根據使用者請求的URI來匹配指定的各location以進行訪問配置;匹配到時,將被location塊中的配置所處理

 

        =:精確匹配

        ~:正則表示式模式匹配,匹配時區分字元大小寫

        ~*:正則表示式模式匹配,匹配時忽略字元大小寫

        ^~:只需要前半部分與uri匹配即可,不檢查正則表示式

匹配優先順序:

            字元字面量最精確匹配、正則表示式檢索(由多個時,由第一個匹配到的所處理),按字元字面量

        匹配優先順序:精確匹配=、^~ 、~或* 、不帶符號的URL;

 

 6、tcp_nopush on | off  ,預設off(推薦)

        是否啟用TCP_NOPUSH(freebsd)或TCP_CORK(Linux)選項;僅在啟用sendfile為On時有用;

 

檔案路徑定義

 
   1.root path

        設定web資源路徑,用於指定請求的根文件目錄,從跟開始匹配

        root:root/URI

    location ^~  /images/{

        root /web;

    }

    開啟logo.png則訪問的是 /web/images/logo.png

    http:///www.tshare365.com/images/logo.png

 

   2.alias path

        指定路徑別名,只能用於location中,從最後一個/開始匹配

        alias:alias/

 

    location ^~  /images/{

        alias /web;

    }

    開啟logo.png則訪問的是 /web/logo.png

    http:///www.tshare365.com/images/logo.png

        

    3.index file....

         定義預設頁面,可以跟多個值。自左向右匹配

 

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

        當對於某個請求發回錯誤時,如果匹配上了error_page指令中設定的code,則從定向至新的新URI中 (寫在server{}之後)

        錯誤重定向

 

    5.try_files path1 [path2...] uri;

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

        自左向右嘗試讀取有path所指定路徑,在第一找到即停止並返回,如果所有path均不存在,則返回最後一個uri

      location ~* ^/document/(.*)${

        root /www/htdocs;

        try_files $uri /docu/$1 /temp.html;  #$1表示 ( )中的內容

       }

    location /images/ {
    try_files $uri /images/default.gif;
    }

    location = /images/default.gif {
    expires 30s;
    }

 網路連線相關的設定

    1.keepalive_timeout time;

        保持連線的超時時長,預設為75s;0表示禁止連線;

    2.keepalive_requests n;

        在一次長連線上允許承載的最大請求數,預設100;

    3.keepalive_disable [msie6|safari |none]

        對指定的瀏覽器禁用長連線

    4.tcp_nodelay on|off

        對keepalive模式下的連結是否使用TCP_NODELAY選項;(關閉TCP延遲響應)

    5.client_header_timeout time

        讀取http請求首部的超時時長

    6.client_body_timeout time

        讀取http請求包體的超時時間

    7.send_timeout #;

        傳送響應的超時時長,預設60s;

   8.壓縮:

 

        gzip

          gzip on|off

          gzip_buffer 使用的快取大小

          gzip_comp_level 壓縮的級別

          gzip_disable 不壓縮的型別或瀏覽器

          gzip_min_length 最少壓縮的大小

          gzip_http_version 壓縮完成以後傳送http的版本

          gzip_types:只壓縮的格式

對客戶端請求的限制:

   1.client_max_body_size size; 

 

         http請求包體的最大值,常用於限定客戶端所能夠請求的最大包體,根據請求首部中的Content-Length來檢查,以避免無用的傳輸

        client_body_buffer_size size;預設16k

    客戶請求報文body的緩衝區大小,超出預設則移存於磁碟上;

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

    設定儲存客戶端請求body的臨時儲存路徑以及子目錄結構數量和數量

 

   2.limit_except method ...{ ... };

        設定禁止的方法,只能用於location中

     控制1網段除get外的其他方法都可用。   

  limit_except GET {
    allow 192.168.1.0/32;
    deny  all;
  }

    3. limit_rate speed;

         限制客戶端每秒傳輸的位元組數,預設為0,表示沒有限制

    4.limit_rate_after time;

        nginx向客戶端傳送響應報文時,如果時長超過了此處指定的時長,則後續的傳送過程開始限速;

 

檔案操作的優化

    1. sendfile on|off

         直接從記憶體空間讀取,速度加快

       tcp_nopush on | off  ,預設off(推薦)

        是否啟用TCP_NOPUSH(freebsd)或TCP_CORK(Linux)選項;僅在啟用sendfile為On時有用;

    2. aio on|off ;非同步IO模式。

        是否啟用aio功能

    4. directio size |off ; 預設關閉。

    5. open_file_cache max=N [inactive=time]|off

        是否開啟檔案快取功能

        max:快取條目的最大值,當滿了以後將根據LRU(最近最少連線數)演算法進行置換

        inactive:某快取條目在指定時長內沒有被訪問過時,將自動被刪除;預設為60s

        快取的資訊包括:

            (1)檔案控制代碼、檔案大小和上次修改時間

            (2)已經開啟的目錄結構:

            (3)沒有找到或沒有訪問許可權的資訊;由6開啟。

    6. open_file_cache_errors on|off

        是否快取檔案找不到或沒有許可權訪問等相關資訊

    7. open_file_cache_valid time

        多長時間檢查一次快取中的條目是否超出非活動時長,預設為60s;

    8. open_file_cache_min_use #;

        在inactive指定的時長內被訪問超過此處指定的次數時,才不會被刪除;

     9. autoindex on  | off ; 

    是否開啟目錄瀏覽,多擁有下載頁面。一般定義在location中。

 

 

對客戶端請求的特殊處理

    1.ignore_invalid_headers on|off ;只能用於server和http

        是否忽略不合法的http首部,預設為on,off意味著請求首部中出現不合規的首部將拒絕響應

    2.log_not_found on|off  TSL(http server location)

        使用者訪問的檔案不存在時,是否將其記錄到錯誤日誌中

    3.resolver address ;

         指定nginx使用的dns伺服器地址

     4.resolver_timeout times;

         指定DNS解析超時時長,預設為30s

     5.server_tokens on|off   TSL

         是否在錯誤頁面中顯示nginx的版本號 

    6. auth_basic  string;

        auth_basic_user_file  FILE; 使用者認證的帳號檔案

       # htpasswd -c /etc/nginx/conf/nginx.passwd username  //使用http-tool工具建立密文密碼

            格式:

                name:passwd

            密碼格式

                (1)encrypted with the crypt() function;

                (2)md5;

    7. satisfy  all | any ;
    如果在一個欄位中同時使用了Access模組和Auth Basic模組的指令,可以使用這個指令確定一種驗證方式:

    all - 必須同時匹配Access和Auth Basic中指令指定的許可權。 
    any - 具有Access 或 Auth Basic指令任一許可權即可通過匹配 

    location / {
      satisfy any;
      allow 192.168.1.0/32;
      deny all;
      auth_basic "closed site";
      auth_basic_user_file conf/htpasswd;
    }

 

    8.    log_format  name  string ……;

        定義日誌格式和名稱;日誌格式一般通過呼叫變數來定義; 

 

    9.  access_log path [format [buffer=size [flush=time]] [if=condition]];
    access_log path format gzip[=level] [buffer=size] [flush=time] [if=condition];
    access_log syslog:server=address[,parameter=value] [format [if=condition]];
    access_log off;

        訪問日誌路徑,格式名稱以及快取大小和刷寫時間間隔;建議定義buffer提示效能;

 

      10. open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
     open_log_file_cache off;  

 

      11. stub_status 

        location /basic_status {

        stub_status on;

        allow x.x.x.0/16;

        deny all;

        }

        Active connections : 當前活動的客戶端連線數;

    accepts  :已接受的客戶端連線總數量;

        handled  :已經處理過的客戶端連線總數量;

    requests  :客戶端總的請求數量;

    Reading   :正在讀取的客戶端請求的數量;

    Writing    :正在向其傳送響應報文的連線數量;

    Waiting    :當前等待請求的空閒連線數量;

 

     12   防盜鏈 ngx_http_referer_module (基於請求報文中的referer首部的值做訪問控制)

 

   (1)定義和規定有效引用

        valid_referers none |blocked |server_names|string ...

    (2)判斷不合規的引用

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

        root /www;

        valid_referers none blocked *.tshare365.com *.woodman.com ;

 

        if ($invalid_referer) {

      #    return 403;

            rewrite http://www.woodman.com/403.html;

        }

     }

    none:請求報文不存在referer首部;

    blocked:請求報文中存在referer首部,但其沒有有效值。

    server_names:值為主機名

        arbitrary string:直接字串,可以使用 * 通配

        regular expression:以~起始的正則表示式;

        內建變數:$invalid_referer (所有不能符合valid_referers指定定義的引用請求均為不合法)

 13.URL rewrite

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

 

        rewrite regex replacement [flag];

 

        location / {

            root /www;

            rewrite ^/imgages/(.*)$ /imgs/$1 last;

            rewrite ^/imgs/(.*)$  /images/$1 break;

        }

http://www.b.org./images/a.jpg --> http://www.b.org/imgs/a.jpg

        flag:標誌位

             last:一旦被當前規則匹配並重寫後立即停止檢查後續的其他rewrite的規則,而後通過重寫後的規則重新發起請求

             break:一旦被當前規則匹配並重寫後立即停止檢查後續的其他rewrite的規則,而後繼續由nginx進行後續的操作

             redirect:返回302臨時重定向程式碼

             permanent:返回301永久重定向

 

        nginx最多迴圈10次,超出之後返回500錯誤

            括號不需要轉移

        注意:一般將rewrite寫在location中時都使用break標誌,或者將rewrite寫在if上下文中

 

        rewrite_log on|off

            是否將重寫過程記錄在錯誤日誌中,預設為notice級別;預設為off;

 

        return code:

            用於結束rewrite規則,並且為客戶返回狀態碼:可以使用的狀態碼有204,400,402-406,500-504等

        if (condition) {

  return code;

        }

            用於檢測條件是否成立

http核心模組的內建變數

    $uri:當前請求的uri,不帶引數

    $request_uri:請求的uri,帶完整引數

    $host:http請求報文中host首部;如果請求中沒有host首部,則以處理此請求的虛擬主機的主機名代替

    $hostname:nginx服務執行所在主機的主機名

    $remote_addr:客戶端IP

    $remote_port::客戶端port

    $remote_user:使用使用者認證時客戶端使用者輸入的使用者名稱

    $request_filename:使用者請求中的URI經過本地root或alias轉換後對映的本地的檔案路徑

    $request_method:請求方法

    $server_addr:伺服器地址

    $server_name: 伺服器名稱

    $server_port:伺服器埠

    $server_protocol:伺服器向客戶端傳送響應時的協議,如http/1.1,http/1.0

    $scheme:在請求中使用的scheme 對映協議本身的協議。 如https://www.tshare365.com中的https;

    $http_HEADER:匹配請求報文中指定的HEADER,$http_host匹配請求報文中的host首部

    $sent_http_HEADER:匹配響應報文中指定的HERDER,例如$http_content_type匹配相應報文中的content-type首部

    $document_root:當前請求對映到的root配置

    $status : 引用狀態碼