web-dev-qa-db-ja.com

(13:許可が拒否されました)アップストリームへの接続中:[nginx]

私は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を得ています。

私はどんな間違いをしていますか?

229
Mulagala

私は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

http://www.linuxproblems.org/wiki/Selinux

512
joebarbere

私もこの問題に遭遇しました。別の解決策は、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
165
Sid

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から得られたエラーと相関させることができます。

12
unlockme

現在の作業ユーザーとしてnginxを実行することで問題を解決しました。mulagala。デフォルトのユーザーはnginx.confファイルのnginxです。この行はnginx.confファイルの先頭にあります。

user nginx;

これを現在の作業ユーザー名に変更してください。

user  mulagala;
10
Mulagala

「502 Bad Gateway」エラーがnginxのAPIゲートウェイプロキシパスのCentOS API URLでスローされた場合、次のコマンドを実行して問題を解決します

Sudo setsebool -P httpd_can_network_connect 1
1
Ezhil Arasan

私もこの問題に遭遇しました。私はHginでNginxを使用していますが、以下の解決方法で問題が解決しました。

Sudo semanage fcontext -a -t httpd_sys_rw_content_t "/etc/nginx/fastcgi_temp(/.*)?"

Sudo restorecon -R -v /etc/nginx/fastcgi_temp
1
sule

CentOSサーバー上のアップストリームnginxへの接続中に13許可が拒否されました-

setsebool -P httpd_can_network_connect 1

0
kumar

おかげで、みんな:)今私は私のキバナURLにNginxプロキシを使用することができます

本当に便利なコマンド:) setsebool -P httpd_can_network_connect 1

0
Abhishek Jalan
  1. /etc/nginx/nginx.confでユーザーを確認してください
  2. 所有権をユーザーに変更します。
Sudo chown -R nginx:nginx /var/lib/nginx

今魔法を見なさい。

0