我有两个 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

  • 你的容器上启用了 SELinux 吗?


    – 

  • 否。Selinux 已被禁用。


    – 

0