あなたの場合はreturn 301 https://$host$request_uri;ポート80上のデフォルトの応答として、その後、サーバーは、遅かれ早かれ、オープンプロキシのリストに得ることができます[1]、インターネット上の他の場所でトラフィックを送信するために悪用される始めます。ログがこのようなメッセージでいっぱいになった場合、あなたはそれがあなたに起こったことを知っています:
42.232.104.114 - - [25/Mar/2018:04:50:49 +0000] "GET http://www.ioffer.com/i/new-fashion-fine-gold-bracelet-versaec-bracelet-641175733 HTTP/1.1" 301 185 "http://www.ioffer.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Hotbar 4.1.8.0; RogueCleaner; Alexa Toolbar)"
問題は、次の$hostように、ブラウザーがHostヘッダーで送信するものや、HTTPの開始行からのホスト名でさえもエコーバックすることです。
GET http://www.ioffer.com/i/new-fashion-fine-gold-bracelet-versaec-bracelet-641175733 HTTP/1.1
その問題のため、ここでの他のいくつかの答えはの$server_name代わりに使用することをお勧めします$host。$server_name常にあなたがserver_name宣言に入れたものを評価します。しかし、そこに複数のサブドメインがある場合、またはワイルドカードを使用する場合、宣言の後の最初のエントリ$server_nameのみを使用し、さらに重要なことにワイルドカードをエコーバックするだけなので、機能しません。server_name
それでは、セキュリティを維持しながら複数のドメインをサポートする方法は?自分のシステムでは、私がすることで、このジレンマに対処してきた最初の上場default_server使用していないブロックを$host、次に行い、ワイルドカードのブロックをリスト:
server {
listen 80 default_server;
server_name example.com;
return 301 https://example.com$request_uri;
}
server {
listen 80;
server_name *.example.com;
return 301 https://$host$request_uri;
}
(2番目のブロックに複数のドメインをリストすることもできます。)
この組み合わせにより、example.com一致しないドメインはハードコーディングされた場所(常に)にリダイレクトされ、自分のドメインに一致するドメインは適切な場所に移動します。サーバーはオープンプロキシとしては役に立たないので、トラブルを引き付けることはありません。
もしあなたがおかしいと感じているなら、私はあなたのdefault_serverブロックがあなたの正当なドメインのどれにもマッチせず、不快な何かを提供することもできると思います。。。。
[1]技術的に「プロキシ」は間違った言葉です。サーバーが外に出ず、クライアントへのリクエストを実行せず、リダイレクトを送信するだけですが、正しい言葉が何であるかわかりません。また、目標が何であるかわかりませんが、ログがノイズでいっぱいになり、CPUと帯域幅を消費するため、停止することもできます。