Nginx的Permission denied錯誤
環境: CentOS7
問題描述
今天搭建了nginx+uwsgi+django的環境,之后通過瀏覽器訪問遇到下面問題:
2017/03/31 19:38:13 [crit] 191969#191969: *5 connect() to 127.0.0.1:8000 failed (13: Permission denied) while connecting to upstream, client: 192.168.0.10, server: localhost, request: "GET /admin HTTP/1.1", upstream: "uwsgi://127.0.0.1:8000", host: "192.168.0.20:8080"
上面來自/var/log/nginx/error.log。
原因
通過ps命令查看nginx進程為用戶nginx,而uwsgi進程為用戶root。估計是權限不一致導致nginx無法訪問uwsgi進程(socket方式通信)。
所以修改nginx的配置文件/etc/nginx/nginx.conf,把user選項從nginx改成root。之后執行重啟命令systemctl restart nginx。
再次打開瀏覽器訪問django,發現仍然不行。(+﹏+)~狂暈
上網繼續調查,發現還有一個原因可能引起這個問題,那就是selinux,執行下面命令:
setsebool -P httpd_can_network_connect 1
然后重新訪問瀏覽器,發現可以打開頁面了。如果還不行就徹底一些,關閉selinux:
setenforce 0
O(∩_∩)O哈哈~,終於搞定了。
One More Thing
在stackoverflow網站看到一個回復是說使用root運行uwsgi還是不太好的,建議使用一個和nginx相同的普通賬戶運行。例如:
uwsgi -s /tmp/uwsgi.sock -w my_app:app --uid www-data --gid www-data
@完
參考:
