Hvordan lage tilpasset 404-feilside i NGINX


Hver gang NGINX støter på en feil når den prøver å behandle en klients forespørsel, returnerer den en feil. Hver feil inkluderer en HTTP-svarkode og en kort beskrivelse. Feilen vises vanligvis til en bruker via en enkel standard HTML-side.

Heldigvis kan du konfigurere NGINX til å vise tilpassede feilsider til brukerne av nettstedet eller nettapplikasjonen. Dette kan oppnås ved å bruke NGINXs error_page direktiv som brukes til å definere URI som skal vises for en spesifisert feil. Du kan også, valgfritt, bruke den til å endre HTTP-statuskoden i svarhodene som sendes til en klient.

I denne veiledningen vil vi vise hvordan du konfigurerer NGINX til å bruke egendefinerte feilsider.

Opprett en enkelt tilpasset side for alle NGINX-feil

Du kan konfigurere NGINX til å bruke en enkelt egendefinert feilside for alle feil som den returnerer til en klient. Start med å lage feilsiden din. Her er et eksempel, en enkel HTML-side som viser meldingen:

“Sorry, the page can't be loaded! Contact the site's administrator or support for assistance.” to a client.

Eksempel HTML Nginx egendefinert sidekode.

<!DOCTYPE html>
<html>
<head>

<style type=text/css>

* {
	-webkit-box-sizing: border-box;
	box-sizing: border-box;
}

body {
	padding: 0;
	margin: 0;
}

#notfound {
	position: relative;
	height: 100vh;
}

#notfound .notfound {
	position: absolute;
	left: 50%;
	top: 50%;
	-webkit-transform: translate(-50%, -50%);
	-ms-transform: translate(-50%, -50%);
	transform: translate(-50%, -50%);
}

.notfound {
	max-width: 520px;
	width: 100%;
	line-height: 1.4;
	text-align: center;
}

.notfound .notfound-error {
	position: relative;
	height: 200px;
	margin: 0px auto 20px;
	z-index: -1;
}

.notfound .notfound-error h1 {
	font-family: 'Montserrat', sans-serif;
	font-size: 200px;
	font-weight: 300;
	margin: 0px;
	color: #211b19;
	position: absolute;
	left: 50%;
	top: 50%;
		-webkit-transform: translate(-50%, -50%);
		-ms-transform: translate(-50%, -50%);
		transform: translate(-50%, -50%);
}

@media only screen and (max-width: 767px) {
	.notfound .notfound-error h1 {
		font-size: 148px;
	}
}

@media only screen and (max-width: 480px) {
	.notfound .notfound-error {
	height: 148px;
	margin: 0px auto 10px;
}
.notfound .notfound-error h1 {
	font-size: 120px;
	font-weight: 200px;
}
.notfound .notfound-error h2 {
	font-size: 30px;
}
.notfound a {
	padding: 7px 15px;
	font-size: 24px;
}
.h2 {
	font-size: 148px;
}
}
</style>
</head>
<body>
<div id="notfound">
	<div class="notfound">
		<h1>Sorry the page can't be loaded!</a></h1>
		<div class="notfound-error">
			<p>Contact the site's administrator or support for assistance.</p>
		</div>
	</div>
</div>
</body>
</html>

Lagre filen med et passende navn, for eksempel error-page.html, og lukk den.

Deretter flytter du filen til dokumentrotkatalogen (/var/www/html/). Hvis katalogen ikke eksisterer, kan du opprette den ved å bruke mkdir-kommandoen, som vist:

sudo mkdir -p  /var/www/html/
sudo cp error-page.html /var/www/html/

Konfigurer deretter NGINX til å bruke den egendefinerte feilsiden ved å bruke error_page-direktivet. Opprett en konfigurasjonsfil kalt custom-error-page.conf under /etc/nginx/snippets/ som vist.

sudo mkdir /etc/nginx/snippets/
sudo vim /etc/nginx/snippets/custom-error-page.conf 

Legg til følgende linjer:

error_page 404 403 500 503 /error-page.html;
location = /error-page.html {
        root /var/www/html;
        internal;
}

Denne konfigurasjonen forårsaker en intern omdirigering til URI/error-page.html hver gang NGINX støter på noen av de spesifiserte HTTP-feilene 404, 403, 500 og 503. posisjon-konteksten forteller NGINX hvor du finner feilsiden din.

Lagre filen og lukk den.

Ta med filen i http-konteksten slik at alle serverblokker bruker feilsiden, i /etc/nginx/nginx.conf-filen:

sudo vim /etc/nginx/nginx.conf

include-katalogen forteller NGINX å inkludere konfigurasjonen i den angitte .conf-filen:

include snippets/custom-error-page.conf;

Alternativt kan du inkludere filen for en bestemt serverblokk (ofte kjent som vhost), for eksempel /etc/nginx/conf.d/mywebsite. konf. Legg til inkluder-direktivet ovenfor i serverkonteksten {}.

Lagre NGINX-konfigurasjonsfilen og last inn tjenesten på nytt som følger:

sudo systemctl reload nginx.service

Og test fra en nettleser om oppsettet fungerer bra.

Lag forskjellige tilpassede sider for hver NGINX-feil

Du kan også sette opp forskjellige egendefinerte feilsider for hver HTTP-feil i NGINX. Vi oppdaget en god samling av egendefinerte nginx-feilsider laget av Denys VitaliGithub.

For å sette opp depotet på serveren din, kjør følgende kommandoer:

sudo git clone https://github.com/denysvitali/nginx-error-pages /srv/http/default 
sudo mkdir /etc/nginx/snippets/
sudo ln -s /srv/http/default/snippets/error_pages.conf /etc/nginx/snippets/error_pages.conf
sudo ln -s /srv/http/default/snippets/error_pages_content.conf /etc/nginx/snippets/error_pages_content.conf

Deretter legger du til følgende konfigurasjon enten i http-konteksten eller hver serverblokk/vhost:

include snippets/error_pages.conf;

Lagre NGINX-konfigurasjonsfilen og last inn tjenesten på nytt som følger:

sudo systemctl reload nginx.service

Test også fra en nettleser om konfigurasjonen fungerer etter hensikten. I dette eksemplet testet vi 404-feilsiden.

Det er alt vi hadde for deg i denne guiden. NGINXs error_page-direktiv lar deg omdirigere brukere til en definert side eller ressurs eller URL når en feil oppstår. Den tillater også valgfritt modifikasjon av HTTP-statuskoden i svaret til en klient. For mer informasjon, les nginx-feilsidedokumentasjonen.