Nginx বিপরীত প্রক্সি 504 গেটওয়ে সময়সীমা কারণ


127

আমি এনগিনেক্সকে বিপরীত প্রক্সি হিসাবে ব্যবহার করছি যা অনুরোধগুলি গ্রহণ করে তারপরে 8001 পোর্টে চলমান আপস্ট্রিম সার্ভার থেকে প্রকৃত ওয়েব অ্যাপ্লিকেশন পেতে প্রক্সি_পাস করে।

আমি যদি mywebsite.com এ যাই বা কোনও উইজেট করি, আমি 60 সেকেন্ড পরে 504 গেটওয়ে টাইমআউট পাই ... তবে, আমি যদি mywebsite.com:8001 লোড করি তবে প্রত্যাশা অনুযায়ী অ্যাপ্লিকেশন লোড হয়!

সুতরাং কিছু আপগ্রেড সার্ভারের সাথে Nginx কে যোগাযোগ করতে বাধা দিচ্ছে।

আমার হোস্টিং সংস্থা আমার স্টাফটি চালিত মেশিনটিকে পুনরায় সেট করার পরে শুরু হয়েছিল, এর আগে কোনও সমস্যা নেই।

এখানে আমার vhosts সার্ভার ব্লক:

server {
    listen   80;
    server_name mywebsite.com;

    root /home/user/public_html/mywebsite.com/public;

    access_log /home/user/public_html/mywebsite.com/log/access.log upstreamlog;
    error_log /home/user/public_html/mywebsite.com/log/error.log;

    location / {
        proxy_pass http://xxx.xxx.xxx.xxx:8001;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
} 

এবং আমার Nginx ত্রুটি লগ থেকে আউটপুট:

2014/06/27 13:10:58 [error] 31406#0: *1 upstream timed out (110: Connection timed out) while connecting to upstream, client: xxx.xx.xxx.xxx, server: mywebsite.com, request: "GET / HTTP/1.1", upstream: "http://xxx.xxx.xxx.xxx:8001/", host: "mywebsite.com"

সার্ভারটি কি SELinux চলছে?
ক্র্যাকারজ্যাক 9

আমার ক্ষেত্রে, এনএএনআইএনএক্স বা ব্যাকএন্ড এপিআই নয়, NAT গেটওয়েটি বিষয়টি ছিল was stackoverflow.com/a/62351959/9956279
Sushilinux

উত্তর:


152

সময়সীমা অবধি প্রবাহে বাড়ানোর জন্য সম্ভবত আরও কয়েকটি লাইন যুক্ত করতে পারেন। নীচের উদাহরণগুলি সময়সীমা 300 সেকেন্ডে সেট করে:

proxy_connect_timeout       300;
proxy_send_timeout          300;
proxy_read_timeout          300;
send_timeout                300;

5
আমি মনে করি যে আপনার নেটওয়ার্ক / পরিষেবা সর্বদা বা কিছু ক্ষেত্রে খুব ধীরে ধীরে সাড়া না জানা আপনি যদি না জানেন তবে সময়সীমা বাড়ানো খুব কমই উত্তর। আপনি কন্টেন্ট (ফাইল / চিত্র) ডাউনলোড না করে আজকাল কয়েকটি ওয়েব অনুরোধে কয়েক সেকেন্ডের বেশি সময় নেওয়া উচিত
আলমুন্ড

অ্যালমন্ড আমি একই জিনিসটি ভেবেছিলাম (প্রায়শই এটি চেষ্টা করে বিরক্ত করিনি) তবে যে কোনও কারণেই এটি আমার পক্ষে কাজ করে। (আগে 60 সেকেন্ড পরে সময়সীমা নির্ধারণ করা, এখনই তাত্ক্ষণিক প্রতিক্রিয়া পান)।
ডেক্স ফোহল

@ ড্যাক্স ফোহল: এটি কৌতূহলী। আমি উত্সটি নীচে টেনে এনেছি এবং একটি তাত্ক্ষণিক দৃষ্টি আকর্ষণ করেছি এবং যা দেখতে পাচ্ছি তা থেকে, প্রক্সি_পাস থেকে আলাদা করে যে কোনও প্রক্সি_ সেটিংস সেট করার ফলে আমার ধারণা হয় যে সেটিংস একটি ভিন্ন উপায়ে প্রক্সি চালাবে তাই সম্ভবত কিছু সেট করাও এটিই দেবে same আচরণ।
আলমুন্ড

নোডেজ সার্ভার দিয়ে এটি ব্যবহার করে আমার জন্য সমস্যার সমাধান করেনি
ভিপিএক্স

3
আমি দেখতে পেয়েছি যে proxy_read_timeoutব্যাকএন্ডে ডিবাগ করার সময় আমার কেবলমাত্র প্রয়োজন । ধন্যবাদ!
জেফ পেকেট

79

সময়সীমা বৃদ্ধি করা সম্ভবত আপনার সমস্যাটির সমাধান করবে না, কারণ আপনি বলেছেন, প্রকৃত টার্গেট ওয়েব সার্ভারটি ঠিক জবাব দিচ্ছে।

আমার এই একই সমস্যা ছিল এবং আমি দেখতে পেলাম যে এটি সংযোগে বেঁচে থাকা ব্যবহার না করায় করা উচিত। এটি কেন হয় তা আমি আসলে উত্তর দিতে পারি না তবে, সংযোগ শিরোনাম সাফ করে আমি এই সমস্যাটি সমাধান করেছি এবং অনুরোধটি ঠিক জরিমানা করে দেওয়া হয়েছিল:

server {
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_pass http://localhost:5000;
    }
}

