Nginx(openresty)反向代理到 Apache 重定向问题

Nginx(openresty)反向代理到 Apache 重定向问题

我已经设置了一个反向代理,将请求从 nginx(openresty)发送到 apache,使用它只是为了允许通过 openresty 进行更多控制来检查请求,但本质上服务器是在 apache 上运行的。

问题是 apache 在端口 8080 上,而 nginx 在 80 上,所以每当 apache 进行重定向时,它都会重定向到端口 8080,而我还没有找到任何确凿的方法来阻止这种情况,而是让它转到端口 80。

我的 nginx 服务器配置如下

server {
  listen 80 default_server;
  server_name localhost;
  client_max_body_size 1024m;
  client_body_timeout 300s;

  location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

但尚未添加 lua。

对于 Apache 来说:

<VirtualHost *:8080>
  UseCanonicalName Off
  ServerName domain.com
  ServerAdmin [email protected]
  DocumentRoot /home/user1/environments/production
</VirtualHost>

<VirtualHost *:8080>
  ServerAlias *.*.domain.com
  VirtualDocumentRoot /home/%2/environments/%1
</VirtualHost>

<VirtualHost *:8080>
  ServerAlias *.domain.com
  VirtualDocumentRoot /home/%1/environments/production
</VirtualHost>

这有效,但是如果 apache 进行任何类型的重定向,它都会通过端口 8080 重定向。我实际上想关闭端口 8080 以防止通过 nginx 以外的任何方式访问,但通过 nginx,apache 应该像在端口 80 上运行一样运行。

答案1

经过一番尝试后,我注意到无论是否在 nginx 中使用代理,它都会重定向。

这表明一定存在某种缓存干扰,但我一直禁用浏览器缓存。

因此我不完全确定是什么修复了它,但我所更新的只是我的位置块,如下所示:

location / {
  proxy_redirect off;
  port_in_redirect off;
  proxy_pass http://127.0.0.1:8080;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-Host $http_host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_connect_timeout 90;
  proxy_send_timeout 90;
  proxy_read_timeout 90;
  proxy_buffer_size 16k;
  proxy_buffers 32 8k;
  proxy_busy_buffers_size 64k;
}

这是在谷歌上搜索了大约 6-8 个小时并尝试了各种方法之后的结果。在尝试清除所有内容并从 nginx 输出 hello world 后,我发现它仍在重定向。

尝试隐身窗口成功阻止了重定向,因此如果您尝试此解决方案,请不要依赖于禁用缓存,因为似乎只有隐身窗口才能阻止它在此实例中缓存重定向(至少在 Chrome 61 中)。此外,对服务器配置的其他更新也会生效,只是重定向不会生效。

我在想

proxy_redirect off;
port_in_redirect off;
proxy_set_header X-Forwarded-Host $http_host;

最有可能已经解决了原始问题。

相关内容