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

После обновления с ubuntu 14.04 до 16.04 ошибка nginx 502: плохой шлюз до перезапуска nginx

Я исследовал эту проблему, но в большинстве случаев причиной ошибки 502 является неправильно настроенный nginx.conf или вышестоящая служба. Я считаю, что это другое ...

Как следует из названия, я обновил сервер Ubuntu с 14.04 до 16.04. Я использую nginx в качестве своего веб-сервера, а также использую сервер java / tomcat, настроенный в моей конфигурации nginx как proxy_pass.

После обновления каждый раз, когда сервер запускается, nginx отображает ошибку 502: Bad Gateway при попытке подключиться к сайту proxy_pass. Все остальные сайты, указанные в моей конфигурации, работают должным образом.

Возможно ли, что порядок, в котором запущены службы, может вызвать постоянную ошибку 502?

Чтобы решить проблему, я должен sudo systemctl restart nginx, после чего служба proxy_pass работает как положено, до следующей перезагрузки.

Из 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"

В то время, когда эта ошибка была сгенерирована nginx, я мог использовать lynx с этого сервера для подключения к localhost: 4040 / radio, и мне был предоставлен соответствующий контент. Даже после этого остается ошибка 502 при подключении через nginx.

Для этого не существует определенного восходящего блока, однако блок местоположения:

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"
}

Я не хочу перезапускать nginx каждый раз при загрузке. Как я могу решить эту проблему?

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

Ваш апстрим, вероятно, слушает только IPv4 localhost (127.0.0.1:4040), тогда как nginx пытается подключиться к локальному хосту IPv6 ([::1]:4040).

lynx работает, потому что пытается и то, и другое.

УГАДАЙ: nginx может будет терпеть неудачу, потому что он пробует оба вначале, оба терпят неудачу, затем он придерживается IPv6 с этого момента.

ИСПРАВЛЕНИЕ: изменить исходный поток для использования 127.0.0.1 явно или измените восходящий поток для прослушивания как IPv4, так и IPv6.