nginx は Apache プロキシからのリクエストを実際のサーバー アドレスにリダイレクトします

nginx は Apache プロキシからのリクエストを実際のサーバー アドレスにリダイレクトします

説明:

[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-IPgunicorn を処理するように設定されている nginx のプロキシ設定に問題があることは確かです。残念ながら、どのヘッダーが原因なのかを知るほどの経験はありません。また、との違いもよくわかりませんX-Forwarded-For

編集:

上記のサーバー ブロック内のこの場所で処理される静的ファイルは、サーバー 2 のローカル IP にリダイレクトされることなく、サーバー 1 ドメインから問題なくアクセスできます。

  location /static {
    autoindex on;
    alias /var/www/django/static;
  }

関連情報