প্রক্সি (এনজিনেক্স) খারাপ গেটওয়ে ত্রুটি দেখায়


18

আমি একটি সার্ভিস (Docker রেজিস্ট্রি) যে উপর রান আছে port 5000, আমি nginx পুনর্নির্দেশ জন্য http অনুরোধ থেকে ইনস্টল করা আছে 8080করতে 5000। যদি আমি করতে একটি কার্ল localhost:5000এটি কাজ করে, কিন্তু যখন আমি একটি কার্ল করতে localhost:8080আমি পেতে ত্রুটিযুক্ত গেটওয়ে ত্রুটি।

nginx কনফিগারেশন ফাইল:

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

আমি এটি একটি লিনাক্স বাক্স ধরে নিয়েছি, তাই সংযোগের অনুমতি দেওয়ার কোনও নীতি না থাকায় সম্ভবত সেলইনাক্স সংযোগটি আটকাচ্ছে।

আপনার শুধু চালানো উচিত

# setsebool -P httpd_can_network_connect true

এবং তারপরে nginx পুনরায় চালু করুন।


সেলিনাক্স অক্ষম, পরিষেবা ফায়ারওয়াল্ডও
Hellb0y77

2
আপনি ঠিক আমার সমস্যা সমাধান করেছেন, এমনকি যদি আপনি Hellb0y77 এর সমাধান না করেন। আবারও স্ট্রাইক!
ওয়েসলি বুড়

1
সেটা আমার পক্ষেও কাজ করেছিল। এটি আসলে কী করছে সে সম্পর্কে কারও কাছে আরও কোনও তথ্য আছে? আমি না জেনে ঘৃণা করি!
মেরিটিনওয়ার্ড

উত্সাহিত এবং O শতাংশে কাজ করেছে, আমি কী কী সুরক্ষার সমস্যা এটি খুলতে পারে তা জানতে পারি। আমি সাধারণত iptables নিয়মের একটি সেট চালনা করি যা স্থানীয় ট্রাফিকের অনুমতি দেয়। এই প্রভাব কি ভাবছি।
এডেনকর্বিন

1
@edencorbin এটি httpd মডিউলগুলিকে নেটওয়ার্কের সাথে সংযোগ করতে সক্ষম হতে দেয়।
ওয়ারেন

5

ত্রুটির বার্তার উপর ভিত্তি করে, এটি আমাকে অবাক করে তোলে যে লোকালহোস্ট: 5000 টি আইপিভি 6 ঠিকানা হিসাবে সমাধান করা হচ্ছে, যা আপনি চান না। আপনি এটি 127.0.0.1:54000 এ পরিবর্তনের চেষ্টা করতে পারেন

সম্পাদনা: আপনার প্রক্সি_পাস লাইনে, আপনি কি ইউআরএলটির কিছু অংশ মিস করছেন তা সম্ভব? অনুরোধ_উরি যুক্ত করার চেষ্টা করুন যাতে এটি হতে পারে:

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 এর সাথে আপনার ডোমেনও মিলবে। আমি ধরে নিলাম রেজিস্ট্রি.মিডোমেন ডট কম কেবল একটি উদাহরণ এবং আপনি সেখানে আপনার আসল সার্ভার এফকিউডিএন রাখবেন।


না কাজ, সেট 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"
হ'ল হ'ল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.