这是我第一次问serverfault问题。 如果我错过了什么,请让我知道!
我一直在试图解决这个问题两天了。 还是找不到解决办法。 这是我的场景:
服务器A
/hello ,应用程序B应该从服务器B服务 服务器B
当我访问/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
/ ,我应该看到从appA服务的SSR Landing Page /hello ,我应该看到从服务器B服务hello 。但相反,我There is no route for the path: /hello在浏览器控制台,我没有看到任何请求服务器B 服务器B
/hello ,我看到的页面。 我很抱歉,经常更改服务器地址。
你真的想要传出的请求到服务器B源于162.243.104.184 ? 从你提供的信息来看,我认为没有必要,因此proxy_bind语句是不需要的,实际上只会产生问题。
proxy_bind将162.243.104.184作为请求的源IP地址分配给服务器B,因此服务器B将回复发送回该IP地址,即回到自己。
那么,如果你想把/hello的请求转到http://162.243.104.184:3000/ ,你需要添加一个rewrite指令来改变这个URI:
rewrite /hello(.*) /$1 last;