nginx 将来自 apache 代理的请求重定向到真实服务器地址

nginx 将来自 apache 代理的请求重定向到真实服务器地址

描述:

[server 1] <-|-> [server 2]
[Apache]   <-|-> [nginx <--> gunicorn <--> django]

Apache 在服务器 1 上运行,它会默默地将一个子域名重定向到服务器 2。由于某种原因,nginx 返回 301 永久移动并重定向到服务器 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/;
  }

我确信 nginx 中用于处理 gunicorn 的代理配置有问题。不幸的是,我没有足够的经验来知道哪些标头会导致这种情况。而且我真的不知道X-Real-IP和之间有什么区别X-Forwarded-For

编辑:

可以从服务器 1 域正常访问上述服务器块中此位置处理的静态文件,而无需重定向到服务器 2 的本地 IP。

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

相关内容