Nginx: connect () para xxx.xxx.xxx.184: 3000 falhou (22: argumento inválido) ao conectar-se ao upstream,

1

Esta é a primeira vez que faço perguntas sobre o serverfault. Se eu sentir falta de algo, por favor me avise!

Estou tentando resolver esse problema há dois dias. Ainda não consegue encontrar uma solução. Aqui está o meu cenário:

Servidor A

  • Aplicativo do nó A na porta 3000
  • Nginx na porta 80
  • quando vou para /hello , o aplicativo B deve ser exibido no servidor B

Servidor B

  • Aplicativo do nó B na porta 3000

Quando visito /hello , recebo 502 Bad Gateway .

No meu log de erros, vejo isto:

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"

Aqui está meu conf nginx para o servidor 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;
  }
}

No meu /etc/sysctl.conf , adicionei:

net.ipv4.ip_nonlocal_bind=1

para permitir que os processos se vinculem ao endereço não local, porque anteriormente recebi este erro:

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"

Qualquer orientação ou ajuda seria muito apreciada! Obrigada!

Editar 1

Minha nova configuração do 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;
        }
}

Editar 2

Servidor A

  • link
  • este servidor serve appA
  • quando vou para / , devo ver SSR Landing Page , que é servido de appA
  • quando vou para /hello , supostamente verei hello , que é servido no servidor B. Mas, em vez disso, recebi There is no route for the path: /hello no console do navegador e não vi nenhuma solicitação para o servidor B

Servidor B

  • link
  • este servidor serve appB
  • quando vou para /hello , vejo a página.

Peço desculpas por alterar o endereço do servidor com tanta frequência.

    
por sammkj 02.06.2016 / 07:08

1 resposta

0

Você realmente deseja que as solicitações de saída para o servidor B se originem em 162.243.104.184 ? Das informações que você forneceu, não vejo necessidade disso e, portanto, a instrução proxy_bind não é necessária e, na verdade, causa apenas problemas.

proxy_bind atribui 162.243.104.184 como o endereço IP de origem para as solicitações ao servidor B e, portanto, o servidor B envia respostas de volta para esse endereço IP, ou seja, de volta para si mesmo.

Em seguida, se você quiser que as solicitações de /hello sejam http://162.243.104.184:3000/ , adicione uma diretiva rewrite para alterar o URI:

rewrite /hello(.*) /$1 last;
    
por 02.06.2016 / 07:41