Kako namestiti Nginx z navideznimi gostitelji in SSL certifikatom


Nginx (okrajšava za Engine-x) je brezplačen, odprtokodni, zmogljiv, zmogljiv in prilagodljiv strežnik HTTP in povratni proxy, poštni in standardni proxy strežnik TCP/UDP. Je enostaven za uporabo in konfiguriranje, s preprostim jezikom konfiguracije. Nginx je zaradi svoje razširljivosti in zmogljivosti zdaj najprimernejša programska oprema za spletni strežnik za oskrbo močno obremenjenih spletnih mest.

V tem članku bomo razpravljali o tem, kako uporabljati Nginx kot strežnik HTTP, ga konfigurirati za streženje spletne vsebine in nastaviti navidezne gostitelje, ki temeljijo na imenih, ter ustvariti in namestiti SSL za varen prenos podatkov, vključno s samopodpisanim potrdilom za Ubuntu in CentOS .

Kako namestiti spletni strežnik Nginx

Najprej začnite z namestitvijo paketa Nginx iz uradnih skladišč z upraviteljem paketov, kot je prikazano.

------------ On Ubuntu ------------ 
$ sudo apt update 
$ sudo apt install nginx 

------------ On CentOS ------------
$ sudo yum update 
$ sudo yum install epel-release 
$ sudo yum install nginx 

Ko je paket Nginx nameščen, morate za zdaj zagnati storitev, omogočiti samodejni zagon ob zagonu in si ogledati njeno stanje z naslednjimi ukazi. Upoštevajte, da ga je treba v Ubuntuju samodejno zagnati in omogočiti, medtem ko je paket vnaprej konfiguriran.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx
$ sudo systemctl status nginx

Na tej točki bi moral biti spletni strežnik Nginx zagnan, stanje lahko preverite z ukazom netstat.

$ sudo netstat -tlpn | grep nginx

Če ima vaš sistem omogočen požarni zid, morate odpreti vrata 80 in 443, da prek njega z zagonom omogočite promet HTTP oziroma HTTPS.

------------ On CentOS ------------
$ sudo firewall-cmd --permanent --add-port=80/tcp
$ sudo firewall-cmd --permanent --add-port=443/tcp
$ sudo firewall-cmd --reload

------------ On Ubuntu ------------ 
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw reload 

Idealna metoda za preizkušanje namestitve Nginx in preverjanje, ali deluje in ali lahko služi spletnim stranem, je tako, da odprete spletni brskalnik in pokažete na IP strežnika.

http://Your-IP-Address
OR
http://Your-Domain.com

Na naslednjem zaslonu mora biti označena delujoča namestitev.

Kako konfigurirati spletni strežnik Nginx

Konfiguracijske datoteke Nginx se nahajajo v imeniku /etc/nginx , globalna konfiguracijska datoteka pa na /etc/nginx/nginx.conf na CentOS -u in Ubuntuju.

Nginx je sestavljen iz modulov, ki jih nadzirajo različne konfiguracijske možnosti, znane kot direktive. Direktiva je lahko preprosta (v imenu obrazca in vrednosti, zaključenih z ; ) ali blokirana (ima dodatna navodila, priložena {} ). Direktiva o blokih, ki vsebuje druge direktive, se imenuje kontekst.

Vse direktive so celovito razložene v dokumentaciji Nginx na spletni strani projekta. Za več informacij se lahko obrnete nanjo.

Na osnovni ravni se lahko Nginx uporablja za strežbo statične vsebine, kot so HTML in predstavnostne datoteke, v samostojnem načinu, kjer se uporablja samo privzeti strežniški blok (analogno Apacheju, kjer niso bili konfigurirani nobeni navidezni gostitelji).

Začeli bomo s kratkim pojasnjevanjem konfiguracijske strukture v glavni konfiguracijski datoteki.

 
$ sudo vim /etc/nginx/nginx.conf

