デフォルトサーバーを防ぐための最良の方法は?


26

多数の仮想ホストがあり、空白ページ、エラーページ、または一般的にNginxのリソースの最も効率的な使用によって、デフォルトの仮想ホストを「オフ」にしたいのですが、他の仮想ホストは事前定義されたドメイン。

回答:


42

HTTP 444コードを返すdefault_serverを定義します。

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

(4xxエラーコードが返されるということは、クライアントがリクエストをHTTP 200の空白ページであるが完全に信頼してではなく、失敗したリクエストとして解釈できることを意味します。)


2
444は非標準のnginx固有のコードです:「接続を閉じる特別なnginxの非標準コード444が返されます」
-bzeaman

2
これはhttpsでは機能しません。SSLハンドシェイクが最初に発生し、444を返す前にnginxがエラーになるため、単純なリッスン443 default_serverは機能しません。ブラウザエラーを回避するには、httpにリダイレクトします。
サイモンベンツソン

SSL接続を拒否する良い方法を提供するnginxチケットはこちらです。また、回避策、設定も提供しますssl_ciphers aNULL;
nh2

(nginxの自身のように、私が言及したの回避策注非SNI対応のHTTPSクライアントを中断しますproxy_pass、あなたが設定されていない限り、proxy_ssl_server_name on;)他に達することからserver_names(そう、本質的に正当破るserver_nameあなたがいることをポート443用のを通すたい)。詳細については、trac.nginx.org / nginx / ticket / 195#comment:11を参照してください。
nh2

4

index.htmlファイルが空のディレクトリを指すデフォルトの vhostを定義するだけです。

server {
    listen       80 default_server;
    server_name  _ ;
    root /var/www/placeholder ; 
    index index.html;
}

/ var / www / placeholderに空白のインデックスを配置します


ドメイン名にヒットしないすべてのリクエストと、空白ページでの応答をキャッチします。
wojciechz

return '';代わりにできませんroot...indexか?
オリアダム

0

なぜすべてを否定しないのですか

server {
    listen       80 default_server;
    server_name  _;

    location / {
        deny    all;
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.