server{ location = \ { [配置A] } location / { [配置B] } location = /images/ { [配置C] } location ^~ /static/{ [配置D] } localtion ~* \.(gif|jpg|png){ [配置E] } }
語法:html
location = | ~ | ~* | ^~ | @ /url/{ //注意 =、~、~*、^~ 、@是location的匹配規則,」|「表示或者 「 ......省略其餘配置 }
規則說明:nginx
符號 | 含義 |
---|---|
= | 字面精準匹配,若是匹配,則跳出匹配過程(再也不進行正則匹配) |
~ | 開頭區分大小寫的正則匹配 |
~* | 開頭不區分大小寫的正則匹配 |
^~ | 開頭表示uri以某哥常規字符串開頭,理解爲匹配url路徑便可 |
/ | 通用匹配,在沒有正則表達式匹配時,任何請求都會匹配到 |
@ | 不是普通的location匹配,用於location內部重定向的變量 |
~ | 開頭區分大小寫的正則匹配 |
多個location配置的匹配順序:正則表達式
注意:每次匹配成功後,中止匹配,會按照本匹配的location處理請求apache
按照上面實例進行說明匹配順序:瀏覽器
location = \ { [配置A] }
location ^~ /static/{ [配置D] }
若是以上無任何匹配項則會選擇通用選項,並按照所匹配的配置B進行處理請求:bash
location / { [配置B] }
location = / { root /var/ww/html/; }
此規則表示只匹配以默認地址進行訪問的請求,訪問地址:http://NginxIP/ide
location ^~ /static/ { root /var/www/html/static; }
此規則表示只匹配以" /static/ "開頭的地址進行訪問的請求,訪問地址:http://NginxIP/static/url
location ~* \.(png|gif|jpg){ root /var/www/html/; }
此規則表示只匹配" .png | .gif | *.jpg "的文件,訪問地址:http://NginxIP/test.png代理
location ~* /Test/ { root /var/www/html/; }
此規則表示匹配url地址中存在Test的訪問請求,不區分大小寫test也能夠,訪問地址:http://NginxIP/test/code
location ~ /Test/{ root /var/www/html/; }
此規則表示匹配url地址中存在Test的訪問請求,區分大小寫,test是進行匹配的,訪問地址:http://NginxIP/Test/
location / { root /var/www/html; }
此規則爲默認匹配,他能夠匹配全部以默認地址訪問的連接,訪問地址:http://NginxIP/login.html
location @index_error{ root /var/www/error/ }
此規則表示匹配以 "/index/ "開頭的請求,若是連接狀態404,會匹配到這條規則
nginx的rewrite功能和apache同樣,rewrite的主要功能是實現RUL地址的重定向。Nginx的rewrite功能是由PCRE軟件支持,rewrite模塊即ngx_http_rewrite_module
模塊。從某種意義上能夠說爲了美觀或者搜索引發的友好搜索,提升排名等
server{ listen 80; server_name www.jkyst.xyz jkyst.xyz; if($host != 'www.jkyst.xyz' ){ rewrite ^/(.*)$ http://www.jkyst.xyz/$1 permanent; } location ~.*\.(png|gif|jpg){ return 403; } }
語法:
rewrite regex replacement [flag]
rewrite:rewrite重寫的關鍵字不可省略
regex:這裏寫的是正則表達式
replacement:這裏是從新內容
flag:這裏是最後的flag標記
flag標記說明:
flag標記 | 說明 |
---|---|
last | 也就是apache裏的(L)標記,表示完成rewrite,URL地址不會改變 |
break | 本條規則匹配成功後,會中止匹配,再也不匹配後面的規則,URL地址不會改變 |
redirect | 返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址 |
permanent | 返回301永久重定向,瀏覽器地址欄顯示跳轉後的URL地址,Nginx返回response狀態碼301 |
相關符號說明:
符號 | 說明 |
---|---|
* | 表明前面0或者多個字符 |
+ | 表明前面1或者多個字符 |
? | 表明前面0或1個字符 |
^ | 表明字符串的開始位置 |
$ | 表明字符串結束位置 |
$n | 表明字符串結束第n個參數 |
. | 通配符,表明任何字符 |
server{ listen 80; server_name www.jkyst.xyz jkyst.xyz abc.jkyst.xyz; if($host != 'www.jkyst.xyz'){ rewrite ^/(.*)$ http://www,jkyst.xyz/$1 permanent; } }
當訪問 "abc.jkyst.xyz" 時會自動跳轉到 "www.jkyst.xyz",這裏出現 "if" 語句用於判斷,判斷結果爲true則執行語句內部的 rewrite重寫
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/(.*)$ http://www.jkyst.xyz/test1/$1 permanent; } }
當訪問 "test" 目錄下的文件或目錄不存在時,則跳轉到 "test1"下面的此文件或者目錄,跳轉後會將URL進行轉換
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/(.*)$ index.html last; } }
表示當訪問 "test" 目錄下的文件或目錄不存在時,則重定向到 "index.html"文件,跳轉後URl不會進行轉換
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/([0-9a-z]+)/([0-9a-z]+)/(.*)$ http://www.jkyst.xyz/test/$1$2$3 permanent; } }
目錄切換,表示將原目錄轉換成其餘目錄,【0-9a-z】表示轉換後目錄名稱
server{ ......其餘配置 location ~.*\.(sh)${ return 405; } }
表示當訪問 "*.sh"的文件就會返回405錯誤
server{ listen 80; server_name www.jkyst.xyz; if ( $http_user_agent ~* ("Android")|(iPhone)){ rewrite ^/test/(.*)$ http://www.jkyst.xyz/test/$1 permanent; } }
表示當匹配到瀏覽代理爲Android和iPhone時進行重定向 "test"目錄下的文件,改變訪問的地址
server{ location ~//.ht { deny all; } }
參數 | 介紹 |
---|---|
-f | 判斷文件是否存在 返回值true爲存在 |
!-f | 判斷文件是否存在 返回值false爲不存在 |
-d | 判斷目錄是否存在 返回值true爲存在 |
!-d | 判斷目錄是否存在 返回值true爲不存在 |
-e | 判斷文件或目錄是否存在 返回值true爲存在 |
!-e | 判斷文件或目錄是否存在 返回值true爲不存在 |
-x | 判斷文件是否可執行 返回值true爲可執行 |
!-x | 判斷文件是否可執行 返回值true爲不可執行 |
舉例說明:
server{ listen 80; server_name www.jkyst.xyz; if(!-e $request_filename){ rewrite ^/test/(.*)$ http://www.jkyst.xyz/test1/$1 permanent; } }
判斷文件或目錄是否存在