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


296

NginxとGunicornでDjangoプロジェクトを構成しています。

gunicorn mysite.wsgi:application --bind=127.0.0.1:8001Nginxサーバーのポートにアクセスしているときに、エラーログファイルに次のエラーが表示されます。

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、リクエスト:「GET / HTTP / 1.1」、アップストリーム:"http://127.0.0.1:8001/"、ホスト:「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ます。

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

回答:


680

Fedora 20、Nginx、Node.js、Ghost(ブログ)を機能させるための同様の問題がありました。私の問題は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


22
おかげで、あまりにも私の問題を修正しましたことを、私はCentOSの7上だ
ジャハーン

21
ありがとう。最初yum install policycoreutils-pythonに取得する必要がありましたaudit2allow。参照:centos.org/forums/viewtopic.php
t

ノードサーバーを使用することで、本当にありがとうございました。(Redhat 7)
BlaShadow 2014年

こちらもご覧ください。私の場合、ホームディレクトリにwwwrootが保存されているユーザーのグループにnginxを追加する必要がありました。

1
Fedora 23では、インストールpolicycoreutils-pythonはコマンドを提供しませんでしたaudit2allow。調査の結果、develパッケージをインストールする必要があることがわかりましたyum install policycoreutils-devel。参照:danwalsh.livejournal.com/61710.html
Joseph N.

182

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

1
これはうまくいきました。CentOS 6.5-> 6.7からアップデートしましたが、アップデート前は問題なく機能していたため、アップデート中にデフォルトでオフになっているはずです。簡単な修正。
Mike Purcell

16

Centos 7でも同様の問題がありました。Sorinによって規定されたソリューションを適用しようとしたとき、私は周期的に動き始めました。最初に、許可{書き込み}が拒否されました。その後、私が許可したことを解決したとき、{connectto}が拒否されました。その後、再度アクセス許可{書き込み}が拒否されました。

上記の@Sidの回答に続いて、フラグを使用getsebool -a | grep httpdしてフラグをチェックすることで、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 cat /var/log/audit/audit.logを使用して取得| 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から取得したエラーと関連付けることができますが、拒否されました


14

現在ログインしているユーザーmulagalaとしてNginxを実行することで問題を解決しました

デフォルトでは、nginxとしてのユーザーは、nginx.conf次のようにファイルの最上部に定義されています。

user nginx; # Default Nginx user

変更nginxのあなたの現在のユーザーの名前に-ここでは、mulagala

user mulagala; # Custom Nginx user (as username of the current logged in user)

ただし、これは実際の問題に対応していない可能性があり、実際には偶発的な副作用がある可能性があります。

効果的なソリューションについては、Joseph Barbereのソリューションを参照してください。


これを助けてくれてありがとう
オーバーロード

4

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

sudo setsebool -P httpd_can_network_connect 1

2

CentOSサーバーの13-permission-denied-while-connecting-to-upstreamnginx-

setsebool -P httpd_can_network_connect 1


1

私もこの問題に遭遇しました。NginxとHHVMを使用していますが、以下の解決策で問題が解決しました:

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

sudo restorecon -R -v /etc/nginx/fastcgi_temp

1
  1. ユーザーをチェックインする /etc/nginx/nginx.conf
  2. 所有権をユーザーに変更します。
sudo chown -R nginx:nginx /var/lib/nginx

魔法を見てください。


0

どうもありがとうございます。私はこのガイドを適用しました:Centos 7、AspNet Core 3.1、Nginxセットアップ。


0

答えてくれてありがとう。19年8月21日12:14のKumarの答えは、私が抱えていた問題のトラブルシューティングを数日行った後、私に一休みを与えました。

connect() to 127.0.0.1:9090 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server

私が適用した解決策は次のとおりです:

setsebool -P httpd_can_network_connect 1

-3
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx

sudo semodule -i mynginx.pp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.