Če pogledate to konfiguracijsko datoteko Nginx, bi morala biti konfiguracijska struktura prikazana na naslednji način in to se imenuje glavni kontekst, ki vsebuje številne druge preproste in blokirane direktive. Ves spletni promet se obravnava v kontekstu http.

user  nginx;
worker_processes  1;
.....

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
.....

events {
       	.....
}

http {
	server{
		…….
	}
	.....
}

Sledi vzorčna datoteka glavne konfiguracije Nginx (/etc/nginx/nginx.conf), kjer zgornji blok http vsebuje direktivo include, ki Nginxu pove, kje najti konfiguracijske datoteke spletnega mesta (konfiguracije navideznega gostitelja).

user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
	
    include /etc/nginx/conf.d/*.conf;
}

Upoštevajte, da boste v Ubuntuju našli tudi dodatno direktivo include (include/etc/nginx/sites-enabled/*;), kjer imenik/etc/nginx/sites-enabled/shranjuje povezave do konfiguracijskih datotek spletnih mest, ustvarjenih v/ etc/nginx/sites-available/, da omogočite spletna mesta. Če izbrišete simbolno povezavo, to spletno mesto onemogočite.

Glede na vaš vir namestitve boste privzeto konfiguracijsko datoteko spletnega mesta našli na /etc/nginx/conf.d/default.conf (če ste namestili iz uradnega skladišča NGINX in EPEL) ali/etc/nginx/sites-enabled/default (če ste namestili iz skladišč Ubuntu).

To je naš vzorčni privzeti strežniški blok nginx, ki se nahaja na /etc/nginx/conf.d/default.conf v preskusnem sistemu.

server {
    listen    80 default_server;
    listen    [::]:80 default_server;
    server_name    _;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
}

Kratka razlaga direktiv v zgornji konfiguraciji:

  • poslušaj: podaja vrata, na katerih posluša strežnik.
  • ime_strežnika: opredeljuje ime strežnika, ki je lahko natančno, nadomestno ime ali regularni izraz.
  • root: podaja imenik, iz katerega bo Nginx strežil spletnim stranem in drugim dokumentom.
  • index: določa vrste (-e) indeksnih datotek (-ov), ki jih je treba vročiti.
  • lokacija: uporablja se za obdelavo zahtev za določene datoteke in mape.

Ko iz spletnega brskalnika pokažete na strežnik z imenom hosthost localhost ali njegovim naslovom IP, ta obdela zahtevo in vroči datoteko /var/www/html/index.html in dogodek takoj shrani v svoj dnevnik dostopa (/ var/log/nginx/access.log) z odzivom 200 (OK). V primeru napake (neuspešen dogodek) zabeleži sporočilo v dnevnik napak (/var/log/nginx/error.log).

Če želite izvedeti več o prijavi v Nginx, si oglejte razdelek Kako konfigurirati oblike dostopa po meri ali zapise napak v Nginxu.

Namesto privzetih dnevniških datotek lahko za različna spletna mesta določite dnevniške datoteke po meri, kot jih bomo pogledali kasneje, v razdelku\"nastavitev navideznih gostiteljev na podlagi imen (strežniški bloki)".

Če želite omejiti dostop do svojega spletnega mesta/aplikacije ali nekaterih njenih delov, lahko nastavite osnovno preverjanje pristnosti HTTP. To lahko v bistvu uporabimo za omejitev dostopa do celotnega strežnika HTTP, posameznih strežniških blokov ali lokacijskih blokov.

Začnite z ustvarjanjem datoteke, ki bo s pripomočkom htpasswd shranila vaše poverilnice za dostop (uporabniško ime/geslo).

 
$ yum install httpd-tools		#RHEL/CentOS
$ sudo apt install apache2-utils	#Debian/Ubuntu

Na primer, na ta seznam dodajmo skrbnika uporabnika (lahko dodate čim več uporabnikov), kjer se za določitev datoteke z geslom uporablja možnost -c , -B za šifriranje gesla. Ko pritisnete [Enter], boste morali vnesti uporabniško geslo:

$ sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin

Nato dodelimo ustrezna dovoljenja in lastništvo datoteki z geslom (uporabnika in skupino nginx zamenjajte s www-podatki v Ubuntuju).

$ sudo chmod 640 /etc/nginx/conf.d/.htpasswd
$ sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd

Kot smo že omenili, lahko omejite dostop do svojega spletnega strežnika, enega spletnega mesta (z uporabo strežniškega bloka) ali določenega imenika ali datoteke. Za dosego tega lahko uporabimo dve koristni direktivi:

  • auth_basic - vklopi preverjanje uporabniškega imena in gesla s protokolom\"Osnovno preverjanje pristnosti HTTP".
  • auth_basic_user_file - podaja datoteko poverilnic.

Kot primer bomo pokazali, kako z geslom zaščititi imenik/var/www/html/protected.

server {
    listen         80 default_server;
    server_name    localhost;
    root           /var/www/html/;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
    location /protected/ {
        auth_basic              "Restricted Access!";
        auth_basic_user_file    /etc/nginx/conf.d/.htpasswd;
    }
}

Zdaj shranite spremembe in znova zaženite storitev Nginx.

$ sudo systemctl restart nginx 

Ko naslednjič usmerite brskalnik na zgornji imenik (http:// localhost/protected), boste morali vnesti poverilnice za prijavo (uporabniško ime administrator in izbrano geslo).

Uspešna prijava vam omogoča dostop do vsebine imenika, sicer boste dobili napako\"401 Zahtevano pooblastilo".

Kako nastaviti navidezne gostitelje na podlagi imen (strežniške bloke) v Nginxu

Kontekst strežnika omogoča shranjevanje in dostavljanje več domen/spletnih mest z istega fizičnega stroja ali navideznega zasebnega strežnika (VPS). Več kontekstnih strežniških blokov (ki predstavljajo navidezne gostitelje) je mogoče prijaviti v kontekstu http za vsako spletno mesto/domeno. Nginx se odloči, kateri strežnik obdeluje zahtevo na podlagi glave zahteve, ki jo prejme.

Ta koncept bomo prikazali z naslednjimi lažnimi domenami, od katerih se vsaka nahaja v določenem imeniku:

  • wearelinux-console.net - /var/www/html/wearelinux-console.net/
  • welovelinux.com - /var/www/html/welovelinux.com/

Nato vsakemu mestu v imeniku dodelite ustrezna dovoljenja.

$ sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html 
$ sudo chmod -R 755 /var/www/html/welovelinux.com/public_html 

Zdaj ustvarite vzorčno datoteko index.html v vsakem imeniku public_html.

<html>
	<head>
		<title>www.wearelinux-console.net</title>
	</head>
<body>
	<h1>This is the index page of www.wearelinux-console.net</h1>
</body>
</html>

Nato ustvarite konfiguracijske datoteke strežniškega bloka za vsako spletno mesto v imeniku /etc/httpd/conf.d.

$ sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
$ sudo vi /etc/nginx/conf.d/welovelinux.com.conf

V datoteko wearelinux-console.net.conf dodajte naslednjo deklaracijo bloka strežnika.

server {
    listen         80;
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html ;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Nato v datoteko welovelinux.com.conf dodajte naslednjo deklaracijo bloka strežnika.

server {
    listen         80;
    server_name    welovelinux.com;
    root           /var/www/html/welovelinux.com/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }
     
}

Če želite uporabiti nedavne spremembe, znova zaženite spletni strežnik Nginx.

$ sudo systemctl restart nginx

in usmerjanje vašega spletnega strežnika na zgornje naslove bi vam moralo omogočiti ogled glavnih strani lažnih domen.

http://wearelinux-console.net
http://welovelinux.com

Pomembno: Če imate omogočen SELinux, njegova privzeta konfiguracija ne dovoljuje Nginxu dostopa do datotek zunaj znanih pooblaščenih lokacij (na primer/etc/nginx za konfiguracije,/var/log/nginx za dnevnike,/var/www/html za spletne datoteke itd.).

To lahko rešite tako, da onemogočite SELinux ali nastavite pravilen varnostni kontekst. Za več informacij glejte ta priročnik: uporaba Nginx in Nginx Plus s SELinuxom na spletnem mestu Nginx Plus.

Kako namestiti in konfigurirati SSL z Nginxom

Potrdila SSL pomagajo omogočiti varen http (HTTPS) na vašem spletnem mestu, kar je bistveno za vzpostavitev zaupanja vredne/varne povezave med končnimi uporabniki in vašim strežnikom s šifriranjem podatkov, ki se prenašajo na vaše spletno mesto, z njega ali znotraj njega.

Govorili bomo o tem, kako ustvariti in namestiti samopodpisano potrdilo ter ustvariti zahtevo za podpis potrdila (CSR) za pridobitev potrdila SSL od overitelja potrdil (CA) za uporabo z Nginxom.

Samopodpisana potrdila lahko ustvarjate brezplačno in jih je praktično uporabiti za namene testiranja in za notranje storitve samo za LAN. Za javne strežnike je zelo priporočljivo uporabiti potrdilo, ki ga je izdal overitelj (na primer Let's Encrypt), da bi ohranili njegovo pristnost.

Če želite ustvariti samopodpisano potrdilo, najprej ustvarite imenik, v katerem bodo shranjena vaša potrdila.

$ sudo mkdir /etc/nginx/ssl-certs/

Nato z orodjem za ukazno vrstico openssl ustvarite samopodpisano potrdilo in ključ.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl-certs/nginx.key -out /etc/nginx/ssl-certs/nginx.crt

Na kratko opišimo možnosti, uporabljene v zgornjem ukazu:

  • req -X509 -kaže, da ustvarjamo potrdilo x509.
  • -vozlišča (NO DES)-pomeni\"ne šifriraj ključa".
  • -days 365-določa število dni, za katere bo potrdilo veljavno.
  • -newkey rsa: 2048-določa, da mora biti ključ, ustvarjen z algoritmom RSA, 2048-bitni.
  • -keyout /etc/nginx/ssl-certs/nginx.key-podaja celotno pot do ključa RSA.
  • -out /etc/nginx/ssl-certs/nginx.crt-podaja celotno pot potrdila.

Nato odprite konfiguracijsko datoteko navideznega gostitelja in dodajte naslednje vrstice v izjavo o strežniškem bloku, ki posluša na vratih 443. Preizkusili bomo z datoteko navideznega gostitelja /etc/nginx/conf.d/wearelinux-console.net.conf.

$ sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf

Nato dodajte ssl direktivo v konfiguracijsko datoteko nginx, izgledati mora podobno kot spodaj.

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    
    ssl on;
    ssl_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_trusted_certificate /etc/nginx/ssl-certs/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl-certs/nginx.key;
    
    server_name  wearelinux-console.net;
    root           /var/www/html/wearelinux-console.net/public_html;
    index          index.html;
    location / {
                try_files $uri $uri/ =404;
        }

}

Zdaj znova zaženite Nginx in brskalnik usmerite na naslednji naslov.

https://www.wearelinux-console.net

Če želite kupiti certifikat SSL pri overitelju potrdil, morate ustvariti zahtevo za podpis potrdila (CSR), kot je prikazano.

$ sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr

CSR lahko ustvarite tudi iz obstoječega zasebnega ključa.

$ sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr

Nato morate CS-ju, ki je ustvarjen, poslati CA, da zahteva izdajo potrdila SSL, podpisanega s strani CA. Ko prejmete potrdilo od CA, ga lahko konfigurirate, kot je prikazano zgoraj.

V tem članku smo razložili, kako namestiti in konfigurirati Nginx; obravnavali, kako nastaviti imensko virtualno gostovanje s protokolom SSL za varen prenos podatkov med spletnim strežnikom in odjemalcem.

Če ste med postopkom namestitve/konfiguracije nginxa doživeli kakršne koli težave ali imate kakršna koli vprašanja ali pripombe, nas kontaktirajte s spodnjim obrazcem za povratne informacije.