Как устранить ошибку 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:
- Проверьте конфигурацию nginx:
nginx -t
- Проверить розетку:
netstat --protocol=unix -nlp | grep alpasso-wsgi.socket
- Проверьте, работает ли приложение:
curl --unix-socket /tmp/alpasso-wsgi.sock http:/your-path-on-app
(Должен быть HTML-код на экране)
Если нет, проверьте свое приложение. Если да:
Проверить журнал ошибок nginx
sudo tail -f /var/log/nginx/error.log
- Если вы получаете ошибку разрешений 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
- Я считаю, что ACL лучше для безопасности. Потому что вы даете права nginx только на один файл, а не на все файлы, принадлежащие группе.