我有两个 OpenVZ 容器,它们在通过 LAN 连接的两个不同服务器上运行 Centos 7.9。第一个容器运行我的后端应用程序,第二个容器我想运行 nginx (nginx/1.27.0) 作为该应用程序的反向代理。第一个容器的 IP 为 192.168.168.1,第二个容器的 IP 为 192.168.168.2,因此我尝试运行 nginx 并使用“proxy_pass”指令将位置配置为 192.168.168.1
但它对我不起作用。如果我将第二个容器(其中运行着 nginx)中的任何 IP(如 127.0.0.1、192.168.168.2 或来自 WAN 连接的 IP)用于 proxy_pass 指令,它就可以正常工作。当然,它适用于我必须在第二个容器上运行的应用程序副本,以测试这一点。
但是当我将“proxy_pass”指令的目标更改为 192.168.168.1 或 WAN IP 从我的第一个容器时,却不行。
我得到了 Bad Gateway 错误。有趣的是,在禁用防火墙的情况下,我无法使用 tcpdump 看到 nginx 应该尝试发送到我给他的目的地的单个数据包。似乎 nginx 不接受任何外部 IP 作为目标。
也许我只是错过了什么,但我在 nginx 日志和文档中没有找到任何线索。
为了验证没有任何端口被阻塞或类似情况,我在第二个容器(nginx 所在的容器)上启动了一个带有以下参数的简单代理:
simpleproxy -L 127.0.0.1:8011 -R 192.168.168.1:8012
它监听端口 8011,并将请求代理到我的第一个容器上的端口 8012,我的应用程序就在那里。然后我为 proxy_pass 127.0.0.1:8011 指定了 nginx 目标,一切正常。
我的 nginx 配置的一部分:
upstream dev02_relay {
server 192.168.168.1:8012 fail_timeout=10s; #it does not work
#server 127.0.0.1:8011 fail_timeout=10s;
}
location / {
proxy_cache dev02-relay;
proxy_cache_valid 200 302 5m;
proxy_cache_valid 404 1m;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_pass http://dev02_relay;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
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 Proxy "";
add_header X-Cache-Status $upstream_cache_status;
}
并且 nginx 错误日志 sais :2024/11/04 13:27:57 [crit] 171248#171248: *16 connect() to 192.168.168.1:8012 failed (22: Invalid parameters) while connecting to upper, …
如果我仅将 proxy_pass 的目标 IP 更改为本地 IP 之一 – 一切就正常。
2
–
–
|