我在這裡為 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 映射模組。您上面的範例與他們所演示的情況幾乎相同。更乾淨且更易於管理。