我正在使用运行端口 80 和 443 的 Ubuntu 16.04 和 Nginx。我使用 Proxy_Pass 将流量转发到监听端口 8080 的 Apache。Nginx 和 Apache 都在同一台服务器上。
问题是 Nginx 似乎无法将流量转发到 Apache。我收到 504 网关超时错误。我可以确认 Apache 正在运行并在端口 8080 上接收流量。
我在我的设置中广泛使用 proxy_pass。转发到另一台服务器上的 8080 端口上的 Apache 的流量运行正常。我唯一的问题是 Apache 与 Nginx 在同一台服务器上运行。
我尝试设置 Apache listen 8080
,listen 127.0.0.1:8080
但出现同样的错误。
在 Nginx 中我使用了proxy_pass http://localhost:8080;
和proxy_pass http://127.0.0.1:8080
,但结果是一样的。
我发现的唯一不同之处在于,如果我netstat -tulpn
在 Apache 使用时运行listen 8080
,端口 8080 只会在 tcp6 中显示为:::8080
。它似乎没有在 tcp(IPv4)中打开。但是listen 127.0.0.1:8080
tcp(IPv4)专门打开,但在 tcp6 中不再打开。如果我理解正确的话,它应该在 IPv4 和 IPv6 上都打开,本地地址在 IPv4 和IPv6 中127.0.0.1:8080
都显示为 。0.0.0.0:8080
:::8080
请注意,防火墙未启用。
我尝试检查我的配置,但无济于事。如果我将其转发到其他服务器,我的设置就可以正常工作。我认为这与端口或绑定有关?但我似乎找不到答案。一直在谷歌搜索,但找不到解决方案。
希望有人知道我做错了什么。
谢谢。
答案1
如果您尝试连接到 127.0.0.1:8080 上的 apache,则需要确保 apache 正在专门监听 IPv4,因为您尝试使用 IPv4 连接到它。
如果您想使用 IPv6,请在反向代理上指定 IPv6 地址。