পিএইচপি সেট_টাইম_লিমিট () ব্যবহার করে এনগিনেক্স 504 গেটওয়ে টাইমআউট আটকান


116

আমার পিএইচপি স্ক্রিপ্টটি যখন স্বাভাবিকের চেয়ে দীর্ঘায়িত হয় তখন আমি এনগিনেক্স থেকে 504 টাইমআউট বার্তা পাচ্ছি। set_time_limit(0)দেখে মনে হচ্ছে না! এনজিএনএক্সে পিএইচপি 5-এফপিএম চালানোর সময় এটি কাজ করে না? যদি তা হয় তবে সময়সীমা নির্ধারণের সঠিক উপায় কী?

ত্রুটি:

504 Gateway Time-out
nginx/1.2.7

উত্তর:


193

আপনি পিএইচপি-এফপিএম-এর সময়সীমা নির্ধারণ করতে পারেন এমন বেশ কয়েকটি উপায় রয়েছে। ইন /etc/php5/fpm/pool.d/www.confআমি এই লাইন যোগ করেছেন:

request_terminate_timeout = 180

এছাড়াও, /etc/nginx/sites-available/defaultআমি প্রশ্নে থাকা সার্ভারের অবস্থান ব্লকে নিম্নলিখিত লাইনটি যুক্ত করেছি:

fastcgi_read_timeout 180;

পুরো লোকেশন ব্লকটি দেখতে এমন দেখাচ্ছে:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_read_timeout 180;
    include fastcgi_params;
} 

এখন কেবল পিএইচপি-এফপিএম এবং এনজিনেক্স পুনরায় চালু করুন এবং 180 সেকেন্ডের চেয়ে কম সময় নেওয়ার অনুরোধের জন্য আর সময়সীমা থাকা উচিত নয়।


2
অন্য যে কেউ ভাবছেন, আমার জন্য ডিফল্ট (এনজিনেক্স + পিএইচপি 5-এফপিএম) ছিল 60 সেকেন্ড, সুতরাং যদি আপনি 60 গিগাবাইটের জন্য একটি স্ক্রিপ্টের জন্য "গেটওয়ে টাইমআউট" দেখতে পান, "ফাস্টসিজি_আর_টাইমআউট" সেটিংটি যুক্ত করা উচিত
মাইকেল

1
আমি কয়েক দিন ধরে এটি বের করার চেষ্টা করছি এবং @ পিমকিনের উত্তরটি আমার পক্ষে কার্যকর worked আমার মতো অন্যান্য অপেশাদারদের জন্য যারা এনগিনেক্স এবং পিএইচপি 5-এফপিএম পুনরায় চালু করবেন তা নিয়ে ভাবছেন, নিম্নলিখিত দুটি কমান্ড চালাবেন: সুডো সার্ভিস এনজিনেক্স পুনরায় চালু করুন এবং সুডো সার্ভিস পিএইচপি 5-এফপিএম পুনঃসূচনা কেবলমাত্র আমি আলাদাভাবে করেছি যে আমি এই সেটিংসটি কেবলমাত্র একটিতে প্রয়োগ করেছি আমার সার্ভারে সমস্ত ওয়েবসাইটের কনফিগারেশনের চেয়ে আমার ওয়েবসাইটগুলি।
পামেলা 21

4
দুঃখের বিষয়, আমি block ব্লকটিতে fastcgi_read_timeoutযা সেট করি তা নির্ধারণ করা যায় না location, এটি 60 সেকেন্ড পরেও শেষ হয়ে যায়।
স্পেন্সার উইলিয়ামস

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। অনেকগুলি সমাধানের চেষ্টা করেছে তবে কেবল এটিই কাজ করে। আমি ল্যারাভেল হোমস্টেড ব্যবহার করছিলাম এবং 504 গেটওয়ে টাইম আউট ত্রুটি ছিল এবং এটি এটি স্থির করেছে।
আনবু 369

যদি locationলারাভেল ব্যবহার করে থাকেন তবে আপনাকে এটিকে ব্লকটিতে সেট করতে হবে যা ডক্রোটের পরিবর্তে পিএইচপি স্ক্রিপ্টগুলি পরিচালনা করে।
রায়ান ডুভাল

50

