प्रॉक्सी (nginx) एक खराब गेटवे त्रुटि दिखाता है


18

मेरे पास एक सेवा (डॉकटर रजिस्ट्री) है जो चलती है port 5000, मैंने http अनुरोध को पुनर्निर्देशित करने के लिए nginx स्थापित किया 8080है 5000। अगर मैं localhost:5000इसे बनाने के लिए कर्ल करता हूं, लेकिन जब मैं कर्ल बनाता हूं तो localhost:8080मुझे एक खराब गेटवे त्रुटि मिलती है ।

nginx config फाइल:

upstream docker-registry {
 server localhost:5000;
}

server {
 listen 8080;
 server_name registry.mydomain.com;

 proxy_set_header Host       $http_host; 
 proxy_set_header X-Real-IP  $remote_addr; 
 client_max_body_size 0; 
 chunked_transfer_encoding on;

 location / {

     proxy_pass http://docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }

}

में /var/log/nginx/error.logमेरे पास है:

[crit] 15595#0: *1 connect() to [::1]:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain.com, request: "GET / HTTP/1.1", upstream: "http://[::1]:5000/", host: "localhost:8080"

कोई उपाय?


मेरे मामले में, मेरी सेवा जो मैं समीपस्थ थी, उसकी मृत्यु हो गई (और मुझे इसका एहसास नहीं था) इसका उपयोग करते हुए मेरे बीच में। एक सेकंड मैं इसे एक्सेस कर रहा था, अगले सेकंड मुझे खराब गेटवे मिला। मुझे सेवा को फिर से शुरू करना पड़ा।
माइकल प्लॉटज़

जवाबों:


57

मैं इसके लिनक्स बॉक्स को मानता हूं, इसलिए सबसे अधिक संभावना है कि SELinux कनेक्शन को रोक रहा है क्योंकि कनेक्शन की अनुमति देने वाली कोई नीति नहीं है।

आपको बस चलाने में सक्षम होना चाहिए

# setsebool -P httpd_can_network_connect true

और फिर nginx को पुनरारंभ करें।


सेलिनक्स अक्षम है, साथ ही सेवा फायरवाल
नरकबाय 7

2
आपने मेरी समस्या को ठीक कर दिया, भले ही आपने hellb0y77 को ठीक नहीं किया हो। SE_LINUX फिर से हमला!
वेस्ले बर

1
मेरे लिए भी काम किया। क्या किसी के पास कोई और जानकारी है जो वह वास्तव में कर रहा है? मुझे न जाने से नफरत है!
शहीद हुआ

अपग्रेड किए गए और सेंटो 7 पर काम किया, क्या मैं पूछ सकता हूं कि यह सुरक्षा के मुद्दे क्या खोल सकते हैं। मैं आमतौर पर iptables नियमों का एक सेट चलाता हूं जो स्थानीय ट्रैफ़िक की अनुमति देता है। आश्चर्य है कि यह क्या प्रभाव डालता है।
एडेंसोरबीन

1
@edencorbin यह httpd मॉड्यूल को नेटवर्क से कनेक्ट करने में सक्षम होने की अनुमति देता है।
वॉरेन

5

त्रुटि संदेश के आधार पर, यह मुझे आश्चर्यचकित करता है कि क्या लोकलहोस्ट: 5000 को आईपीवी 6 पते के रूप में हल किया जा रहा है, जो आप नहीं चाहते हैं। आप इसे बदलने की कोशिश कर सकते हैं

EDIT: आपकी प्रॉक्सी_पास लाइन में, यह संभव है कि आप URL का हिस्सा याद कर रहे हैं? $ Request_uri को जोड़ने का प्रयास करें ताकि यह हो सके:

proxy_pass http://docker-registry/$request_uri;

या शायद:

proxy_pass http://docker-registry$request_uri;

निश्चित नहीं है कि कौन सा सबसे सही है।

एक और बात पर विचार करें। आपका कॉन्फ़िगरेशन इंगित करता है:

server_name registry.mydomain.com;

इसलिए, लोकलहोस्ट: 8080 का मिलान नहीं किया जा सकता है। परीक्षण के लिए, आप इसे इसमें बदल सकते हैं:

server_name registry.mydomain.com localhost;

फिर लोकलहोस्ट: 8080 का मिलान किया जाएगा, साथ ही साथ आपके डोमेन से भी। मुझे लगता है कि रजिस्ट्री.mydomain.com सिर्फ एक उदाहरण है और आप अपने असली सर्वर FQDN को वहां लगाएंगे।


काम नहीं, सेट 127.0.0.1:5000और मैंने केवल server_name localhostऔर server_name registry.mydomain.com(एक ही सर्वर से होस्टनाम registry.mydomain.comमें / etc / मेजबान में) के साथ प्रयास किया है, और दोनों, लेकिन कुछ भी नहीं ... एक ही त्रुटि
hellb0y77

व्हाईट रजिस्ट्री.मिडोमैन.कॉम [crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain,com request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080", लोकलहोस्ट के साथ:[crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080"
नरकब ०
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.