私はサイトをこのように設定しています: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ソケットのローカルファイルシステム上のパスに設定されているという要求です。
ヒント?
nginxの既定のサイトはありますか?私は過去に、ホストがアルファベット順で最初に見つかったserver_namesのどれかにマッチしなかったときに問題が発生しました。 – cdvv7788
http://nginx.org/en/docs/http/request_processing.html –
@ cdvv7788私はデフォルトサーバを持っていないので、これはおそらくそれだと思います。私は今日の午後をチェックするつもりです。 – sanfilippopablo