NGINX-de 404 säwlik sahypasyny nädip döretmeli


NGINX her gezek müşderiniň haýyşyny gaýtadan işlemäge synanyşanda bir säwlik bilen ýüzbe-ýüz bolanda, ýalňyşlyk gaýtarylýar. Her säwlikde HTTP jogap kody we gysga düşündiriş bar. Erroralňyşlyk, adatça ýönekeý HTML sahypasy arkaly ulanyja görkezilýär.

Bagtymyza, sahypaňyzyň ýa-da web programmaňyzyň ulanyjylaryna ýörite ýalňyş sahypalaryny görkezmek üçin NGINX sazlap bilersiňiz. Bu, belli bir ýalňyşlyk üçin görkeziljek URI-ni kesgitlemek üçin ulanylýan NGINX-iň error_page direktiwasyny ulanyp gazanyp bolar. Mundan başga-da, islege görä müşderä iberilen jogap sözbaşylarynda HTTP ýagdaý koduny üýtgetmek üçin ulanyp bilersiňiz.

Bu gollanmada, adaty ýalňyşlyk sahypalaryny ulanmak üçin NGINX-i nädip sazlamalydygyny görkezeris.

NGhli NGINX säwlikleri üçin ýekeje sahypa dörediň

Müşderä gaýdyp gelýän ähli ýalňyşlyklar üçin ýekeje ýalňyşlyk sahypasyny ulanmak üçin NGINX sazlap bilersiňiz. Erroralňyş sahypaňyzy döretmekden başlaň. Ine, mysal, habary görkezýän ýönekeý HTML sahypasy:

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

HTML Nginx Hususy sahypa kody.

<!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>

Faýly degişli at bilen ýazyň, mysal üçin error-page.html we ýapyň.

Ondan soň faýly resminamanyň kök katalogyna geçiriň (/ var/www/html /). Katalog ýok bolsa, görkezilişi ýaly mkdir buýrugyny ulanyp döredip bilersiňiz:

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

Soňra error_page direktiwasyny ulanyp, adaty säwlik sahypasyny ulanmak üçin NGINX sazlaň. Görkezilişi ýaly/etc/nginx/snippets/astynda custom-error-page.conf atly konfigurasiýa faýly dörediň.

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

Oňa aşakdaky setirleri goşuň:

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

Bu konfigurasiýa, NGINX her gezek 404, 403, 500 we 503 görkezilen HTTP ýalňyşlyklary bilen ýüzbe-ýüz bolanda URI/error-page.html içerki gönükdirmä sebäp bolýar. Locationerleşiş konteksti NGINX-a ýalňyş sahypaňyzy nireden tapmalydygyny aýdýar.

Faýly ýazdyryň we ýapyň.

Indi faýly http kontekstine goşuň, ähli serwer bloklary säwlik sahypasyny /etc/nginx/nginx.conf faýlynda ulanar:

$ sudo vim /etc/nginx/nginx.conf

Goşulýan katalog NGINX-a konfigurasiýany görkezilen .conf faýlyna goşmagy tabşyrýar:

include snippets/custom-error-page.conf;

Ativea-da bolmasa, faýly belli bir serwer bloky (köplenç vhost diýilýär) üçin goşup bilersiňiz, mysal üçin /etc/nginx/conf.d/mywebsite.conf. Aboveokardakylary goşuň {} serwerindäki görkezmäni.

NGINX konfigurasiýa faýlyňyzy ýazdyryň we hyzmaty aşakdaky ýaly täzeden açyň:

$ sudo systemctl reload nginx.service

Gurluşyň gowy işleýändigini brauzerden barlaň.

Her NGINX säwligi üçin dürli aýratyn sahypalary dörediň

Şeýle hem, NGINX-daky her HTTP ýalňyşlygy üçin dürli ýalňyş sahypalaryny gurup bilersiňiz. Denys Witali tarapyndan Github-da döredilen adaty nginx säwlik sahypalarynyň gowy ýygyndysyny tapdyk.

Ammaryňyzy serweriňizde gurmak üçin aşakdaky buýruklary işlediň:

$ 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

Ondan soň, http kontekstiňize ýa-da her serwer blok/vhost-a aşakdaky konfigurasiýany goşuň:

include snippets/error_pages.conf;

NGINX konfigurasiýa faýlyňyzy ýazdyryň we hyzmaty aşakdaky ýaly täzeden açyň:

$ sudo systemctl reload nginx.service

Şeýle hem, konfigurasiýa göz öňünde tutulan ýaly işleýärmi, brauzerden barlaň. Bu mysalda 404 säwlik sahypasyny synagdan geçirdik.

Bu gollanmada siziň üçin bar zat. NGINX-iň error_page görkezmesi, ýalňyşlyk ýüze çykanda ulanyjylary kesgitlenen sahypa ýa-da çeşmä ýa-da URL-e gönükdirmäge mümkinçilik berýär. Mundan başga-da, müşderä jogap hökmünde HTTP status koduny üýtgetmäge mümkinçilik berýär. Has giňişleýin maglumat üçin nginx säwlik sahypasynyň resminamalaryny okaň.