nginx 刪除 if 語句

nginx 刪除 if 語句

我在這裡為 nginx 菜鳥尋找一些建議。我一直在讀到 if 語句在 nginx 中速度很慢,所以我希望在轉換這些語句時得到一些幫助。我嘗試了很多不同的方法,但都失敗了,所以我想我會拋出一個問題。

server_name *.noconformity.co noconformity.co;
# remove all sub domains and www
if ($http_host !~* "^(ftp|ssh)\.noconformity\.co$"){
    set $rule_0 1$rule_0;
}
if ($http_host ~ "^([^.]+)\.noconformity\.co$"){
    set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
    rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
    break;
}
# Login Short Cut
if ($uri ~* "/login") {
    rewrite ^/login(/.*)? /wp-admin$1;
}

答案1

完全未經測試 - 很可能會出現錯誤 - 但希望這個概念是有效的。

下面的配置是基於我對您的目標的解釋:將除“ftp”和“ssh”之外的所有子網域重定向到主網站;將 /login 重定向到 /wp-admin

建立一個伺服器區塊來接受與 ftp 和 ssh 子網域的連接 - 然後在此處執行某些操作(例如拒絕或返回 403 等) - 由於這是靜態 server_name,因此它優先於通配符 server_name。

server {
    server_name ftp.noconformity.co ssh.noconformity.co;
    #additional options
}

您的主伺服器區塊 - 將您的重寫新增至位置區塊

server{
    server_name noconformity.co;
    #root ....; 
    #your main config

    location ~* /login/ {
        rewrite ^/login/(.*)? /wp-admin$1;
    }
}

{我必須更改 /login/ 重寫以避免陷入重定向中內建 WP 日誌的循環中}

最後,通配符 server_name - 這將匹配任何子網域(已匹配的子網域除外)捕獲路徑,並重寫到您的主網站。

server {
    server_name *.noconformity.co;
    rewrite ^/(.*)$ http://noconformity.co/$1 permanent;
}

nginxserver_names 上的頁面值得一讀,因為它解釋了不同 server_name 表達式的優先權。

答案2

這個問題的更好答案是使用HTTP 映射模組。您上面的範例與他們所演示的情況幾乎相同。更乾淨且更易於管理。

相關內容