এই পোস্টগুলিতে এটি আরও বিশদে ব্যাখ্যা করে দেখুন: এনজিনেক্স অনুরোধের পরে আপস্ট্রিম সংযোগটি বন্ধ রাখুন-বেঁচে থাকা শিরোনামের বিবরণ http://nginx.org/en/docs/http/ngx_http_upstream_module.html# keepalive


7
একক লাইন proxy_set_header Connection "";লল দ্বারা
মাসগুলির

21

ব্যবহারকারী 2540984 , পাশাপাশি আরও অনেকে নির্দেশ করেছেন যে আপনি নিজের সময়সীমা সেটিংস বাড়ানোর চেষ্টা করতে পারেন। আমি নিজেও এর সাথে একই ধরণের সমস্যার মুখোমুখি হয়েছি এবং / থেস্কি / জিনিক্স / জিঞ্জেক্স.কনফ ফাইলটিতে আমার টাইমআউট সেটিংস পরিবর্তন করার চেষ্টা করেছি , যেমন এই থ্রেডগুলির প্রায় প্রত্যেকেরই পরামর্শ। এটি অবশ্য আমাকে একটুখানিও সহায়তা করেনি; এনজিআইএনএক্স'র টাইমআউট সেটিংসে কোনও আপাত পরিবর্তন হয়নি। অনেক ঘন্টা অনুসন্ধানের পরে, অবশেষে আমি আমার সমস্যা সমাধান করতে সক্ষম হয়েছি।

সমাধানটি এই ফোরামের থ্রেডে রয়েছে এবং এটি যা বলে তা হ'ল আপনার সময়সীমা সেটিংসকে /etc/nginx/conf.d/timeout.conf এ রাখা উচিত (এবং যদি এই ফাইলটি বিদ্যমান না থাকে তবে আপনার এটি তৈরি করা উচিত)। আমি থ্রেডে প্রস্তাবিত একই সেটিংস ব্যবহার করেছি:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;

এটি আপনার নির্দিষ্ট সমস্যার সমাধান নাও হতে পারে তবে অন্য কেউ যদি /etc/nginx/nginx.conf এ সময়সীমা পরিবর্তনের জন্য কিছু না করে লক্ষ্য করে তবে আমি আশা করি এই উত্তরটি সাহায্য করে!


হাই আমার কনফিগারেশন ডিরেক্টরিতে টাইমআউটকনফ নেই। আপনি বলেছেন যে এটি তৈরি করুন, এবং আমি এটি নিশ্চিত করতে চাই যে টাইমআউট.কমের উপরের সেটিংসটি কেবল যুক্ত করুন?
tktktk0711

হ্যাঁ, কেবল তাদের যুক্ত করুন। আপনি আপনার নিজের প্রয়োজনের জন্য এগুলি সংশোধন করতে পারেন, কিন্তু এগুলি আমার পক্ষে কাজ করেছে!
আন্দ্রেয়াস ফোর্স্লু

দুর্ভাগ্যক্রমে, ওবুন্টু এবং এনগিনেক্সের সাথে লারাভেল বাড়ীতে, এটি কার্যকর হয় না। :( আপনি কি এই লাইনগুলি যুক্ত করতে চান? ছাড়া server{}বা অন্য কিছু? এই ত্রুটিটি ঠিক 5 মিনিটের পরে এসে উপস্থিত হয় I এটি?
পাঠ্রস

15

আপনি যদি সমস্ত সাইটে সময়সীমা বাড়াতে বা যোগ করতে চান তবে আপনি nginx.confফাইলটিতে নীচে লাইন যুক্ত করতে পারেন ।

httpবিভাগ /usr/local/etc/nginx/nginx.confবা /etc/nginx/nginx.confফাইলের বিভাগে লাইনগুলি যুক্ত করুন।

fastcgi_read_timeout 600;
proxy_read_timeout 600;

যদি উপরের লাইনগুলি confফাইলে বিদ্যমান না থাকে তবে সেগুলি যুক্ত করুন, অন্যথায় বৃদ্ধি করুন fastcgi_read_timeoutএবং proxy_read_timeoutনিশ্চিত করুন যে এনজিনেক্স এবং পিএইচপি-এফপিএমের সময়সীমা শেষ হয়নি।

কেবলমাত্র একটি সাইটের জন্য সময়সীমা বাড়ানোর জন্য আপনি ভিমে সম্পাদনা করতে পারবেন /etc/nginx/sites-available/example.com

location ~ \.php$ {
    include /etc/nginx/fastcgi_params;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;
    fastcgi_read_timeout 300; 
}

এবং এই লাইনগুলি যুক্ত করার পরে nginx.conf, তবে এনজিনেক্স পুনরায় আরম্ভ করতে ভুলবেন না।

service php7-fpm reload 
service nginx reload

অথবা, আপনি যদি ভ্যালেট ব্যবহার করছেন তবে কেবল টাইপ করুন valet restart


1
ধন্যবাদ আমার জন্য কাজ করে:fastcgi_read_timeout 600; proxy_read_timeout 600;
আলেজান্দ্রো

13

আপনার প্রবাহের সার্ভারটি যদি একটি ডোমেন নাম ব্যবহার করে এবং এর আইপি ঠিকানা পরিবর্তন হয় তবে আপনি এই পরিস্থিতির মুখোমুখিও হতে পারেন (যেমন: আপনার মেজাজ একটি অ্যাডাব্লুএস ইলাস্টিক লোড ব্যালান্সারের দিকে নির্দেশ করে)

সমস্যাটি হ'ল এনজিনেক্স একবার আইপি ঠিকানাটি সমাধান করবে এবং কনফিগারেশনটি পুনরায় লোড না হওয়া পর্যন্ত পরবর্তী অনুরোধগুলির জন্য এটি ক্যাশে রাখবে।

ক্যাশ এন্ট্রির মেয়াদ শেষ হয়ে গেলে আপনি ডোমেইনটিকে পুনরায় সমাধান করতে নাম সার্ভার ব্যবহার করতে এনজিনেক্সকে বলতে পারেন :

location /mylocation {
    # use google dns to resolve host after IP cached expires
    resolver 8.8.8.8;
    set $upstream_endpoint http://your.backend.server/;
    proxy_pass $upstream_endpoint;
}

প্রক্সি_পাসের দস্তাবেজগুলি ব্যাখ্যা করে যে এই কৌশলটি কেন কাজ করে:

প্যারামিটার মান ভেরিয়েবল থাকতে পারে। এই ক্ষেত্রে, যদি কোনও ঠিকানা কোনও ডোমেন নাম হিসাবে নির্দিষ্ট করা থাকে, বর্ণিত সার্ভার গ্রুপগুলির মধ্যে নামটি অনুসন্ধান করা হয়, এবং যদি খুঁজে না পাওয়া যায় তবে একটি সমাধানকারী ব্যবহার করে নির্ধারিত হয়।

যশ (tenzer.dk) "গতিশীল upstreams সঙ্গে nginx" বিস্তারিত ব্যাখ্যা, যা ফরোয়ার্ড URI উল্লিখিত সংক্রান্ত এই পদ্ধতির একটি সতর্কীকরণ কিছু প্রাসঙ্গিক তথ্য উপস্থিত রয়েছে জন্য।


1
এই উত্তরটি সোনার, আমার কাছে ঠিক কী হয়েছিল। আপস স্টোর পয়েন্টগুলি আউস এলবি এবং সমস্ত হঠাৎ গেটওয়ের সময়সীমা শেষ।
নাথন দো

2

একই সমস্যা ছিল। দেখা গেছে এটি আপ স্ট্রিম সার্ভারে আইপটিবল সংযোগ ট্র্যাকিংয়ের কারণে ঘটেছে। --state NEW,ESTABLISHED,RELATEDফায়ারওয়াল স্ক্রিপ্ট থেকে অপসারণ এবং conntrack -Fসমস্যা নিয়ে ফ্লাশিং পরে গেছে।


0

এনজিআইএনএক্স নিজেই এর মূল কারণ নাও হতে পারে।

যদি নাট গেটওয়েতে "প্রতি ভিএম উদাহরণে সর্বনিম্ন বন্দরগুলি" সেট করা থাকে - যা আপনার এনজিআইএনএক্স উদাহরণ এবং proxy_passগন্তব্যগুলির মধ্যে দাঁড়িয়ে থাকে - সমবর্তী অনুরোধের সংখ্যার জন্য খুব ছোট, এটি বাড়ানো দরকার।

সমাধান: NAT গেটওয়েতে ভিএম প্রতি বন্দরগুলির উপলভ্য সংখ্যা বৃদ্ধি করুন।

প্রসঙ্গ আমার ক্ষেত্রে, গুগল ক্লাউডে, নেট গেটওয়ে সহ একটি বিপরীত প্রক্সি এনজিআইএনএক্স একটি সাবনেটের ভিতরে রাখা হয়েছিল। এনজিআইএনএক্স উদাহরণটি NAT গেটওয়ের মাধ্যমে আমাদের ব্যাকএন্ড এপিআই (আপস্ট্রিম) এর সাথে যুক্ত একটি ডোমেনে অনুরোধগুলি পুনঃনির্দেশ করছিল।

জিসিপির এই ডকুমেন্টেশন আপনাকে এনজিআইএনএক্স 504 সময়সীমার সাথে কীভাবে প্রাসঙ্গিক তা বুঝতে সহায়তা করবে।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.