404 Not Found je chyba, která se objeví při pokusu o přístup k webové stránce nebo zdroji, který nebyl na serveru nalezen. Nginx je webový server a proxy server, který lze použít k obsluze webových stránek. Chyba 404 Not Found Nginx znamená, že požadovaná stránka nebo prostředek nebyly na serveru, který používá Nginx, nalezeny.
Pokud skript php neměl dostatek paměti RAM ke spuštění a jeho proces byl systémem zastaven, může systém Nginx také vrátit chybu 404.
Tuto situaci uvidíte, když skript běží dlouhou dobu a poté vrátízprávu "404 Not Found" nebo chybovou stránku vašeho enginu. Obvykle je tato chyba viditelná také v protokolu ladění.
Problém se řeší uvolněním paměti na serveru, často k tomu může dojít kvůli úniku paměti v php, kdy procesy php-fpm zabírají téměř veškerou paměť na serveru. Restartováním php-fpm se tento problém částečně vyřeší:
$ systemctl restart php-fpm
Lze této situaci do budoucna předejít? Odpověď zní ano, lze. K tomu je třeba nakonfigurovat automatické restartování procesů.
Chcete-li v systému Linux nakonfigurovat automatické restartování procesů po určitém počtu požadavků, můžete použít nástroje pro správu procesů, jako je systemd nebo supervisord.
V adresáři /etc/systemd/system/ vytvořte soubor s příponou .service s konfigurací procesů. Například soubor php-fpm.service
[Unit]
Description=PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/php-fpm
Restart=always
RestartSec=3
StartLimitInterval=0
StartLimitBurst=10
[Install]
WantedBy=multi-user.target
V tomto příkladu parametr StartLimitBurst nastavuje počet restartů před dočasným vypnutím procesu.
Po vytvoření souboru služby spusťte příkaz pro restart systemd a aktivaci nové služby:
sudo systemctl daemon-reload
sudo systemctl enable php-fpm.service
sudo systemctl start php-fpm.service
Nainstalujte ji pomocí správce balíčků vaší linuxové distribuce. Poté vytvořte konfigurační soubor pro svůj proces v adresáři /etc/supervisor/conf.d/. Například soubor php-fpm.conf:
[program:php-fpm]
command=/usr/sbin/php-fpm
autorestart=true
startretries=10
V tomto příkladu parametr startretries nastavuje počet pokusů o restartování procesu.
Po vytvoření konfiguračního souboru restartujte supervisord:
sudo supervisorctl reread
sudo supervisorctl update
Tyto kroky vám pomohou nastavit automatické restartování procesů po zpracování určitého počtu požadavků v systému Linux.