এই লিঙ্কটি ব্যবহার করে দেখুন , কীভাবে এটি ঠিক করবেন এটির আরও ভাল সমাধান রয়েছে। সুতরাং পদক্ষেপগুলি হ'ল:

  1. ডিরেক্টরিতে nginx.confঅবস্থিত আপনার ফাইলটি খুলুন /etc/nginx
  2. http {বিভাগের আওতায় কোডের নীচে এটি যোগ করুন :

    client_header_timeout 3000;
    client_body_timeout 3000;
    fastcgi_read_timeout 3000;
    client_max_body_size 32m;
    fastcgi_buffers 8 128k;
    fastcgi_buffer_size 128k;
    

    দ্রষ্টব্য: এটি ইতিমধ্যে উপস্থিত থাকলে অনুসারে মান পরিবর্তন করুন।

  3. Nginx এবং php5-fpm পুনরায় লোড করুন।

    $ service nginx reload
    $ service php5-fpm reload
    

    ত্রুটিটি যদি অব্যাহত থাকে তবে মানগুলি বাড়ানো বিবেচনা করুন।


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

16
প্রশ্নটি ধীর স্ক্রিপ্টের কারণ জিজ্ঞাসা করছে না, এটি সার্ভারকে আরও অপেক্ষা করার জন্য একটি উপায় চাইছে। কখনও কখনও আপনার বিশেষ স্ক্রিপ্টগুলি চালানো দরকার যা খুব বেশি সময় নেয় এমন কাজগুলি করে এবং এটি কোনও খারাপ জিনিস নয়।
অর্ডার

আপডেট (উপরে) লিঙ্ক: codetweet.com/nginx/…
nadavkav

2
যাঁরা ভাবতে পারেন যে আইনতভাবে এত বেশি সময় লাগবে তা কী হতে পারে, উদাহরণস্বরূপ এটি কোনও ওয়েব-ইন্টারফেসের একটি ইনস্টলেশন স্ক্রিপ্ট হতে পারে যা একটি ডাটাবেসের সাথে সংযোগ স্থাপনের চেষ্টা করে এবং তারপরে অনেক প্রাথমিক সারণী তৈরি করে এবং ডেটা দিয়ে তা পূরণ করে .. একটি প্রতিক্রিয়া আগে বেশ কিছুটা সময় নিতে পারে।
imme

মনে রাখবেন এই বিশ্বব্যাপী সেটিংসগুলি প্রতি সাইটের সেটিংসে ওভাররাইড হয়ে যাবে /etc/nginx/sites-available/mysite.com
ম্যাক

11

এনজিএনএক্স জারি হওয়া সময়সীমা রোধ করতে আপনি পিএইচপি ব্যবহার করতে পারবেন না।

আরও সময় proxy_read_timeoutনির্দেশিকা দেখতে অনুমতি দিতে nginx কনফিগার করতে ।


এটি যে সমস্যার মুখোমুখি হয়েছি তা সমাধান করেছে যেখানে 504s আমার ভিজাগর বাক্সে প্রদর্শিত হবে (ভ্যাব্রোব্যাশ ব্যবহার করে)।
অ্যান্ডি ফ্লেমিং

2
আমি বিশ্বাস করি এই উত্তরটি শুধুমাত্র তখনই প্রযোজ্য যদি আপনি কেবলমাত্র প্রক্সি সার্ভার হিসাবে এনগিনেক্স ব্যবহার করছেন using আপনি যদি Nginx কে আপনার প্রাথমিক ওয়েব সার্ভার হিসাবে (পিএইচপি-এফপিএম সহ) ব্যবহার করেন তবে এটি কাজ করবে না।
অরর্ড

10

সঠিক উত্তরটি আপনার এনগিনেক্স কনফিগারেশনে ফাস্টসিজি_ড্রেডটাইমআউট বৃদ্ধি করছে
যে হিসাবে সহজ!


7
 sudo nano /etc/nginx/nginx.conf

এই ভেরিয়েবলগুলি nginx.conf ফাইলটিতে যুক্ত করুন:

http {  
  # .....
  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;
}

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

service nginx reload

4

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

  1. অনুরোধকারীর কাছ থেকে অনুরোধের সময়সীমা শেষ - টাইমআউট শিরোনাম সেট করতে হবে (অনুরোধ লাইব্রেরিতে শিরোনাম কনফিগারেশন দেখুন)
  2. অনুরোধটি করার সময় nginx থেকে সময়সীমা শেষ (প্রক্সাইড সার্ভারে ফরোয়ার্ড দেওয়ার আগে) উদাহরণস্বরূপ: বিশাল ফাইল আপলোড করা হচ্ছে
  3. প্রক্সি সার্ভারে ফরোয়ার্ড করার পরে সময়সীমা শেষ হওয়ার পরে সার্ভার সময়মতো nginx জবাব দেয় না। যেমন: সার্ভারে চলমান সময় সাপেক্ষ স্ক্রিপ্টগুলি

সুতরাং প্রতিটি ইস্যুগুলির সমাধানগুলি নিম্নরূপ।

  1. টাইমআউট শিরোনাম সেট করুন যেমন: এজ্যাক্সে

$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});

  1. nginx ক্লায়েন্টের সমাপ্তি

    http{
         #in seconds
        fastcgi_read_timeout 600;
        client_header_timeout 600;
        client_body_timeout 600;
     }
  2. এনগিনেক্স প্রক্সাইড সার্ভারের সময়সীমা শেষ

    http{
      #Time to wait for the replying server
       proxy_read_timeout 600s;
    
    }

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


