nginx 經常使用配置說明

1、location 配置

1.1 語法規則: location [=|~|~*|^~] /uri/ { … }
= 開頭表示精確匹配
^~ 開頭表示uri以某個常規字符串開頭,理解爲匹配 url路徑便可。nginx不對url作編碼,所以請求爲/static/20%/aa,能夠被規則^~ /static/ /aa匹配到(注意是空格)。
~ 開頭表示區分大小寫的正則匹配
~*  開頭表示不區分大小寫的正則匹配
!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配 的正則
/ 通用匹配,任何請求都會匹配到。
多個location配置的狀況下匹配順序爲(參考資料而來,還未實際驗證,試試就知道了,沒必要拘泥,僅供參考):
首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最後是交給 / 通用匹配。當有匹配成功時候,中止匹配,按當前匹配規則處理請求。
例子,有以下匹配規則:php

location = / {
   #規則A
}
location = /login {
   #規則B
}
location ^~ /static/ {
   #規則C
}
location ~ \.(gif|jpg|png|js|css)$ {
   #規則D
}
location ~* \.png$ {
   #規則E
}
location !~ \.xhtml$ {
   #規則F
}
location !~* \.xhtml$ {
   #規則G
}
location / {
   #規則H
}

 


那麼產生的效果以下:
訪問根目錄/, 好比http://localhost/ 將匹配規則A
訪問 http://localhost/login 將匹配規則B,http://localhost/register 則匹配規則H
訪問 http://localhost/static/a.html 將匹配規則C
訪問 http://localhost/a.gifhttp://localhost/b.jpg 將匹配規則D和規則E,可是規則D順序優先,規則E不起做用,而 http://localhost/static/c.png 則優先匹配到規則C
訪問 http://localhost/a.PNG 則匹配規則E,而不會匹配規則D,由於規則E不區分大小寫。
訪問 http://localhost/a.xhtml 不會匹配規則F和規則G,http://localhost/a.XHTML不會匹配規則G,由於不區分大小寫。規則F,規則G屬於排除法,符合匹配規則可是不會匹配到,因此想一想看實際應用中哪裏會用到。
訪問 http://localhost/category/id/1111 則最終匹配到規則H,由於以上規則都不匹配,這個時候應該是nginx轉發請求給後端應用服務器,好比FastCGI(php),tomcat(jsp),nginx做爲方向代理服務器存在。css


因此實際使用中,我的以爲至少有三個匹配規則定義,以下:
#直接匹配網站根,經過域名訪問網站首頁比較頻繁,使用這個會加速處理,官網如是說。
#這裏是直接轉發給後端應用服務器了,也能夠是一個靜態首頁
# 第一個必選規則html

location = / {
    proxy_pass http://tomcat:8080/index
}

# 第二個必選規則是處理靜態文件請求,這是nginx做爲http服務器的強項linux

# 有兩種配置模式,目錄匹配或後綴匹配,任選其一或搭配使用nginx

location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}

 


#第三個規則就是通用規則,用來轉發動態請求到後端應用服務器
#非靜態文件請求就默認是動態請求,本身根據實際把握
#畢竟目前的一些框架的流行,帶.php,.jsp後綴的狀況不多了
location / {
    proxy_pass http://tomcat:8080/
}web

3、ReWrite語法後端

last – 基本上都用這個Flag。
break – 停止Rewirte,不在繼續匹配
redirect – 返回臨時重定向的HTTP狀態302
permanent –
返回永久重定向的HTTP狀態301centos

一、下面是能夠用來判斷的表達式:
   -f和!-f用來判斷是否存在文件
   -d和!-d用來判斷是否存在目錄
   -e和!-e用來判斷是否存在文件或目錄
    -x和!-x用來判斷文件是否可執行
二、下面是能夠用做判斷的全局變量
    例:http://localhost:88/test1/test2/test.php
tomcat

$host:localhost
$server_port:88
$request_uri:http://localhost:88/test1/test2/test.php
$document_uri:/test1/test2/test.php
$document_root:D:\nginx/html
$request_filename:D:\nginx/html/test1/test2/test.php

  三、按照匹配規則,將請求路徑重定向。 服務器

		
     	location /act/ {
		
            rewrite ^/act/(.*)$ /$1 break;
            proxy_set_header Host $host;  
            proxy_set_header X-Real-IP $remote_addr;   
            proxy_set_header X-Forwarded-For $remote_addr;#$proxy_add_x_forwarded_for;  
            proxy_pass http://rhythmk.com:7002;
            #proxy_redirect default;  
 
           
	  }

  

4、Redirect語法

server {
     listen 80;
     server_name start.igrow.cn;
     index index.html index.php;
     root html;
     if ($http_host !~ 「^star\.igrow\.cn$&quot {
           rewrite ^(.*) http://star.igrow.cn$1 redirect;
    }
}

5、防盜鏈

location ~* \.(gif|jpg|swf)$ {
    valid_referers none blocked start.igrow.cn sta.igrow.cn;
    if ($invalid_referer) {
           rewrite ^/ http://$host/logo.png;
    }
}

6、根據文件類型設置過時時間

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
    if (-f $request_filename) {
        expires 1h;
         break;
  }
}    

7、禁止訪問某個目錄

location ~* \.(txt|doc)${
      root /data/www/wwwroot/linuxtone/test;
      deny all;
}

 8、多個自動規則制定到同一代理:

    location ~*^(/wap|/w|/w1|/u|/get\-business\-scope)$ {
          proxy_pass http://127.0.0.1:8251;
    
   }

  /*

   等價於:
      = /wap
      = /w
     = /w1
     = /u
     = /get-business-scope
  */

  

2、經常使用全局變量

http://dwz.stamhe.com/index.php?_a=index&_m=show&count=10
remote_addr		客戶端ip,如:192.168.4.2
binary_remote_addr	客戶端ip(二進制)
remote_port		客戶端port,如:50472
remote_user		已經通過Auth Basic Module驗證的用戶名
host			請求主機頭字段,不然爲服務器名稱,如:dwz.stamhe.com
request			用戶請求信息,如:GET /?_a=index&_m=show&count=10 HTTP/1.1
request_filename	當前請求的文件的路徑名,由root或alias和URI request組合而成,如:/webserver/htdocs/dwz/index.php
status			請求的響應狀態碼,如:200
body_bytes_sent  	響應時送出的body字節數數量。即便鏈接中斷,這個數據也是精確的,如:40
content_length	        請求頭中的Content-length字段
content_type	        請求頭中的Content-Type字段
http_referer	        引用地址
http_user_agent	        客戶端agent信息,如:Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11 args 如:_a=index&_m=show&count=10 document_uri 與$uri相同,如:/index.php document_root 針對當前請求的根路徑設置值,如:/webserver/htdocs/dwz hostname 如:centos53.localdomain http_cookie 客戶端cookie信息 cookie_COOKIE cookie COOKIE變量的值 is_args 若是有$args參數,這個變量等於」?」,不然等於」",空值,如? limit_rate 這個變量能夠限制鏈接速率,0表示不限速 query_string 與$args相同,如:_a=index&_m=show&count=10 realpath_root 如:/webserver/htdocs/dwz request_body 記錄POST過來的數據信息 request_body_file 客戶端請求主體信息的臨時文件名 request_method 客戶端請求的動做,一般爲GET或POST,如:GET request_uri 包含請求參數的原始URI,不包含主機名,如:」/foo/bar.php?arg=baz」。不能修改。如:/index.php?_a=index&_m=show&count=10 scheme HTTP方法(如http,https),如:http uri 如:/index.php request_completion 若是請求結束,設置爲OK. 當請求未結束或若是該請求不是請求鏈串的最後一個時,爲空(Empty),如:OK server_protocol 請求使用的協議,一般是HTTP/1.0或HTTP/1.1,如:HTTP/1.1 server_addr 服務器地址,在完成一次系統調用後能夠肯定這個值,如:192.168.4.129 server_name 服務器名稱,如:dwz.stamhe.com server_port 請求到達服務器的端口號,如:80

一、匹配URL路徑規則說明

規則1:匹配請求地址以 /search 開頭的URL。
location  ^~/search {
	    # 規則1
	 }

##### 規則2:匹配請求地址以 /search/ 開頭的URL。

location ^~/search/ { # 規則2 }

二、代理站點的映射文件關係:

2.1 代理url ,不添加「/」 ,如請求的路徑http://127.0.0.1/search/index.php,將請求9108站點的文件路徑: 「{根目錄}/search/index.php」。
location  ^~/search { proxy_set_header Host $host; # proxy_set_header ProxyAlias "search"; proxy_pass http://127.0.0.1:9108; }
2.2 代理url ,添加「/」 ,如請求的路徑http://127.0.0.1/search/index.php,將請求9108站點的文件路徑:「{根目錄}/index.php 文件,匹配最後一個「/」後的文件。
請求路徑 http://127.0.0.1/search/abc/list 匹配 {根目錄}/list

location ^~/search { proxy_set_header Host $host; # proxy_set_header ProxyAlias "search"; proxy_pass http://127.0.0.1:9108/; }
相關文章
相關標籤/搜索