Назад | Перейти на главную страницу

Nginx: connect () к xxx.xxx.xxx.184: 3000 не удалось (22: недопустимый аргумент) при подключении к восходящему потоку,

Я впервые задаю вопрос о сбое сервера. Если я что-то пропущу, дайте мне знать!

Уже два дня пытаюсь решить эту проблему. Все еще не могу найти решение. Вот мой сценарий:

Сервер А

Сервер 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

Сервер А

Сервер B

Прошу прощения за частую смену адреса сервера.

Вы действительно хотите, чтобы исходящие запросы к серверу 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;