nginx配置文件詳解


nginx配置文件詳細解說:

一、配置指令

1、main配置段常見的配置指令:

  1)分類:

    正常運行必備的配置

    優化性能相關的配置

    用於調試及定位問題相關的配置

    時間驅動相關的配置

2、正常運行必備的配置

  1)user

    systax:user user [group];   #可以配置一個組,不過一般默認都是nginx配置

  2)pid /PATH/TO/PID_FILE;

    指定存儲nginx主進程號碼的文件路徑

  3)include file | mask;

    指明包含進來的其他配置文件片段;

  4)load_module file;

    指明要裝載的動態模塊;

3、性能優化相關的配置:

  1)worker_processes number | auto;

    worker進程的數量;通常應該等於小於當前主機的cpu的物理核心數;大於的話是沒有什么用的。小於的話主要留很小一些核心數給其他服務來使用。

    auto:默認是當前主機物理CPU核心數(nginx自動匹配);

  2)worker_cpu_affinity cpumask ......;

    worker_cpu_affinity auto [cpumask];

      CPU MASK怎么表示呢?

     假如此時電腦有8顆CPU核心數。
      00000000:表示8顆CPU核心,下面這個是位圖掩碼表示法。
      00000001:0號CPU
      00000010:1號CPU
      00000100:2號CPU
      00001000:3號CPU
      00010000:4號CPU
      00100000:5號CPU
      01000000:6號CPU
      10000000:7號CPU

     案例演示:加入此時我的電腦是4顆CPU

      

      一旦將某個子進程綁定在了某個核心上,那么我們可以做個壓測看一下,此時的子進程所使用的核心序號是一定的。

  3)進程優先級

    worker_priority number;

      指定worker進程的nice值,舍得worker進程優先級;[-20.20]

  4)文件數量大小

    worker_rlimit_nofile number;       #其中number的值要大於worker_processes*worker_connections的乘積。

    案例演示:

      

4、調試、定位問題:

  1)daemon on|off;

    是否以守護進程方式運行nginx,centos6中是守護模式,centos7中不必打開守護模式,因為由systemd統一管理。

  2)master_process on | off;

    是否以master/worker模型運行nginx,默認是on;我們使用的也是在on模式下。

  3)error_log file [level];

5、事件驅動相關的配置:

  events {

    .......

  }

  1)worker_connections number;

    每個worker進程所能夠打開的最大並發連接數數量;

  2)use method;

    指明並發連接請求的處理方法;method一般有兩種:select和epoll。select的最大限制是1024,而epoll的連接是無限制的,所以nginx肯定使用epoll並發請求機制。

    關於兩者的區別:我們可以看一下:

  select epoll
性能 隨着連接數增加,急劇下降。處理成千上萬並發連接數時,性能很差。 隨着連接數增加,性能基本上沒有下降。處理成千上萬並發連接時,性能很好。
連接數 連接數有限制,處理的最大連接數不超過1024。如果要處理超過1024個連接數,則需要修改FD_SETSIZE宏,並重新編譯 。 連接數無限制。
內在處理機制 線性輪詢 回調callback
開發難易程度

    比如:use epoll;

      

  3)accept_mutex on | off

    處理新的連接請求的方法;on以為着由worker輪流處理新請求,講究起點公平。off以為着每個新請求的到達都會通知所有的worker進程,講究結果公平。

 

二、主機配置

