nginx の if 文を削除する

nginx の if 文を削除する

nginx 初心者にちょっとしたアドバイスをお願いします。nginx では if 文が非常に遅いと読んだので、これを変換する際に少し助けていただければと思います。さまざまな方法を試しましたが、すべて失敗しました。そこで、質問を投げかけようと思いました。

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;
    }
}

{組み込みの WP ログイン リダイレクトでループに陥るのを避けるために、/login/ の書き換えを変更する必要がありました}

最後に、ワイルドカード server_name です。これは、任意のサブドメイン (すでに一致しているものを除く) と一致し、パスをキャプチャして、メイン サイトに書き換えます。

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

nginxのserver_names のページさまざまな server_name 式の優先順位を説明しているので、一読する価値があります。

答え2

この質問に対するより良い答えは、HTTP マップ モジュール上記の例は、彼らが示したものとほぼ同じケースの使用です。はるかにわかりやすく、管理も簡単です。

関連情報