(13: अपस्ट्रीम से कनेक्ट करते समय अनुमति से इनकार किया गया): [नगनेक्स]


296

मैं Nginx और Gunicorn के साथ Django परियोजना को कॉन्फ़िगर करने के साथ काम कर रहा हूं।

जब मैं gunicorn mysite.wsgi:application --bind=127.0.0.1:8001Nginx सर्वर में अपने पोर्ट को एक्सेस कर रहा हूं, मुझे मेरी त्रुटि लॉग फ़ाइल में निम्न त्रुटि मिल रही है;

2014/05/30 11:59:42 [क्रिट] 4075 # 0: * 6 कनेक्ट () से 127.0.0.1:8001 विफल (13: अनुमति से इनकार) अपस्ट्रीम से कनेक्ट करते समय, क्लाइंट: 127.0.0.1, सर्वर: लोकलहोस्ट, अनुरोध: "GET / HTTP / 1.1", अपस्ट्रीम:, "http://127.0.0.1:8001/"होस्ट: "लोकलहोस्ट: 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

मेरे पास फेडोरा 20, नगनेक्स, नोड्स.जेएस और घोस्ट (ब्लॉग) काम करने के लिए एक समान मुद्दा था। यह पता चला है कि मेरा मुद्दा 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 पर हूँ
जेहान

21
धन्यवाद। मुझे पहले yum install policycoreutils-pythonप्राप्त करने के लिए आवश्यक था audit2allow। संदर्भ: centos.org/forums/viewtopic.php?t=5012
सकल। जोंस

बहुत बहुत धन्यवाद यह एक नोड सर्वर का उपयोग कर मेरे लिए काम है। (
रेडहैट

यह भी देखें यहाँ । मेरे मामले में मुझे उस उपयोगकर्ता के समूह में nginx जोड़ना था, जिसके होम डायरेक्टरी में wwwroot संग्रहीत था।

1
फेडोरा 23 को स्थापित करने policycoreutils-pythonपर कमांड प्रदान नहीं किया गया audit2allow। कुछ शोध के बाद मैंने पाया कि आपको डेवेल पैकेज स्थापित करना चाहिए yum install policycoreutils-devel। संदर्भ: danwalsh.livejournal.com/61710.html
जोसफ एन।

182

मैं इस समस्या में भी भाग गया हूँ। Httpd नेटवर्क कनेक्ट के लिए SELinux बूलियन मान को टॉगल करने का एक अन्य उपाय है on(Nginx httpd लेबल का उपयोग करता है)।

setsebool httpd_can_network_connect on

परिवर्तन को बनाए रखने के लिए -P ध्वज का उपयोग करें।

setsebool httpd_can_network_connect on -P

आप httpd का उपयोग करके सभी उपलब्ध SELinux बूलियन्स की सूची देख सकते हैं

getsebool -a | grep httpd

1
यह काम किया, धन्यवाद। मैंने CentOS 6.5 -> 6.7 से अपडेट किया और इसे अपडेट के दौरान मान को डिफ़ॉल्ट रूप से बंद करना चाहिए, क्योंकि यह अपडेट से पहले ठीक काम कर रहा था। सरल तय।
माइक पर्सल

16

सेंटोस पर इसी तरह की समस्या थी 7. जब मैंने सोरिन द्वारा निर्धारित समाधान को लागू करने की कोशिश की, तो मैंने चक्रों में चलना शुरू कर दिया। पहले मेरे पास एक अनुमति थी {लिखने} से इनकार किया। तब जब मैंने हल किया कि मेरे पास एक अनुमति {कनेक्टो} थी तो इनकार कर दिया। फिर वापस अनुमति के लिए {लिखने} से इनकार किया।

@ फ्लैग का उपयोग करने getsebool -a | grep httpdऔर उन्हें टॉगल करने से ऊपर @Sid जवाब के बाद मैंने पाया कि 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

मूल रूप से आप सेटसेबुल पर सेट की गई अनुमतियों की जाँच कर सकते हैं और यह पुष्टि कर सकते हैं कि grepp'ing 'ऑडिट से प्राप्त त्रुटि के साथ। nginx, अस्वीकृत


14

मैंने अपना Nginx चलाकर अपनी समस्या हल कर ली है क्योंकि जिस उपयोगकर्ता के साथ मैं वर्तमान में लॉग इन कर रहा हूं, वह मूलागाला है

डिफ़ॉल्ट रूप से उपयोगकर्ता के रूप में nginx को nginx.confफ़ाइल के शीर्ष भाग में परिभाषित किया गया है जैसा कि नीचे देखा गया है;

user nginx; # Default Nginx user

अपने वर्तमान उपयोगकर्ता के नाम से nginx बदलें - यहाँ, mulagala

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

हालांकि, यह वास्तविक समस्या का समाधान नहीं कर सकता है और वास्तव में आकस्मिक दुष्प्रभाव हो सकता है।

एक प्रभावी समाधान के लिए, कृपया यूसुफ बारबेरे के समाधान का संदर्भ लें ।


धन्यवाद है कि इस माध्यम से मुझे मदद मिली
अधिपति

4

अगर "502 बैड गेटवे" की त्रुटि सेंटो एपि url के लिए सेंटोस एपि url पर फेंकी जाती है, तो nginx पर प्रॉक्सी पास करें, समस्या को हल करने के लिए कमांड का पालन करें

sudo setsebool -P httpd_can_network_connect 1

2

13-अनुमति-अस्वीकृत-जबकि-कनेक्ट-टू-अपस्ट्रीमनजिनेक्स ऑन सेंटोस सर्वर -

setsebool -P httpd_can_network_connect 1


1

मैं इस समस्या में भी भाग गया हूँ। मैं HHVM के साथ Nginx का उपयोग कर रहा हूं, समाधान के नीचे मेरी समस्या तय हो गई है:

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

बहुत बहुत धन्यवाद। मैंने इस गाइड को इस पर लागू किया है: Centos 7, AspNet Core 3.1, Nginx सेटअप।


0

सभी उत्तर के लिए धन्यवाद। कुमार का उत्तर 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

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