V rámci víkendového odpočinku jsem se rozhodl konečně vyřešit chybové stránky na svém serveru. Jedná se o jednoduché boostrap šablony, které aktuálně zobrazují hlášku v jednom ze 3 jazyků: CZ, DE, EN. Abych zachoval statickou podobu stránek, text se mění pomocí javascriptu. Zdrojové soubory jednotlivých chybových stránek se nachází na mém GitHubu. Zatím jsem vytvořil stránky pro HTTP 403, 404, 500, 502, 503. Jestli se rozhodnete je použít, musíte provést následující drobné úpravy.

Google Analytics

Šablony obsahují měřící Google Analytics skript. Pro boty zkoušející různé stránky to samozřejmě smysl nemá. Skript se nachází v hlavičce a místo UA-XXXXXXXXX-X vložte své Tracking id. V případě, že napojení na GA nevyužijete, můžete celý skript odstranit.


<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXXX-X"> </script>
<script>
	window.dataLayer = window.dataLayer || [];
	function gtag() { dataLayer.push(arguments); }
	gtag('js', new Date());

	gtag('config', 'UA-XXXXXXXXX-X');
</script>

Patička

V patičce mám svůj copyright :). Tak si jej nezapomeňte změnit. A s novým rokem přepsat rok.


<footer class="footer">
    <div class="container text-center">
        <span>© 2018 Tomáš Večeřa</span>
    </div>
</footer>

Nastavení NGINX

Jelikož na svých serverech využívám Nginx, popíšu konfiguraci pouze na tomto serveru. Jak nastavit např. Apache najdete tady – Custom Error Responses.

Jednou ze zvláštností Nginx serveru je to, že má chybové stránky natvrdo v kódu. Naštěstí umožňuje konfiguračně nastavit vlastní chybové stránky.

Stránky s chybami můžete nakonfigurovat přes soubor /etc/nginx/sites-available/default pro výchozí doménu, nebo můžete přidat vlastní chybové stránky pouze do konfigurace konkrétní domény. Mě běží na serveru několik webových aplikací na různých doménách a musel jsem provést konfiguraci pro konkrétní doménu.


sudo vim /etc/nginx/sites-available/default

Konfigurace


server {
        listen 443 default_server;
        
		. . .

  		# Custom error pages
  		error_page 401 /error/e401.html;
		error_page 403 /error/e403.html;
		error_page 404 /error/e404.html;
		error_page 405 /error/e405.html;
		error_page 500 501 504 /error/e500.html;
		error_page 502 /error/e502.html;
		error_page 503 /error/e503.html;

		location ^~ /error/ {
			root /var/www/html/;
			internal;
		}
}

Jelikož na části domén omezuji přístup na konkrétní IP adresy, výše uvedená konfigurace nezafungovala. Důvodem je, že Nginx zablokuje kromě přístupu na stránky, taky stránku s chybovou hláškou. Proto je v takovém případě nutné stránky direktivou allow all povolit pro všechny příchozí klienty.


location ^~ /error/ {
    root /var/www/html/;
    allow all;
  }

Restart Nginx

Po úpravě je dobré konfiguraci prověřit přes příkaz:


sudo nginx -t

Hlavně u produkčních prostředích je důležité na tuto kontrolu nezapomínat. Příkaz sice neodhalí všechny problémy a chyby, výrazně tím snížíte riziko výpadku, kdy po restartovaní serveru Nginx nenastartuje z důvodu např. syntaktické chyby v konfiguračním souboru domény.

Nakonec restartujte Nginx:


sudo service nginx restart