Error decode JSON exrate Nginx 504 шлюзінің күту уақыты түзетілуде
Төлем әдістері Abuse

Nginx 504 шлюзінің күту уақыты түзетілуде

20.02.2024, 23:31

Nginx жүйесіндегі 504 шлюз күту уақыты қатесі Nginx іске қосылған сервер көрсетілген уақыт кезеңінде прокси серверден жауап ала алмағанын білдіреді. Бұл әдетте прокси сервер сұрауды берілген уақыт ішінде өңдей алмағандықтан немесе Nginx пен прокси сервер арасындағы байланыс ақауларына байланысты орын алады.

Неліктен 504 шлюз күту уақыты пайда болады?

Қате Nginx сервері прокси режимінде жұмыс істеп тұрғанда орын алады. Бұл php-fpm немесе Apache пайдалану кезінде орын алады. Ағылшын тілінен орыс тіліне аударсақ, біз мынаны аламыз - серверден жауап күтудің күту уақыты асып кетті.

Бұл мінез-құлықтың бірнеше себептері:

  • PHP сценарийі немесе басқа тілде толығымен қатып қалған және ешқандай жауап қайтармайды;
  • сценарий өте ұзақ уақыт жұмыс істейді, бірақ мақсатты сервер бөлінген жолдардағы сұрауға жауап бермесе, Nginx-те қосылымды қалпына келтіру үшін конфигурацияланған интервал бар;
  • сервер шамадан тыс жүктелген және барлық клиенттерге қызмет көрсетуге немесе барлық Nginx сұрауларына жауаптарды қайтаруға уақыт жоқ.

Енді не істеуге болатынын және 504 шлюзінің күту уақыты қатесін қалай шешуге болатыны туралы сөйлесейік.

Nginx 504 шлюзінің күту уақытын қалай түзетуге болады?

Іс жүзінде қолданып көруіңіз керек бірінші нәрсе - егер сіздің серверіңізде, php-fpm немесе apache-де жүйелік ресурстар жеткіліксіз болса, мысалы, жад немесе процессор, free пәрменді пайдаланып бос ЖЖҚ-ны тексеріңіз:

 $ free -h

CPU жүктемесін htop пәрменімен білуге болады:

 $ htop

Егер сіз PHP процессорының барлық уақытын алатынын көрсеңіз, сервер ресурстарында мәселе бар. Сіз сайт қозғалтқышын анықтауға, ресурсты оңтайландыруға немесе қуатты VPS серверін таңдауға болады.

Екінші нұсқа, егер сценарий ұзақ уақыт жұмыс істейді деп жоспарланған болса. Бұл жағдайда Apache немесе php-fpm жауабын күту үшін Nginx-ті конфигурациялау қажет. php-fpm жағдайындағы мәселені шешу үшін fastgci конфигурация блогына екі жолды ғана қосу керек:

 fastcgi_send_timeout 300; fastcgi_read_timeout 300;

300 300 секундты білдіреді, көптеген сценарийлер үшін бұл жеткілікті, бірақ қажет болса, одан да көп орнату қиын болмайды. Сондай-ақ, 504 қатесі Nginx Apache немесе кез келген басқа веб-сервер үшін прокси ретінде пайдаланылған кезде орын алуы мүмкін, содан кейін прокси күту уақытын теңшеу керек.

server бөліміне мына жолдарды қосыңыз:

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

Бұл жағдайда бізде 600 секунд күту уақыты бар.

Енді Nginx-ті қайта іске қосу керек:

 $ sudo systemctl restart nginx

Сценарий қатып қалса, тағы бір себеп және оның шешімі. Сценарийді өзіңіз іске қоссаңыз, оның қатып қалғанын бірден көресіз, бірақ пайдаланушылар арасында мұндай қате орын алса, бұл күрделі мәселе. Пайдаланушыларыңыздың осындай қателіктерге тап болғанын және олардың қай жерде пайда болатынын пәрмен арқылы көре аласыз:

 $ fgrep -i " 504 " /var/log/nginx/access.log

Толығырақ ақпаратты кейде error.log сайтында көруге болады:

 $ fgrep -i " 504 " /var/log/nginx/error.log

Одан әрі, мәселе php-fpm ішінде болса, кірістірілген slow-log функциясын пайдаланып қай сценарийлер баяу жұмыс істейтінін бақылай аласыз.

Оны белсендіру үшін бассейн конфигурациясына келесі жолдарды қосыңыз:

 $ sudo vi /etc/php-fpm.d/www.conf slowlog = /var/log/php-fpm/www-slow.log request_slowlog_timeout = 5s

Бұл нұсқауларды аяқтайды.