いくつかのWebサイトにサービスを提供するnginxのインスタンスがあります。 1つ目は、サーバーのIPアドレスに関するステータスメッセージです。 2番目はadmin.domain.com
の管理コンソールです。これらは素晴らしい働きをします。これで、他のすべてのドメインリクエストを単一のindex.php
に送信したいと思います-ドメインとサブドメインの負荷があり、それらをすべてnginx configにリストすることは実用的ではありません。
これまでserver_name
を*
に設定しようとしましたが、無効なワイルドカードとして失敗しました。 *.*
は、他のサーバーブロックを追加するまで機能しますが、その後、競合していると思われます。
他のサイトが定義された後、nginxでキャッチオールサーバーブロックを実行する方法はありますか?
N.B。私はスパマーではありません。これらは有用なコンテンツを備えた本物のサイトであり、データベースの同じCMSを使用しています!
Catch-allサーバーブロックでlistenオプションをこれに変更します。 (default_server
を追加)これにより、すべての未定義の接続が(指定されたポートで)取得されます。
listen 80 default_server;
ファイルまたはフォルダーが存在しない場合、すべてをindex.phpにプッシュする場合。
try_files $uri /$uri /index.php;
これは動作します:
server_name ~^(.+)$
私にとっては、default_serverが何らかの形で機能していなかったと定義しています。私はそれを解決しました
server_name ~^.*$
すべての正規表現を使用します。
これでマスクを使用できます:
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
server
ディレクティブDefault_serverパラメーターが存在する場合、サーバーは指定されたアドレスとポートのペアのデフォルトサーバーになります。どのディレクティブにもdefault_serverパラメーターがない場合、address:portペアを持つ最初のサーバーがこのペアのデフォルトサーバーになります。
すべてのリクエストを処理するserver
ディレクティブが1つしかない場合、何も設定する必要はありません。
server
ディレクティブすべてのリクエストを指定されたserver
ディレクティブと一致させたい場合は、listen
にdefault_server
パラメーターを追加するだけで、Nginxはこのserver
ディレクティブをデフォルトとして使用します。
server {
listen 80 default_server;
}
server_name _;
についてNginx Docs から
キャッチオールサーバーの例では、奇妙な名前「_」が見られます。
server { listen 80 default_server; server_name _; return 444; }
この名前について特別なことはありません。これは、実際の名前と交差することのない無数の無効なドメイン名の1つにすぎません。 「-」や「!@#」などの他の無効な名前も同様に使用できます。
どのserver_name
を設定しても、それは無効なドメイン名だけです。
空のHost
ヘッダー(HTTP/1.で許可されている)でリクエストをキャッチしたい場合は、正規表現と空のserver_name
の両方を使用できます。
server {
listen 80;
server_name ~. "";
}