10 méně časté příčiny chyby interního serveru Apache CGI a jak je opravit

režim CGI Apache umožňuje webmasterům snížit využití paměti. Je to preferovaný způsob, jak spustit mnoho webových stránek s nízkým provozem.

ale režim CGI je docela citlivý na věci, jako jsou oprávnění a kódování souborů, což vede k interní chybě serveru 500.

Apache CGI Internal Server Error-Error display

v naší roli podpůrných inženýrů pro webové hostitele jsme viděli celou řadu příčin této chyby.

některé běžné příčiny a jejich opravy jsou:

  • nesprávná oprávnění k souborům nebo složkám – soubory a adresáře skriptů musí mít přesně 755 oprávnění. Na některých serverech mohou adresáře potřebovat 750 oprávnění.
  • nesprávné vlastnictví (user & skupinové problémy) – vlastnictví souboru by mělo být nastaveno na „USER: ApacheUser „nebo“ USER: USER “ v závislosti na konfiguraci Apache.
  • nesprávné kódování – soubory nahrané v binárním režimu selžou a měly by být znovu nahrány jako ASCII.

téměř 80% chyb 500 problémů by bylo vyřešeno těmito opravami.

tento článek je o zbývajících 20% příčin, které je těžké najít a opravit.

méně časté příčiny chyby interního serveru Apache CGI

500 Interní chyba serveru je způsob webového serveru, který říká: „něco se pokazilo, když jsem se pokusil zobrazit stránku. Nevím co.“

pokud se nejedná o problémy s povolením nebo vlastnictvím, může to být cokoli od chyb aplikace & Apache misconfigurations až po bloky brány firewall & chyby systému souborů.

zde jsou top 10 neobvyklé problémy, které jsme viděli v našem průběhu práce.

chybějící moduly

webové aplikace spoléhají na mnoho PHP nebo Perl „modulů“ pro specifické funkce.

některé takové moduly jsou součástí standardního nastavení serveru, ale mnoho z nich není.

viděli jsme, že po migraci nebo a během nového nastavení webových stránek skripty často selhávají, protože nejsou přítomny všechny požadované moduly.

protokol chyb říká, že existují“ nedefinované „funkce nebo“ metody “ neexistují.

Chcete-li to opravit, projdeme specifikace požadavků na aplikaci a nainstalujeme všechny chybějící moduly.

síťové časové limity (volání API, vzdálené skripty atd.)

některé webové aplikace získávají data ze vzdálených serverů (např. údaje o počasí).

pokud je z nějakého důvodu toto připojení ke vzdálenému serveru přerušeno, webová aplikace chvíli počká a poté zobrazí chybu časového limitu.

Apache pak hlásí tento stav jako chybu 500.

tento problém může být obtížné vyřešit, protože nemusí opustit záznam protokolu.

detekujeme problémy s časovým limitem kontrolou dlouho čekajících odchozích připojení a opravíme je deaktivací funkce aplikace, která vyžaduje odchozí připojení.

staré cesty programu (kompilátoru)

první řádek v každé aplikaci CGI (nazývané Shebang) obsahuje cestu k programu, který ji má spustit.

pro např. Skripty Perl mají tuto cestu:

#!/usr/bin/perl

tato cesta se však může lišit podle dodavatelů operačního systému a nastavení vlastní kompilace.

skript tedy vyhledá programový soubor v určitém umístění a pokud tam není nalezen, skript zobrazí chybu 500.

dvě účinné metody jsou:

  • použijte cesty definované v prostředí serveru – cesty všech programů jsou uloženy v proměnné „prostředí“ serveru. Takže změníme první řádek voláním prostředí, jako tak:
    • #!/usr/bin/env perl
    • tím se ujistíte, že bez ohledu na to, kde je Perl nastaven, bude cesta k dispozici skriptu.
  • Definujte cesty programu v Apache config – použijte direktivy“ AddHandler „a“ Action “ Apache ke spuštění všech souborů se správným programem. Například. zde je návod, jak nastavit PHP jako CGI:
    • AddHandler application/x-httpd-php5 php
    • Action application/x-httpd-php5 /local-bin/php-cgi

chyby v kódu aplikace

majitelé webových stránek mohou dělat malé chyby, jako je odstranění“; “ nebo vložení zbloudilého znaku při úpravách aplikací nebo konfiguračních souborů.

to bude mít za následek, že aplikace nebude spuštěna, ale Apache vyplivne pouze záhadnou zprávu „Interní chyba serveru“.

