錯誤來源:Centos 7 上使用nginx為Node.js配置反向代理時產生(13: Permission denied) while connecting to upstream的錯誤
nginx配置文件內容如下:
upstream node_server { server 127.0.0.1:5000 max_fails=3 fail_timeout=4s; server 127.0.0.1:5001 max_fails=3 fail_timeout=4s; } server { listen 80 default_server; listen [::]:80 default_server; index index.html index.htm; server_name _; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; proxy_buffer_size 16k; proxy_buffers 4 32k; proxy_pass http://node_server; } location /public/ { root /opt/app; } }
使用Node.js靜態文件交由nginx管理,而動態的請求有Node.js處理(app.js需要重新配置),配置成功后分別啟動nginx服務和Node.js服務,訪問http:127.0.0.1出現 502 服務器端錯誤,
查閱各種資料發雖然有nginx在反向代理配置時雖然有出現此類錯誤,但並沒有解決問題。
查看nginx錯誤日志:
cat /var/log/nginx/error.log
發現錯誤:failed (13: Permission denied) while connecting to upstream
原因及解決方案:問題是由SElinux導致,查看audit日志:
sudo cat /var/log/audit/audit.log | grep nginx | grep denied
錯誤信息:
type=AVC msg=audit(1437452895.972:639): avc: denied { name_connect } for pid=5884 comm="nginx" dest=5000 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:commplex_main_port_t:s0 tclass=tcp_socket permissive=0
修復此錯誤:
sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx sudo semodule -i mynginx.pp
問題最終得到解決。(附上最終成功界面截圖)
解決方法在stackoverflow中的鏈接為:http://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx
相關知識鏈接:1.SElinux http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol_5.php