Maksājuma metodes Abuse

Fiksēt 504 vārteja laiks out Nginx

20.02.2024, 23:31

504 Gateway Timeout kļūda lietojumprogrammā Nginx nozīmē, ka serveris, kurā darbojas Nginx, nav varējis saņemt atbildi no starpniekserveri noteiktā laika periodā. Tas parasti notiek tāpēc, ka starpniekserveris nespēj apstrādāt pieprasījumu norādītajā laikā vai arī tāpēc, ka starp Nginx un starpniekserveri ir sakaru problēmas.

Kāpēc parādās 504 Gateway Timeout

Kļūda rodas, ja Nginx serveris darbojas starpniekservera režīmā. Tas notiek, ja tiek izmantots php-fpm vai Apache. Ja to tulkojam no angļu valodas uz krievu valodu, iegūstam šādu tekstu - ir pārsniegts laiks, kas vajadzīgs, lai gaidītu atbildi no servera.

Šādai uzvedībai ir vairāki iemesli:

  • PHP vai citas valodas skripts ir pilnībā apstājies un vairs neatgriež nekādu atbildi;
  • skripts darbojas ļoti ilgi, bet Nginx ir konfigurēts intervāls, lai atjaunotu savienojumu, ja mērķa serveris nav atbildējis uz pieprasījumu noteiktajā laikā;
  • serveris ir pārslogots un tam nav laika apkalpot visus klientus un atgriezt atbildes uz visiem Nginx pieprasījumiem.

Tagad parunāsim par to, ko jūs varat darīt un kā novērst 504 Gateway Timeout kļūdu.

Kā novērst 504 gateway time out Nginx kļūdu?

Pirmais, ko izmēģināt praksē, ir tas, ka, ja jūsu serverim, php-fpm vai apache trūkst sistēmas resursu, piemēram, atmiņas vai procesora, apskatiet brīvo RAM, izmantojot free komandu:

$ free -h

Procesora noslodzi varat noskaidrot, izmantojot komandu htop:

$ htop

Ja redzat, ka PHP aizņem visu CPU laiku, tas nozīmē, ka problēma ir servera resursos. Varat mēģināt tikt galā ar vietnes dzinēju, optimizēt resursus vai izvēlēties jaudīgu VPS serveri.

Otrais variants - ja tas bija plānots tā, lai skripts darbotos ilgu laiku. Šajā gadījumā jums ir jākonfigurē Nginx, lai gaidītu atbildi no Apache vai php-fpm. Lai atrisinātu problēmu php-fpm gadījumā, jums tikai jāpievieno divas rindas fastgci konfigurācijas blokā:

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 nozīmē 300 sekundes, lielākajai daļai skriptu tas ir pietiekami, taču vajadzības gadījumā nav grūti iestatīt arī vairāk. Kļūda 504 var rasties arī tad, ja Nginx tiek izmantots kā starpniekserveris Apache vai jebkuram citam tīmekļa serverim, tad arī ir jākonfigurē starpnieka gaidīšanas laiks.

Pievienojiet šīs rindas servera sadaļā:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Šajā gadījumā mums ir iestatīts 600 sekunžu gaidīšanas laiks.

Tagad mums jārestartē Nginx:

$ sudo systemctl restart nginx

Vēl viens iemesls un tā risinājums, ja skripts karājas. Ja skriptu palaidīsiet paši, uzreiz redzēsiet, kas pakāries, bet, ja ar šādu kļūdu saskaras lietotāji, tā ir nopietnāka problēma. Jūs varat redzēt, vai jūsu lietotāji sastopas ar šādām kļūdām un kur tās rodas, izmantojot komandu:

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

Sīkāku informāciju dažkārt var redzēt error.log:

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

Turklāt, ja problēma ir php-fpm, varat izsekot, kuri skripti darbojas lēni, izmantojot iebūvēto funkciju slow-log.

Lai to aktivizētu, pievienojiet pūla konfigurācijai šādas rindas:

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

Ar to instrukcija ir pabeigta.