tyto problémy zjišťujeme analýzou souborů protokolu a vyřešíme je buď opravou chyby kódu, nebo deaktivací pluginu / addonu / motivu, který způsobuje chybu.

staré konfigurační soubory s nesprávnými cestami modulů

webové stránky jsou často přizpůsobeny prostředí serveru a programovým cestám.

při migraci webů budou jejich konfigurační soubory obsahovat tyto staré cesty, které nemusí být kompatibilní s novým serverem.

viděli jsme případy, kdy webové aplikace používají vlastní konfigurační soubory (řekněme php.ini) načíst funkce knihovny. To se nezdaří, když se cesta změní na novém serveru.

v takových případech odstraníme pevně kódované cesty programu a místo toho použijeme proměnné prostředí k automatickému získání umístění programu.

bezpečnostní omezení (firewall webové aplikace, SELinux atd.)

většina serverů má v dnešní době brány firewall webových aplikací, jako je mod_security nebo ComodoWAF.

tyto brány firewall mohou způsobit chybu 500, pokud interpretuje požadavek stránky jako útok.

pro např. viděli jsme, že webové aplikace selhávají, protože volání externích souborů bylo interpretováno jako útok zahrnutí vzdáleného souboru mod_security.

v takových případech vytváříme vlastní pravidla pro vyloučení brány firewall, takže aplikace již nebude blokována, zatímco zabezpečení serveru není ovlivněno.

Změna nastavení SELinuxu z „vynucování“ na „přípustné“ nám také pomohla tuto chybu opravit.

No Exec (no execution) omezení na oddíl

CGI aplikace jsou prováděny jako programy.

k tomu potřebuje něco, co se nazývá privilegium „Execute“.

toto oprávnění „Execute“ je vypnuto pro veřejně přístupné oddíly, jako je „/ tmp „a oddíly pro ukládání dat, jako je „/ backup“, aby se zabránilo spuštění malwaru.

viděli jsme případy, kdy je tento bit „Execute“ vypnutý pro domovy webových stránek, což způsobuje selhání spuštění skriptu.

obnovujeme exec:

  • # mount -o remount,exec /home

Apache & .Chybná konfigurace htaccess (bez ExecCGI, bez AllowOverride atd.)

Apache potřebuje vědět, které adresáře obsahují CGI skripty.

, který je označen pomocí směrnice „ExecCGI“.

pro např. Chcete-li označit /cgi-bin/ jako adresář CGI, Apache by měl být nakonfigurován s:

<Directory /path/to/cgi-bin>
Options +ExecCGI
</Directory>

na některých serverech jsme viděli“ ExecCGI “ zakázáno v CGI-bin kvůli nesprávné konfiguraci v souboru Apache conf nebo an .htaccess v nadřazeném adresáři.

podobně jsme viděli směrnice související s CGI .htaccess se stává neúčinným, protože .htaccess nebyl povolen pomocí směrnice „AllowOverride“ v Apache config.

to vše může vést k neúspěšnému spuštění skriptu a následně k chybě 500.

nesprávná oprávnění v domovském adresáři

adresáře CGI jsou obvykle umístěny v domovském adresáři. Například. cesta k cgi-bin na serverech cPanel je:

/home/username/public_html/cgi-bin/

mnoho webmasterů se postará o změnu oprávnění adresáře cgi-bin a adresářů webových aplikací na 755, ale zapomenete zkontrolovat oprávnění domovského adresáře.

v některých konfiguracích Apache (např. při použití SuExec) by měl mít domovský adresář také oprávnění 755. Něco jiného než to (např. 777), způsobí selhání spuštění skriptu.

takže jednou z prvních věcí, které kontrolujeme spolu s oprávněními souboru skriptu, je kontrola oprávnění všech adresářů v cestě souboru.

nastavili jsme vše správně, abychom se ujistili, že skript bude spuštěn bez chyb.

Chroot související chyby, které přeruší cestu k souboru

v některých sdílených serverech je zabezpečení vynuceno omezením každého uživatele na uvězněné prostředí.

tím se zabrání jednomu uživateli v přístupu k souborům jiného uživatele.

ale taková prostředí mohou přerušit softwarové odkazy na programové soubory.

pro např. pokud jsou programy uloženy v „/ opt/php / bin/ „a jsou propojeny z“ / usr/bin / php/“, mohou se tyto odkazy rozbít.

Jedná se o velmi vzácné případy a opravíme je opětovnou konfigurací serveru (nebo webu), aby místo softlinků použil správnou cestu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.