1

আপনাকে অতিরিক্ত এনগিনেক্স নির্দেশিকা (এর জন্য ngx_http_proxy_module) যুক্ত করতে হবে nginx.conf, উদাহরণস্বরূপ:

proxy_read_timeout 300;

মূলত এনজিন্সের proxy_read_timeoutনির্দেশিকা প্রক্সি সময়সীমা পরিবর্তন করে, এটি FcgidIOTimeoutএমন স্ক্রিপ্টগুলির জন্য যা খুব বেশি শান্ত থাকে এবং FcgidBusyTimeoutএটি এমন স্ক্রিপ্টগুলির জন্য যেগুলি কার্যকর করতে খুব বেশি সময় নেয়।

এছাড়াও আপনি যদি ফাস্টসিজিআই অ্যাপ্লিকেশন ব্যবহার করছেন তবে এই বিকল্পগুলিও বাড়িয়ে দিন:

FcgidBusyTimeout 300
FcgidIOTimeout 250

তারপরে nginx এবং PHP5-FPM পুনরায় লোড করুন।

Plesk

প্লেস্কে, আপনি এটিকে অতিরিক্ত এনজিএনএক্স নির্দেশের অধীনে ওয়েব সার্ভার সেটিংসে যুক্ত করতে পারেন ।

এইচটিটিপি-র অতিরিক্ত নির্দেশের অধীনে ওয়েব সার্ভার সেটিংসে ফাস্টসিজিআই চেক করার জন্য

দেখুন: কীভাবে প্লেস্কে ফাস্টসিজিআই সময়সীমা সমাধান করবেন?


FcgidBusyTimeoutপরিবর্তনশীল কি কেবল অ্যাপাচি-র জন্য বিদ্যমান নয় ?
স্লাভিক

0

যেহেতু আপনি পিএইচপি-এফপিএম ব্যবহার করছেন আপনার কাছে থাকা আবেদনগুলির প্রসেসিংয়ের জন্য দ্রুতcc_finish_request () এর সুবিধা নেওয়া উচিত যা আপনি আরও বেশি সময় নিতে পারেন।


-1

set_time_limit(0)পিএইচপি-এফপিএম বা অনুরূপ প্রক্রিয়া পরিচালক ব্যবহার করার সময় অকেজো Using

বটমলাইন ব্যবহার করার set_time_limitসময় ব্যবহার করা হয় না php-fpm, আপনার এক্সিকিউশন সময়সীমা বাড়ানোর জন্য, এই টিউটোরিয়ালটি পরীক্ষা করে দেখুন


8
এখানে উত্তরের কিছু ব্যাখ্যা সরবরাহ করতে পারে পাশাপাশি লিঙ্কটির মেয়াদ শেষ হলে এই উত্তরটি অপ্রচলিত হতে পারে।
লক্ষ্মী

-7

আমি কনফিগার করে এই সমস্যাটি সমাধান করব আপাচে! সমস্ত পদ্ধতি (এই বিষয়বস্তুতে) আমার পক্ষে ভুল chan

Timeout 3600

তারপরে আমার স্ক্রিপ্টের কাজ!


5
প্রশ্নটি nginx বলেছে, আপনার যদি অ্যাপাচি নিয়ে সমস্যা হয় তবে আপনার এটি অনুসন্ধান করা উচিত।
হোগান

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