ข้อผิดพลาดซ็อกเก็ตโดเมน nginx unix


18

ฉันใช้ fedora 17 และเมื่อฉันติดตั้ง nginx กับ uwsgi โดยใช้ซ็อกเก็ตโดเมน unix เมื่อฉันวางซ็อกเก็ตในไดเรกทอรีที่มีสิทธิ์ที่เหมาะสมก็โอเค แต่เมื่อฉันวางซ็อกเก็ตใน/tmpนั้นจะทำให้เกิดข้อผิดพลาด nginx:

connect() to unix:/tmp/MySite.sock failed (2: No such file or directory) while connecting to upstream

ไฟล์นี้มีอยู่และได้รับอนุญาตให้อ่าน / เขียนสำหรับผู้ใช้ nginx แต่สิ่งที่ทำให้เกิดข้อผิดพลาดนี้มันทำให้ฉันบ้าจริง ๆ ใครบางคนสามารถคิดออก

คำตอบ:


33

คุณไม่สามารถวางซ็อกเก็ตไว้สำหรับการสื่อสารระหว่างกระบวนการ/tmpได้

เพื่อเหตุผลด้านความปลอดภัย Fedora รุ่นล่าสุดใช้ไดเรกทอรีชั่วคราวที่กำหนดเนมสเปซซึ่งหมายความว่าทุกบริการจะเห็นความแตกต่างอย่างสิ้นเชิง/tmpและสามารถเห็นไฟล์ของตัวเองในไดเรกทอรีนั้นเท่านั้น

ในการแก้ไขปัญหาให้วางซ็อกเก็ตในไดเรกทอรีอื่นเช่น/run(เดิมชื่อ/var/run)


1
/ run ไม่สามารถเขียนได้สำหรับผู้ใช้ปกติ
hostmaster

1
/runไม่สามารถเขียนได้โดยตรง แต่คุณสามารถสั่งให้ systemd สร้างไดเรกทอรีภายใต้ซึ่งสามารถเขียนได้โดยกระบวนการทั้งสอง
Michael Hampton

เพื่อช่วยในการค้นหาสิ่งเหล่านี้ยังนำไปใช้กับ centos 7 และการย้ายโฟลเดอร์ซ็อกเก็ตไปยัง / ทำงาน การหาปัญหานี้ไม่ใช่เรื่องง่ายเพราะทุกบัญชีสามารถดูโฟลเดอร์และไฟล์ใน tmp (ตั้งค่า 777 เพื่อทดสอบ) ดังนั้นคุณจะไม่คาดเดาว่ากระบวนการจะไม่สามารถทำได้
JosephK

0

ใช่! สิ่งนี้ช่วยได้!

กำลังตรวจสอบข้อความการเริ่มต้นบันทึกจาก uwsgi แต่ไม่มีข้อมูลในบันทึกการเริ่มต้นไม่สามารถค้นหาสิ่งที่เกิดขึ้นได้ กลายเป็นว่าฉันต้องการเปลี่ยนไฟล์ถุงเท้าเป็นตำแหน่งที่ไม่ใช่ / tmp และเพิ่ม:

catch-exception = true

ไปยังไฟล์ ins ของ wsgi กลับกลายเป็นว่าฉันระบุตำแหน่ง filehandler การบันทึกไปยังไดเรกทอรีที่ไม่มีอยู่ดังนั้นจึงไม่สามารถบันทึกข้อผิดพลาดในสถานที่แรก

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