1、與套接字相關的配置

  1)server{......};

    配置一個虛擬主機;

    server {

      listen address[:PORT] | PORT;

      server_name SERVER_NAME;

      root /PATH/TO/DOCUMENT_ROOT;        #表示web服務的默認工作路徑是在哪個地方

    #  proxy_pass  URL;      #表示nginx此時僅僅是一台反向代理服務器。

    }

  2) listen PORT | address [:port] | unix:/PATH/TO/SOCKET_FILE

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

      default_server:設定為默認虛擬主機;

      ssl:限制僅能后通過ssl連接提供服務;

      backlog=number:后援隊列長度;

      rcvbuf=size:接受緩沖區大小;

      sndbuf=size:發送緩沖區大小;

  3)server_name name .....;

    指明虛擬主機的主機名稱;后可跟多個由空白字符分割的字符串;

      支持*通配任意長度的任意字符;server_name *.chaofeng.com   www.chaofeng.*

      支持~其實的字符做正則表達式模式匹配;server_name ~^www\d+\.chaofeng\.com$

    匹配機制:

      (1)首先是字符串精准匹配

      (2)左側*通配符

      (3)右側*通配符

      (4)正則表達式;

  4)tcp_nodelay on | off;

    在keepalived模式下的連接是否啟用TCP_NODELAY選項;

    delay:延遲發送

    tcp_nodelay on表示要求不要合並發送,請求一個發送一個;對非保持連接無效。

  5)tcp_nopush on | off

    在sendfile模式下,是否啟用TCP_CORK選項

    tcp_nopush on :在一個包中發送響應頭和文件的開頭;以完整的包發送文件

  6)sendfile on | off

    是否啟用sendfile功能;

    系統調用sendfile()函數通過DMA把硬盤數據拷貝到kernel buffer,然后數據被kernel直接拷貝到另外一個與socket相關的kernel buffer,這里沒有user mode和kernel mode之間的切換,在kernel中直接完成了從一個個buffer到另一個buffer的拷貝;DMA把數據從kernel bueer直接拷貝到協議棧,沒有切換,也不需要數據從user mode拷貝到kernel mode,因為數據就在kernel里面。步驟減少了,切換減少了,自然性能就提升了。

  7)root path;

    設置web資源路徑映射,用於指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;可用的位置:http,server,location,if in location

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

      set configuration depending on a request URI

    在一個server中location配置段可存在多個,用於實現從URI到文件系統的路徑映射;nginx會根據用戶請求的URI來檢查定義的所有location,並找出一個最佳匹配,而后應該其配置;

    =:對URI做精准匹配;

      location = / {

        ........

      }

      例如:會去匹配http://www.chaofeng.com/,但是不會匹配http://www.chaofeng.com/index.html

    ~:對URI做正則表達式模式匹配,區分字符大小寫;

    ~ *:對URI做正則表達式模式匹配,不區分字符大小寫;

    ^~:對URI的左半部分做匹配檢查,不區分字符大小寫;

    不帶符號:匹配起始於此uri的所有的uri;

    匹配優先級:=  >  ^~  >  ~ / ~*   >  不帶符號;

        兩個普通的location(即不帶符號),匹配目錄最長的那個。

        兩個正則(正則的前半部分是一樣的,后半部分可能一個匹配的路徑長,另外一個路徑短),不管有序無序,只匹配到第一個正則。

     案例:  

server {
          listen 80;
          server_name www.ilinux.io;
          root /data/nginx/vhost1;
          error_page 404 /notfound.html;
          location / {
                  #root /data/nginx/vhost2;
                  allow all;
          }
          location ~*  \.(jpg|png)$ {
                  allow all;
          }
          location ^~ /images/ {
                   alias /data/pictures/;
          }
      }

      在location中,如果內部定義了root指定映射的路徑,則會覆蓋掉server內部的那個root路徑。也就是說他們是有繼承關系的。我們可以把server的哪個root映射的路徑當作父root路徑,那么location中那個root映射的路徑當作子root路徑,父root路徑統管全局作用,如果location沒有定義子root路徑,那么這些location默認會使用父root映射的路徑下的內容,但是如果location中定義子root路徑,那么子root路徑將會繼承父root路徑,這里的繼承是指子root路徑覆蓋父root路徑的映射內容。還要注意的是,子root路徑僅僅在當前自己所在的那個location中有效,子root路徑只有局部作用。

  9)alias path

      定義路徑別名,文檔映射的另一種機制;僅僅能用於location上下文;

    注意:

      location中使用root指令和alias指令的意義不同;

      a)root,給定的路徑對應於location中的/URI/左側的/;

      b)alias,給定的路徑對應於location中的/URI/右側的/;

     案例:

      

      現在我們訪問一下:

        

      現在我們修改一下配置:

      

      

        我的images目錄下是沒有header.jpg這張圖片的。

       現在我們訪問一下:

      

      總結:    alias ,匹配/images/中的第二個/,即訪問 www.nginx_vhosts1.io/images/header.jpg 。為路徑 /var/nginx_lt1/ 下的header.jpg.如上圖

   10)error_page code uri;

    瀏覽器返回給用戶的錯誤界面404其實也是一個頁面,只有當狀態碼為404的時候,web服務器會調用這個界面然后返回給瀏覽器。所以我們也可以定義一個錯誤頁面返回給我們。

    案例:

      

      然后我們在/var/nginx_lt1/目錄下定義一個錯誤頁面

      

      打開瀏覽器故意訪問一個不存在的頁面:

      

  11)index file .......;

    默認資源:http,server,location

