我已经设置了一个反向代理,将请求从 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;
最有可能已经解决了原始问题。