ปฏิเสธสิทธิ์ในขณะที่อ่านต้นน้ำ


40

เราได้ติดตั้งแอปพลิเคชั่น Rails ของเราบน nginx และหน้าผู้โดยสารโหลดแอพพลิเคชั่นเป็นระยะ ๆ บางส่วนไม่มีข้อผิดพลาดในบันทึกของแอปพลิเคชัน แต่บันทึกข้อผิดพลาด nginx แสดงดังต่อไปนี้:

2011/02/14 05:49:34 [crit] 25389#0: *645 open() "/opt/nginx/proxy_temp/2/02/0000000022" failed (13: Permission denied) while reading upstream, client: x.x.x.x, server: y.y.y.y, request: "GET /signup/procedures?count=0 HTTP/1.1", upstream: "passenger:unix:/passenger_helper_server:", host: "y.y.y.y", referrer: "http://y.y.y.y/signup/procedures"


คุณสามารถตั้งค่าระดับการบันทึกเป็น debug: nginx.org/en/docs/debugging_log.html
Rimian

คำตอบ:


39

ฉันมีปัญหาเดียวกันกับการติดตั้ง NGINX / PHP-FPM (php-fpm = ปรับปรุง fcgi สำหรับ php)

คุณสามารถค้นหาผู้ใช้ที่กระบวนการ nginx กำลังทำงานอยู่

ps aux | grep "nginx: worker process"

จากนั้นตรวจสอบว่าสิทธิ์ในไฟล์พร็อกซีของคุณถูกต้องหรือไม่

ls -l /opt/nginx/proxy_temp/

ในกรณีของฉัน nginx ทำงานเป็นwww-dataและสองไดเรกทอรีในไดเรกทอรีพร็อกซีของฉันเป็นของ root

ฉันยังไม่รู้ว่ามันเกิดขึ้นได้อย่างไร แต่ฉันซ่อมมันด้วยการทำ (เหมือนรูท)

chown www-data.www-data /opt/nginx/proxy_temp

4
ทางออกที่ดีที่สุด!
efkan

ทำไมถึงยังไม่ได้รับการยอมรับ
Kishor Pawar

1
สำหรับผู้ที่ใช้ #openresty - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp"
BG Bruno

1
ฉันหยุดกระบวนการ nginx ของฉันเปลี่ยนชื่อโฟลเดอร์เป็นชื่ออื่นรีสตาร์ทกระบวนการ nginx และสร้างโฟลเดอร์อีกครั้งด้วยสิทธิ์ที่ถูกต้อง ทำงานเหมือนจับใจ!
Chirayu Shishodiya

8

คุณอาจเริ่มต้นด้วยผู้ใช้รูทจากนั้นเปลี่ยนมัน ตอนนี้ปัญหาคือว่าโฟลเดอร์แคชคือ

/var/cache/nginx/client_temp
/var/cache/nginx/fastcgi_temp
/var/cache/nginx/proxy_temp
/var/cache/nginx/scgi_temp
/var/cache/nginx/uwsgi_temp

เป็นเจ้าของแล้วโดยรูทดังนั้นผู้ใช้ nginx (หรือสิ่งที่คุณพยายามเปลี่ยน) ผู้ใช้ไม่สามารถเข้าถึงพวกเขาเพราะพวกเขาได้รับอนุญาต 700

ดังนั้นการแก้ปัญหาจึงเป็นเรื่องง่าย หยุด nginx จากนั้น:

rm -rf /var/cache/nginx/*

หรือเส้นทางใดก็ตามที่อยู่บน distro และปล่อยของคุณ จากนั้นรีสตาร์ท nginx ซึ่งจะสร้างโฟลเดอร์เหล่านี้ใหม่ด้วยสิทธิ์ที่เหมาะสม


8

ตรวจสอบไฟล์ nginx.conf เพื่อให้แน่ใจว่าคุณระบุผู้ใช้และกลุ่มที่ถูกต้อง

ฉันมีปัญหาที่การอนุญาตในไดเรกทอรีถูกตั้งค่าสำหรับชื่อผู้ใช้ / nginx แต่ผู้ใช้ที่ระบุชื่อผู้ใช้เท่านั้น nginx.conf โดยค่าเริ่มต้นหากไม่มีการกำหนดกลุ่มให้กับผู้ใช้คำสั่งจะใช้ชื่อเดียวกันกับผู้ใช้ ดังนั้นชื่อผู้ใช้ / ชื่อผู้ใช้พยายามเข้าถึงไดเรกทอรีแทนชื่อผู้ใช้ / nginx การอัปเดตการกำหนดค่าแก้ไขปัญหาของฉันได้

ดู: http://nginx.org/en/docs/ngx_core_module.html#user


2
คุณช่วยโพสต์การตั้งค่าที่คุณพูดถึงที่นี่ได้ไหม?
paweloque

4

ดังนั้นฉันทำทุกอย่างที่กล่าวมาและน่าเสียดายสำหรับฉันมันทำให้ฉันมีข้อผิดพลาดเดียวกัน ฉันใช้งานแอพพลิเคชั่นทางรถไฟที่รวมอยู่ในไฟล์ jar ด้วย torquebox บนเครื่อง centos 6.7 ด้วย nginx ฉันต่อสู้เรื่องนี้ประมาณ 3 ชั่วโมงจนกระทั่งฉันพบวิธีแก้ไขปัญหาอื่นและฉันหวังว่ามันจะช่วยเหลือคนอื่น อ้างอิงจากบทความนี้ nginx อาจทำงานในโหมดการบังคับใช้ ฉันเพียงแค่เปลี่ยน nginx เป็นโหมดที่อนุญาตด้วย

setenforce 0

เมื่อเกิดข้อผิดพลาดและฉันก็สามารถเรียกใช้แอปพลิเคชันของฉันในสภาพแวดล้อมการผลิต / การผลิต

ฉันไร้เดียงสาจนกว่าฉันจะพบข้อผิดพลาดใน audit.log

type=AVC msg=audit(1444454198.438:466): avc:  denied  { name_connect } for  pid=3201 comm="nginx" dest=8080 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_cache_port_t:s0 tclass=tcp_socket

ฉันหวังว่าสิ่งนี้จะช่วยคนได้ 3 ชั่วโมงที่ฉันเพิ่งหายไป


1
คุณไม่ผิดฉันไม่รู้ว่าทำไมใครบางคนลงคะแนน -1 (ทำให้เขาอับอาย) ปัญหาอยู่ในโฮสต์ที่ใช้ RedHat / CentOS และ selinux วิธีหนึ่งคือ setenforce 0 (หยาบคาย) วิธีอื่นคือ setsebool และตัวเลือกระบบเครือข่าย
periket2000

ช่วยด้วย CentOS 7.2
MKatleast3

setsebool -P httpd_can_network_connect 1 จากstackoverflow.com/a/24830777/721331
McKelvin

3

เมื่อเริ่มต้น nginx จากบัญชีที่use_temp_path=offไม่ได้รับสิทธิพิเศษ

proxy_cache_path ... use_temp_path=off;

นี้จำเป็นที่จะหลีกเลี่ยงการ Nginx proxy_temp_pathพยายามที่จะนำไฟล์ลงในการเริ่มต้น จากเอกสาร nginx:

ไดเร็กทอรีสำหรับไฟล์ชั่วคราวถูกตั้งค่าตามพารามิเตอร์ use_temp_path (1.7.10) หากละเว้นพารามิเตอร์นี้หรือตั้งค่าเป็นค่าไดเร็กทอรีที่ตั้งค่าโดยคำสั่ง proxy_temp_path สำหรับตำแหน่งที่กำหนดจะถูกใช้ หากตั้งค่าเป็นปิดไฟล์ชั่วคราวจะถูกวางโดยตรงในไดเรกทอรีแคช


-3
chmod 777 /opt/nginx/proxy_temp/

ฉันมีปัญหาเดียวกันและแก้ไขโดย chmod ไปยังไดเรกทอรีนั้น


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