Я впервые задаю вопрос о сбое сервера. Если я что-то пропущу, дайте мне знать!
Уже два дня пытаюсь решить эту проблему. Все еще не могу найти решение. Вот мой сценарий:
Сервер А
/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"
Вот моя конфигурация nginx для Сервера A:
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
Моя новая конфигурация nginx:
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
Сервер А
/
, Я должен увидеть SSR Landing Page
который обслуживается из appA/hello
, Я должен увидеть hello
который обслуживается с сервера B. Но вместо этого я получил 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;