
説明:
[server 1] <-|-> [server 2]
[Apache] <-|-> [nginx <--> gunicorn <--> django]
Apache はサーバー 1 で実行されており、1 つのサブドメインのみをサーバー 2 に自動的にリダイレクトします。何らかの理由で、nginx は 301 moved permanently を返し、サーバー 2 の実際の IP にリダイレクトします。
サーバー 1 の設定 - Apache
RewriteCond %{HTTP_HOST} ^subdomain\.domain\.com$
RewriteRule (.*) http://123.456.789.000/$1 [P,L]
サーバー 2 の設定 - nginx
server {
listen 80;
# I put the 'subdomain.domain.com' name here while trying to fix the issue.
server_name subdomain.domain.com 123.456.789.000;
location / {
proxy_pass_header Server;
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 10;
proxy_read_timeout 10;
proxy_pass http://localhost:8000/;
}
X-Real-IP
gunicorn を処理するように設定されている nginx のプロキシ設定に問題があることは確かです。残念ながら、どのヘッダーが原因なのかを知るほどの経験はありません。また、との違いもよくわかりませんX-Forwarded-For
。
編集:
上記のサーバー ブロック内のこの場所で処理される静的ファイルは、サーバー 2 のローカル IP にリダイレクトされることなく、サーバー 1 ドメインから問題なくアクセスできます。
location /static {
autoindex on;
alias /var/www/django/static;
}