三、定義客戶端請求的相關配置

  1)keepalive_timeout timeout [header_timeout];

    設定保持連接的超時時長,0表示禁止長連接;默認時75s;

  2)keepalive_requests number;

    在一次長連接上所允許請求的資源的最大數量,默認是100。

  3)keepalive_disable none | browser .....;

    對那種瀏覽器禁用長連接;(目前市面的瀏覽器都是比較新的,所以這一項不必過於關注)

  4)send_timeout time;

    向客戶端發送響應報文的超時時長,此處,是指兩次寫操作之間的間隔時長。

  5)client_body_buffer_size size;

    用於接收客戶端請求報文的body部分的緩沖區大小;默認是16k;超出此大小時,其將暫存到磁盤上的由client_body_temp_path指令所定義的位置

  6)client_body_temp_path apth [level1 [level2 [level3]]];

    設定用於存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量;(設定文件路徑路由的方式)

      主要使用16進制的數字;

      client_body_temp_path   /var/tmp/client_body 2 1 1

        2 :表示256個一級子目錄。

        1 :每個一級子目錄下有16個二級子目錄

        1 :每個二級子目錄下有16個三級子目錄

          計算:那么一共有256*16*16個三級子目錄。

四、對客戶端進行限制的相關配置:

  1)limit_rate rate;

  • 限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制;
    Context: http, server, location, if in location

  2)limit_except method ... {...}

  • 限制對指定的請求方法之外的其它方法的使用客戶端
  • 示例:
             limit_except GET {
             allow 192.168.1.0/24;
             deny all;
         }
         #除了GET和HEAD之外,其它所有的method都允許192.168.1.0/24網絡地址訪問,其它ip地址都拒絕;

五、文件操作優化配置

  1)aio on | off |threads[=pool];

  • 是否啟用aio功能;默認為off。使用默認就行
  • Context: http, server, location

  2)directio size | off;

    在linux主機啟用IO_DIRECT標記,此處意味文件大於等於給定的大小時使用,例如:directio 4m;

    directio與sendfile功能講解:

    要使aio生效需把directio設置為打開狀況,並且如果aio生效,那么將自動不使用sendfile(),這在linux下這是顯然的,要么利用aio讀到緩存區,要么利用sendfile()直接發送出去,兩者不可兼用,而對於freebsd系統下aio和sendfile並用的情況,我並不了解,所以也就不妄加評論;

可以看到directio是針對每個請求的文件大小而決定是否開啟directio的,因此對於上面的整個示例配置,也就會針對每個請求的不同而不同: 如果某處請求的文件大於等於512k,那么將啟用directio,從而aio生效,進而sendfile不生效; 如果某處請求的文件小於512k,那么將禁用directio,從而aio也就不生效,轉而使用sendfile(),即sendfile生效;

這種設計貌似剛好把linux下aio和sendfile兩種機制的優點很好的結合起來使用。對於大文件采用aio,節省cpu,而對於小文件,采用sendfile,減少拷貝;並且對於大文件aio采用directio,避免擠占文件系統緩存,讓文件系統緩存更多的小文件。 從理論上來看,這種配置比較適合系統內存有限、小文件請求比較多、間隔有幾個大文件請求的Web環境;如果內存足夠大,那么應該充分利用文件系統緩存,而directio使得aio無法使用緩存是衡量最終是否需要采用aio的一個需要仔細考慮的因素;網上有人總結說nginx+aio很好,也有人說其很差,其實根據特定的系統環境和應用場景來做配置調節,才能達到性能的最優,nginx提供的 AIO 只是一套工具,沒有固定的好與差之分,就看你能否恰當的用好它,但據nginx官網論壇來看,在linux系統的大部分場景下,目前因使用aio功能附加的限制而帶來的實際效果估計並不太理想:
  3)open_file_cache off;
  open_file_cache max=N [inactive=time];

    Configures a cache that can store;

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

