私はnginxとgunicornでDjangoプロジェクトを設定する作業をしています。 nginxサーバーのポートgunicorn mysite.wsgi:application --bind=127.0.0.1:8001
にアクセスしていると、エラーログファイルに次のエラーが記録されます。
2014/05/30 11:59:42 [crit] 4075#0: *6 connect() to 127.0.0.1:8001 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8001/", Host: "localhost:8080"
私のnginx.conf
ファイル
server {
listen 8080;
server_name localhost;
access_log /var/log/nginx/example.log;
error_log /var/log/nginx/example.error.log;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_Host;
}
}
HTMLページで私は502 Bad Gateway
を得ています。
私はどんな間違いをしていますか?
私はFedora 20、Nginx、Node.js、そしてGhost(blog)を動かすのに似たような問題を抱えていました。私の問題はSELinuxが原因であることがわかりました。
これで問題は解決するはずです。
setsebool -P httpd_can_network_connect 1
SELinuxログでエラーをチェックしました。
Sudo cat /var/log/audit/audit.log | grep nginx | grep denied
そして、次のコマンドを実行すると問題が解決することがわかりました。
Sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
Sudo semodule -i mynginx.pp
参考文献:
http://blog.frag-gustav.de/2013/07/21/nginx-selinux-me-mad/
https://wiki.gentoo.org/wiki/SELinux/Tutorials/Where_to_find_SELinux_permission_denial_details
http://wiki.gentoo.org/wiki/SELinux/Tutorials/Managing_network_port_labels
私もこの問題に遭遇しました。別の解決策は、httpdネットワーク接続のSELinuxブール値をon
に切り替えることです(Nginxはhttpdラベルを使用します)。
setsebool httpd_can_network_connect on
変更を持続させるには、-Pフラグを使用してください。
setsebool httpd_can_network_connect on -P
Httpdで利用可能なすべてのSELinuxブール値のリストを見ることができます。
getsebool -a | grep httpd
Centos 7で同様の問題がありました。Sorinが指定した解決策を適用しようとしたとき、私は周期的に動き始めました。最初に私は許可を拒否しました{write}。それから私が許可を持っていたことを解決したとき{connectto}は否定されました。それから再び許可{write}に戻って拒否されました。
getsebool -a | grep httpd
を使用してフラグをチェックし、それらを切り替えるという上記の@Sidの答えに従って、httpd_can_network_connectがオフになっていることに気付きました。 http_anon_writeもオフになっているため、書き込みが拒否され、接続が拒否されました{connectto}
type=AVC msg=audit(1501830505.174:799183): avc:
denied { write } for pid=12144 comm="nginx" name="myroject.sock"
dev="dm-2" ino=134718735 scontext=system_u:system_r:httpd_t:s0
tcontext=system_u:object_r:default_t:s0 tclass=sock_file
Sudoを使って取得しました。 grep nginx | grepは上記のように拒否されました。
だから私は一度に一つずつフラグを切り替えながら、一度に一つずつそれらを解決しました。
setsebool httpd_can_network_connect on -P
それから上記の@sorinと@Josephで指定されたコマンドを実行します。
Sudo cat /var/log/audit/audit.log | grep nginx | grep denied |
audit2allow -M mynginx
Sudo semodule -i mynginx.pp
基本的にはsetseboolに設定されたパーミッションをチェックし、それをgrepp'ing 'audit.log nginxから得られたエラーと相関させることができます。
現在の作業ユーザーとしてnginxを実行することで問題を解決しました。mulagala
。デフォルトのユーザーはnginx.conf
ファイルのnginx
です。この行はnginx.conf
ファイルの先頭にあります。
user nginx;
これを現在の作業ユーザー名に変更してください。
user mulagala;
「502 Bad Gateway」エラーがnginxのAPIゲートウェイプロキシパスのCentOS API URLでスローされた場合、次のコマンドを実行して問題を解決します
Sudo setsebool -P httpd_can_network_connect 1
私もこの問題に遭遇しました。私はHginでNginxを使用していますが、以下の解決方法で問題が解決しました。
Sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"
Sudo restorecon -R -v /etc/nginx/fastcgi_temp
CentOSサーバー上のアップストリームnginxへの接続中に13許可が拒否されました-
setsebool -P httpd_can_network_connect 1
おかげで、みんな:)今私は私のキバナURLにNginxプロキシを使用することができます
本当に便利なコマンド:) setsebool -P httpd_can_network_connect 1
/etc/nginx/nginx.conf
でユーザーを確認してくださいSudo chown -R nginx:nginx /var/lib/nginx
今魔法を見なさい。