Após a atualização do Ubuntu 14.04 para 16.04, erro nginx 502: gateway inválido até que o nginx seja reiniciado

3

Eu pesquisei esse problema, mas na maioria dos casos a causa do erro 502 é um serviço nginx.conf ou upstream configurado incorretamente. Eu acredito que isso é diferente ..

Como o título sugere, eu atualizei o servidor Ubuntu 14.04 para 16.04. Eu uso o nginx como meu servidor web, e também estou executando um servidor java / tomcat, configurado na configuração nginx como proxy_pass.

Desde a atualização, toda vez que o servidor é iniciado, o nginx exibe o erro 502: Bad Gateway ao tentar se conectar ao site proxy_pass. Todos os outros sites especificados na minha configuração funcionam conforme o esperado.

É possível que a ordem na qual os serviços são iniciados possa causar um erro persistente de 502?

Para resolver o problema, devo sudo systemctl restart nginx , após o qual o serviço proxy_pass funciona como esperado, até a próxima reinicialização.

Do error.log:

2018/01/24 11:33:20 [error] 1886#1886: *202 connect() failed (111: Connection refused) while connecting to upstream, client: 10.0.0.1, server: localhost, request: "GET /radio/rest2/savePlayQueue.view?u=user&p=enc:xxxxxxxx&v=2.0.0&c=DSub&id=0000&current=0000&position=0 HTTP/1.1", upstream: "http://[::1]:4040/radio/rest2/savePlayQueue.view?u=user&p=enc:xxxxxxxx&v=2.0.0&c=DSub&id=0000&current=0000&position=0", host: "www.myhostname.tld"

No momento em que esse erro foi gerado pelo nginx, consegui usar o lynx desse servidor para conectar-me ao localhost: 4040 / radio e recebi o conteúdo apropriado. Mesmo depois disso, o erro 502 permanece ao se conectar através do nginx.

Não há bloco upstream definido para isso, no entanto, o bloco de localização é:

location ^~ /radio/ {
        proxy_pass              http://localhost:4040;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version      1.1;
        proxy_set_header        Connection      "";
#        health_check;       # nginx: [emerg] unknown directive "health_check"
}

Eu não quero ter que reiniciar o nginx toda vez que eu inicializo. Como posso resolver este problema?

    
por chrismeu 24.01.2018 / 19:03

1 resposta

2

upstream: "http://[::1]:4040/…

Seu upstream provavelmente está escutando apenas o host local IPv4 ( 127.0.0.1:4040 ), enquanto o nginx está tentando se conectar ao host local IPv6 ( [::1]:4040 ).

o lynx funciona porque tenta os dois.

GUESS: nginx may está falhando porque tenta ambos no início, ambos falham, então ele fica com o IPv6 a partir daí.

CORREÇÃO: altere o upstream para usar 127.0.0.1 explicitamente ou altere o upstream para escutar no IPv4 e no IPv6.

    
por 24.01.2018 / 20:04