Как устранить ошибку Nginx "proxy_pass 502 Bad Gateway"

Я пытаюсь добавить proxy_set_header в мой файл nginx.conf. Когда я пытаюсь добавить proxy_pass и вызвать URL, выдается ошибка 502 Bad Gateway nginx/1.11.1.

Не уверен, как решить эту ошибку:

upstream app-server {
    # connect to this socket
    server unix:///tmp/alpasso-wsgi.sock;    # for a file socket
}

server {
    server_name <name>;

    listen 80 default_server;

    # Redirect http to https
    rewrite ^(.*) https://$host$1 permanent;
}

server {
    server_name <name>;

    listen 443 ssl default_server;

    recursive_error_pages on;

    location /azure{
        proxy_pass http://app-server;
    }

    ssl on;
    ssl_certificate      /etc/nginx/server.crt;
    ssl_certificate_key  /etc/nginx/server.key;
    ssl_client_certificate /etc/nginx/server.crt;
    ssl_verify_client optional;
}

4 ответа

У вас была похожая проблема с proxy_pass, если ваш Linux-сервер использует SELINUX, вы можете попробовать это.

setsebool -P httpd_can_network_connect true

Обратитесь к ответу Уоррена: https://unix.stackexchange.com/questions/196907/proxy-nginx-shows-a-bad-gateway-error

502 отправляется, когда ваш апстрим недоступен.

Попробуй включить error log и вы можете увидеть failed to connect to upstreamДля этого нужно проверить, upstream сервер работает или нет, sudo service upstream statusи попробуйте включить это.

Прокси-сервер Nginx с устранением неполадок сокета unix:

  1. Проверьте конфигурацию nginx:
      nginx -t
  1. Проверить розетку:
      netstat --protocol=unix -nlp | grep alpasso-wsgi.socket
  1. Проверьте, работает ли приложение:
      curl --unix-socket /tmp/alpasso-wsgi.sock http:/your-path-on-app

(Должен быть HTML-код на экране)

  1. Если нет, проверьте свое приложение. Если да:

  2. Проверить журнал ошибок nginx

      sudo tail -f /var/log/nginx/error.log
  1. Если вы получаете ошибку разрешений nginx, проверьте права пользователя nginx для сокета:

Определите, какое имя пользователя использует nginx:

      ps aux | grep nginx

И, например, если пользователь nginx является www-data, предоставьте пользователю www-data необходимые права. Добавить пользователя www-data в нужную группу:

      sudo usermod -a -G your-socket-file-group www-data 

и проверьте разрешения файла сокета или используйте ACL:

      sudo setfacl -R -m u:www-data:rwX /path-to-your-unix-socket
sudo setfacl -Rd -m u:www-data:rwX /path-to-your-unix-socket
  1. Я считаю, что ACL лучше для безопасности. Потому что вы даете права nginx только на один файл, а не на все файлы, принадлежащие группе.

Пытаться:

location /azure {
    proxy_pass appserver;
}
Другие вопросы по тегам