UNIXソケットでDjangoアプリを提供するようにuWSGIを構成し、このソケットのプロキシとしてNginxを構成しました。サーバーはCentOS7を実行しています。uWSGIのソケットへの読み取りと書き込みの権限を持つようにNginxを構成したと思いますが、それでも権限拒否エラーが発生します。NginxがCentOS7のuWSGIソケットにアクセスできないのはなぜですか?
[uwsgi]
socket=/socket/uwsgi.sock
virtualenv=/home/site/virtsite/
chdir=/home/site/wsgitest/
module=wsgitest.wsgi:application
vhost = true
master=True
workers=8
chmod-socket=666
pidfile=/home/site/wsgitest/uwsgi-master.pid
max-requests=5000
chown-socket=nginx:nginx
uid = nginx
gid = nginx
listen.owner = nginx
listen.group = nginx
server {
listen 80;
location / {
uwsgi_pass unix:///home/site/wsgitest/uwsgi.sock;
include uwsgi_params;
}
}
uwsgi --ini uwsgi.ini (as root)
ls -l /home/site/wsgitest/uwsgi.sock
srwxrwxrwx. 1 nginx nginx 0 Oct 13 10:05 uwsgi.sock
2014/10/12 19:01:44 [crit] 19365#0: *10 connect() to unix:///socket/uwsgi.sock failed (13: Permission denied) while connecting to upstream, client: 2.191.102.217, server: , request: "GET / HTTP/1.1", upstream: "uwsgi://unix:///socket/uwsgi.sock:", host: "179.227.126.222"
NginxとuWSGIの構成は正しいです。問題は、SELinuxがソケットへのNginxアクセスを拒否したことです。これにより、Nginxのログに一般的なアクセス拒否エラーが発生します。重要なメッセージは実際にはSELinuxの監査ログにあります。
# show the new rules to be generated
grep nginx /var/log/audit/audit.log | audit2allow
# show the full rules to be applied
grep nginx /var/log/audit/audit.log | audit2allow -m nginx
# generate the rules to be applied
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
# apply the rules
semodule -i nginx.pp
生成できるのは最初のSELinuxエラーだけではない可能性があるため、パスごとにサイトにアクセスしようとして、ルールを複数回生成する必要がある場合があります。audit2allow
作成を提案するポリシーを常に確認してください。
これらの手順は、調査方法と取得する出力の詳細が記載されているこのブログ投稿から取得したものです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加