अपस्ट्रीम पढ़ते समय अनुमति से इनकार कर दिया


40

हमने अपने रेल एप्लिकेशन को 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"


आप लॉग स्तर को डीबग करने के लिए सेट कर सकते हैं: nginx.org/en/docs/debugging_log.html
रिमियन

जवाबों:


39

मुझे एक NGINX / PHP-FPM सेटअप (php-fpm = phpgi के लिए बेहतर fcgi) पर समान समस्या थी।

आप यह पता लगा सकते हैं कि कौन से उपयोगकर्ता nginx प्रक्रियाओं के रूप में चल रहे हैं

ps aux | grep "nginx: worker process"

और फिर जांचें कि क्या आपकी प्रॉक्सी फाइलों की अनुमति सही है

ls -l /opt/nginx/proxy_temp/

मेरे मामले में, nginx के रूप में चल रहा था www-dataऔर मेरी प्रॉक्सी निर्देशिका में दो निर्देशिका रूट की थीं।

मुझे नहीं पता कि यह अभी तक कैसे हुआ, लेकिन मैंने इसे (रूट के रूप में) करके तय किया

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

4
सबसे अच्छा समाधान!
एफफेकन

इसे अभी तक स्वीकार क्यों नहीं किया गया?
किशोर पवार

1
#openresty का उपयोग करने वालों के लिए - "chown www-data: www-data -R / usr / local / openresty / nginx / * _ temp"
BG Bruno

1
मैंने अपनी nginx प्रक्रिया को रोक दिया, फ़ोल्डर का नाम बदलकर दूसरे नाम पर रखा, nginx प्रक्रिया को पुनः आरंभ किया और इसने सही अनुमति के साथ फ़ोल्डर को फिर से बनाया। एक जादू की तरह काम किया!
चिरयु शिशोदिया

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 (या जो भी आप स्विच करने की कोशिश कर रहे हैं) उपयोगकर्ता उन्हें coz तक पहुंच नहीं सकता है, उनके पास 700 की अनुमति है।

तो समाधान आसान है। नग्नेक्स बंद करो, फिर:

rm -rf /var/cache/nginx/*

या जो भी रास्ता आपके डिस्ट्रो और रिलीज पर है। फिर nginx को पुनरारंभ करें जो उचित अनुमतियों के साथ इन फ़ोल्डरों को फिर से बनाएगा।


8

यह भी सुनिश्चित करने के लिए कि आप सही उपयोगकर्ता और समूह को निर्दिष्ट कर रहे हैं, nginx.conf फ़ाइल की जाँच करें।

मुझे एक समस्या थी जहाँ निर्देशिका पर अनुमतियाँ उपयोगकर्ता नाम / nginx के लिए सेटअप की गई थीं, लेकिन nginx.conf उपयोगकर्ता केवल उपयोगकर्ता नाम निर्दिष्ट करता है। डिफ़ॉल्ट रूप से, यदि उपयोगकर्ता निर्देश को कोई समूह नहीं दिया जाता है, तो वह उपयोगकर्ता के समान नाम का उपयोग करता है। इसलिए, उपयोगकर्ता नाम / उपयोगकर्ता नाम / नगीनेक्स के बजाय एक निर्देशिका का उपयोग करने की कोशिश कर रहा था। कॉन्फ़िगरेशन को अपडेट करने से मेरी समस्याएं ठीक हो गईं।

देखें: http://nginx.org/en/docs/ngx_core_module.html#user


2
क्या आप कृपया यहां बताए गए कॉन्फिगर को पोस्ट कर सकते हैं?
पावेलोकेक

4

इसलिए मैंने उपरोक्त सभी किया और दुर्भाग्य से मेरे लिए यह मुझे एक ही त्रुटि दे रहा था। मैं नार्क्स के साथ एक सेंटोस 6.7 मशीन पर टॉरकेबॉक्स के साथ जार फ़ाइल में पैक की गई एक रेल एप्लिकेशन चला रहा हूं। मैंने लगभग 3 घंटे तक यह लड़ाई लड़ी जब तक कि मुझे दूसरा समाधान नहीं मिला और मुझे उम्मीद है कि यह किसी और की मदद करेगा। इस लेख के अनुसार nginx enforcing mode पर चल सकता है। मैं बस nginx के साथ अनुमेय मोड में बदल दिया है

setenforce 0

उस के साथ, त्रुटि हो गई थी और मैं एक मचान / उत्पादन वातावरण पर अपना आवेदन चलाने में सक्षम था।

जब तक मुझे ऑडिट पर रोक नहीं मिली, मैं क्लूलेस था

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 आधारित होस्ट और सेलिनक्स में है। एक तरीका सेटेनफोर्स 0 (असभ्य) है, दूसरा तरीका सेटसेबूल और नेटवर्किंग विकल्पों के साथ है।
पेरिकेत्ने

इसने सेंटोस 7.2 के साथ मदद की।
MKatleast3

setsebool -P httpd_can_network_connect 1 से stackoverflow.com/a/24830777/721331
McKelvin

3

जब एक unprivileged खाते से nginx शुरू करते हैं use_temp_path=off

proxy_cache_path ... use_temp_path=off;

फ़ाइलों को डिफ़ॉल्ट में डालने की कोशिश कर रहे nginx से बचने के लिए इसकी आवश्यकता थी proxy_temp_path। नगीनक्स डॉक्स से:

अस्थायी फ़ाइलों के लिए निर्देशिका use_temp_path पैरामीटर (1.7.10) पर आधारित है। यदि इस पैरामीटर को छोड़ दिया जाता है या मान पर सेट कर दिया जाता है, तो दिए गए स्थान के लिए प्रॉक्सी_temp_path निर्देश द्वारा निर्धारित निर्देशिका का उपयोग किया जाएगा। यदि मान बंद करने के लिए सेट किया गया है, तो अस्थायी फ़ाइलों को सीधे कैश डायरेक्टरी में रखा जाएगा।


-3
chmod 777 /opt/nginx/proxy_temp/

मैं एक ही समस्या थी और यह उस निर्देशिका के लिए chmod द्वारा हल किया।


13
chmod 777 एक अच्छा विचार नहीं है।
sendmoreinfo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.