2017-01-27 23 views
0

私はサイトをこのように設定しています:nginxをプロキシサーバーとして使用し、プロキシがUNIXソケット経由でDjangoサイトを提供するgunicornインスタンスを要求します。nginxがserver_nameと一致しないHostヘッダーを持つリクエストを受け入れるのはなぜですか?

これは私のnginxの設定です:

server { 
    listen 80; 
    server_name api.mysite.com; 

    location /static/ { 
     alias /webapps/mysite/static/; 
     autoindex off; 
    } 

    location/{ 
     include proxy_params; 
     proxy_pass http://unix:/webapps/mysite/mysite.sock; 
    } 

}

それが一致した場合、要求を受信するとnginxのは、サーバブロックのSERVER_NAMEパラメータに対してHostヘッダーと一致していることを私の理解ですと、 、それはそれを提供する。しかし、nginxは、Hostヘッダがapi.mysite.comと異なるサービス(リクエストを私のDjangoサーバに渡す)を試みているようです。 Djangoは(私の場合は['api.mysite.com']に設定されています)の設定を持っていて、Hostヘッダーの更なるチェックを行い、要求がHostのヘッダーと一致しないとエラーが発生します。これは、nginxがすでにこれをフィルタリングしているためです。

  • 無効HTTP_HOSTヘッダ:「/webapps/mysite/mysite.sock:」事は、私は次のようになりジャンゴによって発生したエラーを見ているということです。指定されたドメイン名は、RFC 1034/1035に従って有効ではありません。
  • 無効なHTTP_HOSTヘッダー:'testp1.piwo.pila.pl'。 ALLOWED_HOSTSに 'testp1.piwo.pila.pl'を追加する必要があるかもしれません。
  • 無効なHTTP_HOSTヘッダー:'xxx.xxx.xxx.xxx'(私のサーバーの実際のIP)。 ALLOWED_HOSTSに「xxx.xxx.xxx.xxx」を追加する必要があるかもしれません。私は、彼らがnginxのログに表示し、私はプロキシてるので、それが直接gunicornサーバーを打つために、とにかく不可能になるのでリクエストはnginxの経由来ていることを知っている

    物事のカップルUNIXソケット経由で、HTTP経由ではありません。

  • 私は、これらのリクエストはフリープロキシを探しているボットからのものだと知っていますが、それについてはあまり気にしません。私が本当に興味を持っているのは、Hostヘッダーが、私のgunicorn/nignx UNIXソケットのローカルファイルシステム上のパスに設定されているという要求です。

ヒント?

+0

nginxの既定のサイトはありますか?私は過去に、ホストがアルファベット順で最初に見つかったserver_namesのどれかにマッチしなかったときに問題が発生しました。 – cdvv7788

+1

http://nginx.org/en/docs/http/request_processing.html –

+0

@ cdvv7788私はデフォルトサーバを持っていないので、これはおそらくそれだと思います。私は今日の午後をチェックするつもりです。 – sanfilippopablo

答えて

0

nginxが一致するサーバーブロックに遭遇しない場合、最初のサーバーブロックに要求が送信されます。そのため、解決策は、次のようにすべてのリクエストを破棄するデフォルトのサーバーブロックを設定することでした:

server { 
    listen 80 default_server; 
    return 444; 
} 
関連する問題