Nginx if location 指令部分應(yīng)用場(chǎng)景使用說明

location 指令

只有正則匹配( ~ 和 ~* )才能使用正則子串

# cat regexp.conf 
server {
    listen 9998;
    server_name _;
    access_log logs/regexp_access.log  main;
    index index.html index.htm;

    location ~ /hello/(.*)/$ {
        set $word $1;
        return 200 '$word\n';
    }

}
# curl 127.0.0.1:9998/hello/nginx/
nginx

前綴匹配(^~ )不能識(shí)別正則表達(dá)式 ,會(huì)把正則表達(dá)式當(dāng)成普通字符

# cat regexp.conf 
server {
    listen 9998;
    server_name _;
    access_log logs/regexp_access.log  main;
    index index.html index.htm;

    location ^~ /hello/(.*)/$ {
        set $word $1;
        return 200 'test $word\n';
    }

}
# curl 127.0.0.1:9998/hello/nginx/
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>openresty</center>
</body>
</html>
# curl 127.0.0.1:9998/hello/(.*)/$
-bash: syntax error near unexpected token `('
# curl 127.0.0.1:9998/hello/\(.*\)/$
test 

if 指令

if 的優(yōu)先級(jí)比 location 高,因?yàn)?if 指令在 ngx_http_server_rewrite_phase 階段,location 指令在 ngx_http_find_config_phase 階段。
if 指令可以使用正則子串

# cat regexp.conf 
server {
    listen 9998;
    server_name _;
    access_log logs/regexp_access.log  main;
    index index.html index.htm;

    location ~ /hello/(.*)/$ {
        set $word $1;
        return 200 '$word\n';
    }

    if ($http_user_agent ~ curl/(.*)) {
        set $curl_version $1;
        return 200 'curl_version: $curl_version\n';
    }

}
# curl 127.0.0.1:9998/hello/nginx/
curl_version: 7.29.0
# cat regexp.conf 
server {
    listen 9998;
    server_name _;
    access_log logs/regexp_access.log  main;
    index index.html index.htm;

    location ~ /hello/(.*)/$ {
        set $word $1;
        return 200 '$word\ncurl_version: $curl_version\n';
    }

    if ($http_user_agent ~ curl/(.*)) {
        set $curl_version $1;
    }

}
# curl 127.0.0.1:9998/hello/nginx/
nginx
curl_version: 7.29.0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容