- <1> 文件的描述符、文件大小和最近一次的修改時間;
- <2> 打開的目錄結構;
- <3> 沒有找到的或者沒有權限訪問的文件的相關信息;

        •  max=N: 可緩存的緩存項上限;達到上限后會使用LRU算法(最近最少使用)實現緩存管理;
      •     inactive=time:緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少於open_file_cache_min_uses指令所指定的次數的緩存項即為非活動項;

  4)open_file_cache_valid time;

      •     緩存項有效性的檢查頻率;默認為60s;

  5)open_file_cache_min_uses number;

      •     在open_file_cache指令的inactive參數指定的時長內,至少應該被命中多少次方可被歸類為活動項;

  6)open_file_cache_errors on|off;

      •     是否緩存查找時發生錯誤的文件一類的信息;

六、權限

  1)ngx_http_auth_basic_module模塊:實現基於用戶的訪問控制,使用basic機制進行用戶認證

    nginx使用htpasswd(包為httpd-tools)制作賬號密碼,然后添加在虛擬主機中。

    

  2)ngx_http_stub_status_module模塊:用於輸出nginx的基本狀態信息

    stub_status;

配置示例:
   

  訪問一下:

  

    對輸出內容做解釋:

  Active connections: 活動狀態的連接數;
  accepts:已經接受的客戶端請求的總數;
  handled:已經處理完成的客戶端請求的總數;
  requests:客戶端發來的總的請求數;
  Reading:處於讀取客戶端請求報文首部的連接的連接數;
  Writing:處於向客戶端發送響應報文過程中的連接數;
  Waiting:處於等待客戶端發出請求的空閑連接數

   3)ngx_http_log_module模塊:用於以指定的格式寫入請求日志

    log_format name string ...;

    •   string 可以使用nginx核心模塊及其它模塊的內嵌變量
    •   注意:此配置只能用於http段中

    access_log path [format [buffer=size] [gzip=[level1]] [flush=time][if=condition]];
    access_log off;      #這個功能在一些不必要的location中可以關閉日志功能

    •   訪問日志文件路徑,格式及相關的緩沖的配置;
        - buffer=size: 設置日志緩沖區大小
             - flush=time:定義清空時長

        示例:

      

  4)open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
    open_log_file_cache off;

    •   緩存各日志文件相關的元數據信息;
    •   max:緩存的最大文件描述符數量;
    •   min_uses:在inactive指定的時長內訪問大於等於此值方可被當作活動項;
    •   inactive:非活動時長
    •   valid:驗證緩存中各緩存項是否為活動項的時間間隔
  案例演示:
    
示例:為nginx定義使用類似於httpd的combined格式的訪問日志
  #在/etc/nginx/nginx.conf文件中http段配置日志格式
  [root@wujunjie ~]# vim /etc/nginx/nginx.conf
      http {
           log_format comd '$remote_addr - $remote_user [$time_local] '
                           '"$request" $status $bytes_sent '
                           '"$http_referer" "$http_user_agent"';
          ...
      }
  #給vhost1主機添加訪問日志,設置為comd格式
  [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf
      server {
          ...
          access_log /var/log/nginx/vhost1-access.log comd;
          ...
      }   
  #訪問測試后查看日志格式
  [root@wujunjie ~]# tail -2 /var/log/nginx/vhost1-access.log 
  192.168.1.106 - tom [06/Aug/2018:23:18:27 +0800] "GET /images HTTP/1.1" 301 388 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
  192.168.1.106 - tom [06/Aug/2018:23:18:27 +0800] "GET /images/ HTTP/1.1" 403 324 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
  5)ngx_http_gzip_module:用gzip格式壓縮響應;

    1.gzip on | off;
      Enables or disables gzipping of responses.
    2.gzip_comp_level level;
      Sets a gzip compression level of a response. Acceptable values are in the range from 1 to 9.
    3.gzip_disable regex ...;
      Disables gzipping of responses for requests with “User-Agent” header fields matching any of the specified regular expressions.
    4.gzip_min_length length;
      啟用壓縮功能的響應報文大小閾值;
    5.gzip_buffers number size;
      支持實現壓縮功能時為其配置的緩沖區數量及每個緩存區的大小;
    6.gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
      nginx作為代理服務器接收到從被代理服務器發送的響應報文后,在何種條件下啟用壓縮功能的;
      off:對代理的請求不啟用
      no-cache, no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值為此三者中任何一個,則啟用壓縮功能;
    7.gzip_types mime-type ...;
      壓縮過濾器,僅對此處設定的MIME類型的內容啟用壓縮功能;

