文章目錄
- 1. location下的匹配命令
-
- 1.1 可用的匹配命令及作用
- 1.2 匹配命令優先級
- 1.3 示例
- 2. 常用配置指令:alias、root、proxy_pass
-
- 2.1 alias
- 2.2 root
- 2.3 proxy_pass
- 3. last 和 break關鍵字的區別
- 4. permanent 和 redirect關鍵字的區別
在 Nginx 的 nginx.conf 組態檔中,location代碼塊的作用是匹配對應的用戶請求url,并將其映射到服務器的指定目錄,
1. location下的匹配命令
1.1 可用的匹配命令及作用
location 中可用的匹配命令有兩種:普通字串和正則運算式,~ 和~* 用于正則運算式,其他前綴和無任何前綴都用于普通字串,正則運算式會根據匹配順序,匹配到第一個正則運算式后停止搜索,普通字串匹配則無視順序,只會選擇最精確的匹配,常用的匹配命令和作用如下:
| 命令 | 作用 |
|---|---|
| ~ | 表示執行一個正則匹配,區分大小寫 |
| ~* | 表示執行一個正則匹配,不區分大小寫 |
| ^~ | 表示普通字符匹配,如果該選項匹配,只匹配該選項,不匹配其他,一般用來匹配目錄 |
| = | 進行普通字符精確匹配 |
| 無前綴 | 用于普通字串 |
| @ | 定義一個命名的location,使用在內部定向時,例如error_page,try_files |
1.2 匹配命令優先級
- 先匹配精確普通字串,將最精確的匹配暫時存盤;如果沒有匹配上,進行普通字串匹配,若匹配多個,按最長匹配,之后是^~匹配;
- 然后按照組態檔中的宣告順序進行正則運算式匹配,只要匹配到一個正則運算式,則停止匹配,取正則運算式為匹配結果;
- 如果所有正則運算式都匹配不上,則取1中的結果;
- 最后匹配“/”,如果普通字串和正則運算式都匹配不上,則報404 NOT FOUND,
- 概括地說,"=" > “完整路徑” > “^~” > “/*” > “/”
1.3 示例
- 只匹配“/”,
location = /{
}
- 匹配任何請求,所有URI都是以“/”開始;更長字符匹配或正則運算式匹配會優先,
location / {
}
- 匹配任何以/Directory/ 開始的請求,并停止匹配其他location,
location ^~ /Directory/ {
}
- 匹配以gif、jpg、jpeg結尾的請求;但是遇到^~由它處理 ,
location ~* .(gif|jpg|jpeg)$ {
}
- 以/index/開頭的請求,如果鏈接的狀態為404,則會匹配到@index_error,
location /index/ {
error_page 404 @index_error;
}
location @index_error {
… }
2. 常用配置指令:alias、root、proxy_pass
2.1 alias
alias為別名配置,用于訪問檔案系統,在匹配到URL后,將URL中 匹配到的欄位替換成alias 后邊的內容,
示例一:
若 location 配置如下(普通字串匹配),則請求URL為“/test/file”時,回傳檔案“/usr/local/file”,
location /test/ {
alias /usr/local/;
}
示例二:
若 location 配置如下(正則運算式匹配),則請求URL為“/test/love.gif”時,回傳檔案“/usr/local/test1/love.gif”,
其中 “$1” 表示 location運算式中匹配的第一個引數,
location ~* /test/~* .(gif|jpg|jpeg)${
alias /usr/local/test1/$1;
}
2.2 root
根路徑配置,用于訪問檔案系統,在匹配到URI后,指向root配置的路徑,并把請求路徑附加到其后,
示例一:
若 location 配置如下(普通字串匹配),則請求URL為“/test/file”時,回傳檔案“/usr/local/test/file”
location /test/ {
root /usr/local/;
}
2.3 proxy_pass
代理配置,用于代理請求,匹配到URI后,轉發請求到proxy_pass配置的URL,
示例一:
若 location 配置如下(普通字串匹配),則請求URL為“/test/hello”時,回傳則將請求轉發到“http://192.168.1.111:8089/hello”,
location /test/ {
proxy_pass http://192.168.1.111:8089/;
}
注:如果proxy_pass配置了“/”則不附加location的URI,沒有配置“/”,則會附加,
3. last 和 break關鍵字的區別
(1)last 和 break 當出現在location 之外時,兩者的作用是一致的沒有任何差異
(2)last 和 break 當出現在location 內部時:
| 關鍵字 | 作用 |
|---|---|
| last | 使用了last 指令,rewrite 后會跳出location 作用域,重新開始再走一次剛才的行為 |
| break | 使用了break 指令,rewrite后不會跳出location 作用域,它的生命也在這個location中終結 |
4. permanent 和 redirect關鍵字的區別
| 關鍵字 | 作用 |
|---|---|
| rewrite … permanent | 永久性重定向,請求日志中的狀態碼為301 |
| rewrite … redirect | 臨時重定向,請求日志中的狀態碼為302 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/294440.html
標籤:其他
上一篇:怎么實作分布式事務?
下一篇:C語言篇+ 指標進階(上)
