Nginx:数千のserver_name


12

何千もの外部設定ファイルを作成したり、非常に長いserver_name行を書いたりせずに、何千もの異なるserver_nameにNginx制限を設定するにはどうすればよいですか?

確かに、Nginxはserver1.com、server2.comなどのみのリバースプロキシにしたいです...

私にとって最善の解決策は、制限されたserver_namesを含む単一の外部設定ファイルを持つことです:server1.com、server2.comなど...

出来ますか ?


OK、答えてくれてありがとう、それは正規表現なしで動作します。式。kolbijackで説明されているような大きなserver_nameリスト。THX。


それが助けたものである場合、あなたはコルビジャックの答えを受け入れる必要があります。
オネイロイ

回答:


19

server_nameディレクティブを単独でファイルに配置し、サーバーブロックからインクルードすることができます。

# example.com.conf
server {
  include /path/to/server_names;
  ...
}

# /path/to/server_names
server_name
  example.com
  domain.com
  foo.com
;

server_namesファイルには、先頭にserver_nameが必要です。下部にある有効なディレクティブです。


これを行う場合は、遅延/ルックアップ遅延/ RAM使用量に注意してください。Apache で大きなリスト(約5,000個のServerAliasディレクティブと最大1600万個のDeny fromディレクティブ)を使用していくつかのテストを行いました。5,000個のドメインでは、測定可能な遅延がわずかに発生します。数を増やすと、約50,000で遅延が顕著になり始めました。Apache(およびおそらくnginxも)では、リストはRAMに保持されます。つまり、私が試した最大のセットでは、使用可能なRAM内で1つの子プロセスしか開始できませんでした。
ラダダダダ

1
@Ladadadada LOL。確認しました。Nginxは、server_nameディレクティブと応答の10万ドメインに対して30MbのRAMを使用しますRequest rate: 36900.6 req/s (0.0 ms/req)
-VBart

1
1,000,000で60MbおよびRequest rate: 34716.8 req/s (0.0 ms/req)
VBart

少なくともprefork MPMでは、Apacheが管理するよりもはるかに優れています。知っておくと便利です。
ラダダダダ

7

ブロックserver_name内の宣言はserver {}正規表現にすることができます。これにより、セットパターン内でserver_nameに一致させることができます。

詳細については、http//nginx.org/en/docs/http/server_names.html#regex_namesをご覧ください。


ありがとうございますが、カスタムドメインリストを単一の正規表現で宣言することはできません。server_name [zeus.domain.com | poseidon.domain.com | etc ...]; 長すぎます。
フレッド

1
@fredデータセットの例を教えてもらえますか?あるドメインが他のドメインにまったく似ていない場合を除き、正規表現パターンで問題が解決されると確信しています。
オネイロイ

@Oneiroi:ユースケースの例=ユーザー生成サブドメイン。各ユーザーが独自のサブドメインを取得し、Nginxを使用してそれらを異なるサーバーにルーティングするサービスとしてのソフトウェア製品を想像してください。その場合、1つのドメインが他のドメインとまったく異なります。
m.stenta

@ m.stentaああ、フェアポイント。サブドメインに共通性がない限り、正規表現は機能しません。または、目的にそぐわないドメイン自体から派生した正規表現の作成に結び付ける必要があります。
オネイロイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.