配置示例:   
  gzip  on;
  gzip_comp_level 6;
  gzip_min_length 64;
  gzip_proxied any;
  gzip_types text/xml text/css  application/javascript;  

案例演示: 

    此配置可用位置:http, server, location(在http中定義表示對所有的server生效,在server中定義,表示對所有的location生效。在location中定義,表示對某個location生效)

     如何查找壓縮的數據類型呢?

      

 

  6)ngx_http_ssl_module模塊:

    1.ssl on | off;
      是否啟用htttps協議
    2.ssl_certificate file;
      當前虛擬主機使用PEM格式的證書文件;
    3.ssl_certificate_key file;
      當前虛擬主機上與其證書匹配的私鑰文件;
    4.ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1][TLSv1.2]
      支持ssl協議版本,默認為后三個;
    5.ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
      builtin[:size]:使用Openssl內建的緩存,此緩存為每worker進程私有;
      [shared:name:size]:在各worker之間使用一個共享的緩存;
    6.ssl_session_timeout time;
      客戶端一側的連接可以服用ssl session cache中緩存的ssl參數的有效時長;

案例:

    

配置示例:

 #創建私有CA自簽證書,以192.168.32.132為CA

[root@www ~]# cd /etc/pki/CA

[root@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

........................................................................+++

..................................+++

e is 65537 (0x10001)

[root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:ZHEJIANG

Locality Name (eg, city) [Default City]:NINGBO

Organization Name (eg, company) [Default Company Ltd]:ilinux.com

Organizational Unit Name (eg, section) []:opt

Common Name (eg, your name or your server's hostname) []:www.ilinux.com

Email Address []:

[root@www CA]# touch index.txt

[root@www CA]# echo 01 > serial

 #在nginx主機上生成私鑰和申請證書

[root@wujunjie ~]# mkdir /etc/nginx/ssl

[root@wujunjie ~]# (umask 077;openssl genrsa -out /etc/nginx/ssl/.nginx.key 2048)

[root@wujunjie ~]# openssl req -new -key /etc/nginx/ssl/.nginx.key -out /etc/nginx/ssl/nginx.crs -days 365

 [root@wujunjie ssl]# scp nginx.csr [root@192.168.32.132:/tmp](mailto:root@192.168.32.132:/tmp)

 #在CA上簽署證書

 [root@www CA]# openssl ca -in /tmp/nginx.csr -out certs/nginx.crt -days 365

 #把簽署好的證書nginx.crt傳會nginx主機

[root@www CA]# scp certs/nginx.crt root@192.168.32.128:/etc/nginx/ssl #修改nginx配置文件,啟用ssl

 [root@wujunjie ~]# vim /etc/nginx/conf.d/vhost1.conf

server {

 listen 443 ssl;

 server_name www1.ilinux.com;

 root /data/nginx/vhost1;

 index index.html

 error_page 404 =200 /notfound.html;

 access_log /var/log/nginx/vhost1-access.log main;

 ssl on;

 ssl_certificate /etc/nginx/ssl/nginx.crt;

 ssl_certificate_key /etc/nginx/ssl/.nginx.key;

 ssl_protocols sslv2 sslv3 tlsv1 tlsv1.1 tlsv1.2;

 ssl_session_cache shared:SSL:10m;

 location / {

  allow all;

 }

 }

[root@wujunjie ~]# vim /data/nginx/vhost1/index.html

<h1>nginx</h1>

<h2>192.168.32.128</h2>

 #檢查語法,重載配置

 [root@wujunjie ~]# nginx -t

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

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

[root@wujunjie ~]# nginx -s reload

 

   補充一篇博客的說明:

    

    

    

    

   7)ngx_http_rewrite_module模塊:

    用於使用正則表達式模式更改請求URI,返回重定向,並有條件的選擇配置
      例如:

    bbs.magedu.com/ --> www.magedu.com/bbs/
    http://www.magedu.com/ --> https://www.magedu.com/
    http://www.magedu.com/login.php;username=tom --> http://www.magedu.com/tom/
    http://www.ilinux.io/bbs/ --> http://bbs.ilinux.io/

    將用戶請求的URI基於regex所描述的模式進行檢查,然后完成替換;

    1.rewrite  regex  replacement  [flag]
      將用戶請求的URI基於regex所描述的模式進行檢查,匹配到時將其替換為replacement指定的新的URI;

      注意:如果在同一級配置塊中存在多個rewrite規則,那么會自下而上逐個檢查;被某條件規則替換完成后,會重新一輪的替換檢查,因此,隱含有循環機制;[flag]所表示的標志位用於控制此循環機制;

      如果replacement是以http://或https://開頭,則替換結果會直接以重定向返回給客戶端;301:永久重定向;

      [flag]

      last:重寫完成后停止對當前URI在當前location中后續的其他重寫操作,而后對新的URI啟動新的一路重寫檢查;提前重啟新一輪循環;
      break:重寫完成后停止對當前URI在當前location中后續的其他重寫操作,而后直接跳轉至重寫規則配置塊之后的其他配置;循環結束;
      redirect:重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端,有客戶端重新發起請求;不能以http://或https://開頭;
      permanent:重寫完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求;

    案例:

[root@www1 conf.d]# vim vhost.conf

      server {
      listen 80;
      server_name www.ilinux.com;
      root /data/nginx/vhost1;
      rewrite /(.*)\.png$ /$1.jpg;
      }
  [root@www1 conf.d]# nginx -s reload

    注意:如果沒有加flag,默認就是permanent

    http重定向為https

    [root@www1 conf.d]# vim vhost.conf

          server {
          listen 80;
          server_name www.ilinux.com;
          root /data/nginx/vhost1;
          rewrite /(.*)$ https://%{HTTP_HOST} /$1
          }
      [root@www1 conf.d]# nginx -s reload

    2、return

      停止處理並將指定的代碼返回給客戶端    

      return code [text];
      return code URL;
      return URL;

    3、rewrite_log on |off;

      是否開啟重寫日志

    4.if (condition) {...}

      引入一個新的配置上下文:條件滿足是,執行配置塊中的配置指令;

      可用於server和location段中

condition:
比較操作符:
===
~:模式匹配,區分字符大小寫
~:模式匹配,區分字符大小寫
!~:模式不匹配,區分字符大小寫
!~:模式不匹配,不區分字符大小寫
文件及目錄存在性判斷:
-e, !-e
-f, !-f
-d, !-d
-x, !-x

    5、set $variable_value

      用戶自定義變量

   7)ngx_http_referer_module模塊
      作用:The ngx_http_referer_module module is used to block access to a site for requests with invalid values in the “Referer” header field.

    格式:valid_referers none | blocked | server_names | string ...;
             定義referer首部的合法引用用值;

 none:請求報文首部沒有referer首部;
          blocked:請求報文的referer首部沒有值;
          server_names:參數,其可以有值作為主機名或主機名模式;
              arbitrary_string:直接字符串,但可使用*作通配符;
              regular expression:被指定的正則表達式模式匹配到的字符串;要使用~打頭,例如 ~.*\.magedu\.com;
              $invalid_referer : 模塊內置變量,非法引用,只要沒被valid_referers定義匹配到的就是非法引用
...

    示例:

  配置示例:
                valid_referers none block server_names *.magedu.com *.mageedu.com magedu.* mageedu.* ~\.magedu\.;
                
                if($invalid_referer) {
                    return http://www.magedu.com/invalid.jpg;
                }

    示例:  

    

 




 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM