(13: ปฏิเสธการอนุญาต) ขณะเชื่อมต่อกับ upstream: [nginx]


296

ฉันกำลังทำงานกับการกำหนดค่าโครงการ Django กับ Nginx และ Gunicorn

ขณะที่ฉันกำลังเข้าถึงพอร์ตของฉันgunicorn mysite.wsgi:application --bind=127.0.0.1:8001ในเซิร์ฟเวอร์ Nginx ฉันได้รับข้อผิดพลาดต่อไปนี้ในไฟล์บันทึกข้อผิดพลาด

2014/05/30 11:59:42 [crit] 4075 # 0: * 6 การเชื่อมต่อ () ถึง 127.0.0.1:8001 ล้มเหลว (13: ปฏิเสธการอนุญาต) ขณะเชื่อมต่อกับ upstream ไคลเอนต์: 127.0.0.1 เซิร์ฟเวอร์: localhost, คำขอ: "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ฉันได้รับ

ฉันกำลังทำอะไรผิดพลาด?

คำตอบ:


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
Jahan

21
ขอบคุณ ฉันต้องการที่yum install policycoreutils-pythonจะได้รับaudit2allowก่อน การอ้างอิง: centos.org/forums/viewtopic.php?t=5012
gross.jonas

ขอบคุณมากมันใช้งานได้สำหรับฉันที่ใช้โหนดเซิร์ฟเวอร์ (Redhat 7)
BlaShadow

ดูเพิ่มเติมที่นี่ ในกรณีของฉันฉันต้องเพิ่ม nginx ให้กับกลุ่มผู้ใช้ที่มีโฮมไดเร็กตอรี่ที่ wwwroot เก็บอยู่

1
บน Fedora 23 การติดตั้งไม่ได้ให้คำสั่งpolicycoreutils-python หลังจากการวิจัยบางอย่างที่ฉันพบคุณควรติดตั้งแพคเกจaudit2allow devel yum install policycoreutils-develการอ้างอิง: danwalsh.livejournal.com/61710.html
Joseph N.

182

ฉันพบปัญหานี้เช่นกัน อีกวิธีหนึ่งคือการสลับค่าบูลีน SELinux สำหรับการเชื่อมต่อเครือข่าย httpd on(Nginx ใช้ป้ายกำกับ httpd)

setsebool httpd_can_network_connect on

ในการเปลี่ยนแปลงให้คงอยู่ให้ใช้แฟล็ก -P

setsebool httpd_can_network_connect on -P

คุณสามารถดูรายการ SELinux booleans ที่มีอยู่ทั้งหมดสำหรับ httpd โดยใช้

getsebool -a | grep httpd

1
สิ่งนี้ได้ผลขอบคุณ ฉันอัปเดตจาก CentOS 6.5 -> 6.7 และต้องมีค่าเริ่มต้นเป็นปิดในระหว่างการอัปเดตเนื่องจากทำงานได้ดีก่อนการอัปเดต แก้ไขง่าย ๆ
Mike Purcell

16

มีปัญหาที่คล้ายกันใน Centos 7 เมื่อฉันพยายามที่จะใช้วิธีการแก้ปัญหาที่กำหนดโดยโซรินฉันเริ่มเคลื่อนไหวในรอบ ก่อนอื่นฉันได้รับอนุญาตให้ {เขียน} ปฏิเสธ จากนั้นเมื่อฉันแก้ไขว่าฉันได้รับอนุญาต {connectto} ถูกปฏิเสธ จากนั้นกลับสู่การอนุญาต {write} ที่ถูกปฏิเสธ

การติดตาม @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

ฉันได้แก้ไขปัญหาของฉันด้วยการเรียกใช้ Nginx ของฉันในฐานะผู้ใช้ที่ฉันเข้าสู่ระบบด้วยmulagala mulagala

โดยค่าเริ่มต้นผู้ใช้ในฐานะnginxถูกกำหนดไว้ที่ส่วนบนสุดของnginx.confไฟล์ตามที่เห็นด้านล่าง;

user nginx; # Default Nginx user

เปลี่ยนNginxกับชื่อของผู้ใช้ปัจจุบันของคุณ - ที่นี่mulagala

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

อย่างไรก็ตามสิ่งนี้อาจไม่สามารถแก้ไขปัญหาที่เกิดขึ้นจริงและอาจมีผลข้างเคียงที่ไม่เป็นทางการ

สำหรับโซลูชั่นที่มีประสิทธิภาพโปรดดูที่วิธีการแก้ปัญหาของโจเซฟ Barbere


ขอบคุณที่ช่วยฉันผ่านสิ่งนี้
Overlord

4

หากข้อผิดพลาด "502 Bad Gateway" มีข้อผิดพลาดเกิดขึ้นกับ centos api url สำหรับ api gateway pass on บน nginx ให้เรียกใช้คำสั่งต่อไปนี้เพื่อแก้ไขปัญหา

sudo setsebool -P httpd_can_network_connect 1

2

13 สิทธิ์ปฏิเสธในขณะที่เชื่อมต่อกับ upstreamnginx บนเซิร์ฟเวอร์ centos -

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

ขอบคุณทุกคำตอบ คำตอบของ Kumar เมื่อวันที่ 21 สิงหาคม '19 เวลา 12:14 ทำให้ฉันได้รับการทุพพลภาพหลังจากไม่กี่วันของการแก้ไขปัญหาที่ฉันมีคือ:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.