Nginx配置中if判斷的使用
當(dāng)rewrite的重寫(xiě)規(guī)則滿(mǎn)足不了需求時(shí),比如需要判斷當(dāng)文件不存在時(shí)、當(dāng)路徑包含xx時(shí)等條件,則需要用到if
if語(yǔ)法
if (表達(dá)式) { ... }
表達(dá)式語(yǔ)法:
- 當(dāng)表達(dá)式只是一個(gè)變量時(shí),如果值為空或任何以0開(kāi)頭的字符串都會(huì)當(dāng)做false
- 直接比較變量和內(nèi)容時(shí),使用=或!=
- -f和!-f用來(lái)判斷是否存在文件
- -d和!-d用來(lái)判斷是否存在目錄
- -e和!-e用來(lái)判斷是否存在文件或目錄
- -x和!-x用來(lái)判斷文件是否可執(zhí)行
為了配置if的條件判斷,這里需要用到nginx中內(nèi)置的全局變量
$args 這個(gè)變量等于請(qǐng)求行中的參數(shù),同$query_string
$content_length 請(qǐng)求頭中的Content-length字段。
$content_type 請(qǐng)求頭中的Content-Type字段。
$document_root 當(dāng)前請(qǐng)求在root指令中指定的值。
$host 請(qǐng)求主機(jī)頭字段,否則為服務(wù)器名稱(chēng)。
$http_user_agent 客戶(hù)端agent信息
$http_cookie 客戶(hù)端cookie信息
$limit_rate 這個(gè)變量可以限制連接速率。
$request_method 客戶(hù)端請(qǐng)求的動(dòng)作,通常為GET或POST。
$remote_addr 客戶(hù)端的IP地址。
$remote_port 客戶(hù)端的端口。
$remote_user 已經(jīng)經(jīng)過(guò)Auth Basic Module驗(yàn)證的用戶(hù)名。
$request_filename 當(dāng)前請(qǐng)求的文件路徑,由root或alias指令與URI請(qǐng)求生成。
$scheme HTTP方法(如http,https)。
$server_protocol 請(qǐng)求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1。
$server_addr 服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個(gè)值。
$server_name 服務(wù)器名稱(chēng)。
$server_port 請(qǐng)求到達(dá)服務(wù)器的端口號(hào)。
$request_uri 包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名,如:”/foo/bar.php?arg=baz”。
$uri 不帶請(qǐng)求參數(shù)的當(dāng)前URI,$uri不包含主機(jī)名,如”/foo/bar.html”。
$document_uri 與$uri相同。
舉例說(shuō)明
1、如果文件不存在則返回400
if (!-f $request_filename) { return 400; }
2、如果host不是jouypub.com,則301到j(luò)ouypub.com中
if ( $host != 'jouypub.com' ){ rewrite ^/(.*)$ https://jouypub.com/$1 permanent; }
3、如果請(qǐng)求類(lèi)型不是POST則返回405
if ($request_method = POST) { return 405; }
4、如果參數(shù)中有a=1
則301到指定域名
if ($args ~ a=1) { rewrite ^ http://example.com/ permanent; }
5、在某種場(chǎng)景下可結(jié)合location規(guī)則來(lái)使用,如:
# 訪(fǎng)問(wèn) /test.html 時(shí) location = /test.html { # 設(shè)置默認(rèn)值為xiaowu set $name xiaowu; # 如果參數(shù)中有 name=xx 則使用該值 if ($args ~* name=(\w+?)(&|$)) { set $name $1; } # 301 rewrite ^ /$name.html permanent; }
上面表示:
/test.html => /xiaowu.html
/test.html?name=ok => /ok.html?name=ok
到此這篇關(guān)于Nginx配置中if判斷的使用的文章就介紹到這了,更多相關(guān)Nginx if判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux設(shè)置Nginx自動(dòng)重啟的實(shí)現(xiàn)
在Linux系統(tǒng)中,設(shè)置Nginx服務(wù)開(kāi)機(jī)自動(dòng)啟動(dòng)及意外停止后自動(dòng)重啟是保持服務(wù)穩(wěn)定運(yùn)行的關(guān)鍵步驟,本文詳細(xì)介紹了如何使用systemctl命令和配置systemd服務(wù)文件來(lái)實(shí)現(xiàn)這一功能,感興趣的可以了解一下2024-09-09Nginx禁止ip訪(fǎng)問(wèn)或非法域名訪(fǎng)問(wèn)
這篇文章主要介紹了Nginx禁止ip訪(fǎng)問(wèn)或非法域名訪(fǎng)問(wèn),需要的朋友可以參考下2022-04-04nginx服務(wù)器異常502 bad gateway原因排查
這篇文章主要介紹了nginx服務(wù)器異常502 bad gateway原因排查,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08nginx配置后訪(fǎng)問(wèn)出現(xiàn)白屏的問(wèn)題解決
本文主要介紹了nginx配置后訪(fǎng)問(wèn)出現(xiàn)白屏2024-06-06Nginx下讓W(xué)ordPress支持固定鏈接的偽靜態(tài)規(guī)則
Nginx下讓W(xué)ordPress支持固定鏈接的偽靜態(tài)規(guī)則,要讓nginx支持wordpress固定鏈接非常簡(jiǎn)單,需要自己進(jìn)行添加點(diǎn)配置代碼2013-02-02