web-dev-qa-db-ja.com

nginx server_nameワイルドカードまたはキャッチオール

いくつかのWebサイトにサービスを提供するnginxのインスタンスがあります。 1つ目は、サーバーのIPアドレスに関するステータスメッセージです。 2番目はadmin.domain.comの管理コンソールです。これらは素晴らしい働きをします。これで、他のすべてのドメインリクエストを単一のindex.phpに送信したいと思います-ドメインとサブドメインの負荷があり、それらをすべてnginx configにリストすることは実用的ではありません。

これまでserver_name*に設定しようとしましたが、無効なワイルドカードとして失敗しました。 *.*は、他のサーバーブロックを追加するまで機能しますが、その後、競合していると思われます。

他のサイトが定義された後、nginxでキャッチオールサーバーブロックを実行する方法はありますか?

N.B。私はスパマーではありません。これらは有用なコンテンツを備えた本物のサイトであり、データベースの同じCMSを使用しています!

103
Tak

Catch-allサーバーブロックでlistenオプションをこれに変更します。 (default_serverを追加)これにより、すべての未定義の接続が(指定されたポートで)取得されます。

listen       80  default_server;

ファイルまたはフォルダーが存在しない場合、すべてをindex.phpにプッシュする場合。

try_files                       $uri /$uri /index.php;
132
Mattias

シンプルなアンダースコアも機能します:

server_name  _;

ソース: http://nginx.org/en/docs/http/server_names.html

53
jp.gouigoux

これは動作します:

server_name ~^(.+)$
22
comonitos

私にとっては、default_serverが何らかの形で機能していなかったと定義しています。私はそれを解決しました

server_name ~^.*$

すべての正規表現を使用します。

8
Ashish

これでマスクを使用できます:

server {
    listen       80;
    server_name  *.example.org;
    ...
}

server {
    listen       80;
    server_name  mail.*;
    ...
}

詳細はこちら: http://nginx.org/en/docs/http/server_names.html

3
redflasher

唯一のserverディレクティブ

Nginx listen Docs から

Default_serverパラメーターが存在する場合、サーバーは指定されたアドレスとポートのペアのデフォルトサーバーになります。どのディレクティブにもdefault_serverパラメーターがない場合、address:portペアを持つ最初のサーバーがこのペアのデフォルトサーバーになります。

すべてのリクエストを処理するserverディレクティブが1つしかない場合、何も設定する必要はありません。


複数のserverディレクティブ

すべてのリクエストを指定されたserverディレクティブと一致させたい場合は、listendefault_serverパラメーターを追加するだけで、Nginxはこのserverディレクティブをデフォルトとして使用します。

server {
    listen 80 default_server;
}

server_name _;について

Nginx Docs から

キャッチオールサーバーの例では、奇妙な名前「_」が見られます。

server {
    listen       80  default_server;
    server_name  _;
    return       444;
}

この名前について特別なことはありません。これは、実際の名前と交差することのない無数の無効なドメイン名の1つにすぎません。 「-」や「!@#」などの他の無効な名前も同様に使用できます。

どのserver_nameを設定しても、それは無効なドメイン名だけです。

2
Steely Wing

空のHostヘッダー(HTTP/1.で許可されている)でリクエストをキャッチしたい場合は、正規表現と空のserver_nameの両方を使用できます。

server {
    listen      80;
    server_name ~. "";
}
1
Pavel Golubev