Nginx:连接()到xxx.xxx.xxx.184:3000失败(22:无效参数),当连接到上游时,

这是我第一次问serverfault问题。 如果我错过了什么,请让我知道!

我一直在试图解决这个问题两天了。 还是找不到解决办法。 这是我的场景:

服务器A

  • 节点应用程序A在端口3000上
  • Nginx在80端口
  • 当我去/hello ,应用程序B应该从服务器B服务

服务器B

  • 节点应用程序B在端口3000上

当我访问/hello ,我得到502 Bad Gateway

在我的错误日志中,我看到这个:

 connect() to 162.243.104.184:3000 failed (22: Invalid argument) while connecting to upstream, client: 75.72.170.8, server: 107.170.64.149, request: "GET /hello/ HTTP/1.1", upstream: "http://162.243.104.184:3000/hello/", host: "107.170.64.149" 

这是我的服务器A的nginx conf:

 server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name 107.170.64.149; location / { proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_pass http://107.170.64.149:3000; proxy_redirect off; } location /hello { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_set_header Host $host; proxy_pass http://162.243.104.184:3000; proxy_bind 162.243.104.184; proxy_redirect off; } } 

在我的/etc/sysctl.conf ,我添加了:

net.ipv4.ip_nonlocal_bind=1

允许进程绑定到非本地地址,因为我以前得到这个错误:

 bind(162.243.104.184) failed (99: Cannot assign requested address) while connecting to upstream, client: 75.72.170.8, server: 107.170.64.149, request: "GET /hello/ HTTP/1.1", upstream: "http://162.243.104.184:3000/hello/", host: "107.170.64.149" 

任何指导或帮助将不胜感激! 谢谢!

编辑1

我的新的nginxconfiguration:

 server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name 107.170.39.161; location / { proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_pass http://107.170.39.161:3000; proxy_redirect off; } location /hello { rewrite /hello(.*) /$1 last; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_set_header Host $host; proxy_pass http://162.243.33.9:3000; proxy_redirect off; } } 

编辑2

服务器A

  • http://107.170.113.66/
  • 这个服务器提供appA
  • 当我去/ ,我应该看到从appA服务的SSR Landing Page
  • 当我去/hello ,我应该看到从服务器B服务hello 。但相反,我There is no route for the path: /hello在浏览器控制台,我没有看到任何请求服务器B

服务器B

  • http://107.170.98.207:3000/
  • 这个服务器提供appB
  • 当我去/hello ,我看到的页面。

我很抱歉,经常更改服务器地址。

你真的想要传出的请求到服务器B源于162.243.104.184 ? 从你提供的信息来看,我认为没有必要,因此proxy_bind语句是不需要的,实际上只会产生问题。

proxy_bind162.243.104.184作为请求的源IP地址分配给服务器B,因此服务器B将回复发送回该IP地址,即回到自己。

那么,如果你想把/hello的请求转到http://162.243.104.184:3000/ ,你需要添加一个rewrite指令来改变这个URI:

 rewrite /hello(.*) /$1 last;