nginx 參數詳解

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 { ... }html

        功能:容許根據用戶請求的URI來匹配指定的各location以進行訪問配置;匹配到時,將被location塊中的配置所處理
 
        =:精確匹配
        ~:正則表達式模式匹配,匹配時區分字符大小寫
        ~*:正則表達式模式匹配,匹配時忽略字符大小寫
        ^~:只須要前半部分與uri匹配便可,不檢查正則表達式
匹配優先級:
            字符字面量最精確匹配、正則表達式檢索(由多個時,由第一個匹配到的所處理),按字符字面量
         匹配優先級:精確匹配=、^~ 、~或* 、不帶符號的URL;
 
 六、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;
        自左向右嘗試讀取有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指令任一權限便可經過匹配 node

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

 

    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.htmlweb

 
        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 : 引用狀態碼
相關文章
相關標籤/搜索