Kako instalirati Nginx s virtualnim hostovima i SSL certifikatom


Nginx (skraćenica od Engine-x) je besplatan, otvoreni izvor, moćan, visokih performansi i skalabilan HTTP i obrnuti proxy server, mail i standardni TCP/UDP proxy server. Jednostavan je za korištenje i konfiguraciju, s jednostavnim konfiguracijskim jezikom. Nginx je sada preferirani softver web servera za napajanje jako opterećenih stranica, zbog svoje skalabilnosti i performansi.

U ovom članku ćemo razgovarati o tome kako koristiti Nginx kao HTTP server, konfigurirati ga za posluživanje web sadržaja i postaviti virtualne hostove zasnovane na nazivima, te kreirati i instalirati SSL za siguran prijenos podataka, uključujući samopotpisani certifikat na Ubuntu i CentOS .

Kako instalirati Nginx web server

Prvo počnite instaliranjem Nginx paketa iz službenih spremišta koristeći vaš upravitelj paketa kao što 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 

Nakon što je Nginx paket instaliran, morate pokrenuti uslugu za sada, omogućiti joj da se automatski pokreće prilikom pokretanja i pogledati njen status, koristeći sljedeće naredbe. Imajte na umu da bi na Ubuntu trebao biti pokrenut i omogućen automatski dok je paket unaprijed konfigurisan.

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

U ovom trenutku, Nginx web server bi trebao biti u funkciji, status možete provjeriti naredbom netstat.

sudo netstat -tlpn | grep nginx

Ako vaš sistem ima omogućen firewall, morate otvoriti portove 80 i 443 da omogućite HTTP i HTTPS promet odnosno kroz njega, trčanjem.

------------ 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 testiranje instalacije Nginxa i provjeru da li radi i može li posluživati web stranice je otvaranje web pretraživača i pokazivanje na IP servera.

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

Radna instalacija bi trebala biti naznačena na sljedećem ekranu.

Kako konfigurirati Nginx web server

Nginx-ove konfiguracijske datoteke nalaze se u direktoriju /etc/nginx, a globalni konfiguracijski fajl se nalazi na /etc/nginx/nginx.conf i na CentOS-u i na Ubuntu-u.

Nginx se sastoji od modula koji su kontrolirani raznim opcijama konfiguracije, poznatim kao direktive. Direktiva može biti jednostavna (u imenu obrasca i vrijednostima koje se završavaju sa ;) ili blokirana (ima dodatne upute priložene pomoću {}). A blok direktiva koja sadrži druge direktive naziva se kontekst.

Sve direktive su sveobuhvatno objašnjene u Nginx dokumentaciji na web stranici projekta. Možete ga pogledati za više informacija.

Kako poslužiti statički sadržaj koristeći Nginx u samostalnom načinu rada

Na osnovnom nivou, Nginx se može koristiti za posluživanje statičkog sadržaja kao što su HTML i medijski fajlovi, u samostalnom režimu, gde se koristi samo podrazumevani blok servera (analogno Apacheu gde virtuelni hostovi nisu konfigurisani).

Počet ćemo kratkim objašnjenjem konfiguracijske strukture u glavnoj konfiguracijskoj datoteci.

 
sudo vim /etc/nginx/nginx.conf

Ako pogledate ovu Nginx konfiguracijsku datoteku, konfiguracijska struktura bi trebala izgledati kako slijedi i to se naziva glavni kontekst, koji sadrži mnoge druge jednostavne i blok direktive. Sav web promet se obrađuje u http kontekstu.

user  nginx;
worker_processes  1;
.....

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

events {
       	.....
}

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

Slijedi primjer datoteke glavne konfiguracije Nginx-a (/etc/nginx/nginx.conf), gdje gornji blok http sadrži direktivu uključivanja koja govori Nginx-u gdje da pronađe konfiguracijske datoteke web stranice (virtuelne konfiguracije hosta) .

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;
}

Imajte na umu da ćete na Ubuntu također pronaći dodatnu direktivu uključivanja (include /etc/nginx/sites-enabled/*;), gdje je direktorij /etc /nginx/sites-enabled/ pohranjuje simbolične veze do konfiguracijskih datoteka web lokacija kreiranih u /etc/nginx/sites-available/, kako bi se web lokacije omogućile. A brisanje simbolične veze onemogućava tu određenu lokaciju.

Na osnovu vašeg izvora instalacije, pronaći ćete zadanu konfiguracijsku datoteku web stranice na /etc/nginx/conf.d/default.conf (ako ste instalirali iz službenog NGINX spremišta i EPEL) ili /etc/nginx/sites-enabled/default (ako ste instalirali iz Ubuntu spremišta).

Ovo je naš uzorak zadanog bloka nginx servera koji se nalazi na /etc/nginx/conf.d/default.conf na testnom 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;
        }
}

Kratko objašnjenje direktiva u gornjoj konfiguraciji:

  • slušati: određuje port na kojem server sluša.
  • ime_servera: definira ime servera koje može biti tačna imena, zamjenska imena ili regularni izrazi.
  • root: specificira direktorij iz kojeg će Nginx posluživati web stranice i druge dokumente.
  • indeks: specificira tip(ove) indeksnih fajlova koji će se servirati.
  • lokacija: koristi se za obradu zahtjeva za određene fajlove i foldere.

Iz web pretraživača, kada pokažete na server koristeći hostname localhost ili njegovu IP adresu, on obrađuje zahtjev i poslužuje datoteku /var/www/html/index.html, i odmah pohranjuje događaj u svoj dnevnik pristupa (/var/log/nginx/access.log) sa 200 (OK) odgovorom. U slučaju greške (neuspjeli događaj), bilježi poruku u dnevnik grešaka (/var/log/nginx/error.log).

Da biste saznali više o prijavi u Nginx, možete pogledati Kako konfigurirati prilagođeni pristup ili formate dnevnika grešaka u Nginxu.

Umjesto korištenja zadanih log datoteka, možete definirati prilagođene datoteke dnevnika za različite web stranice, kao što ćemo kasnije pogledati, pod odjeljkom “podešavanje virtuelnih hostova zasnovanih na imenu (serverski blokovi)”.

Kako ograničiti pristup web stranici pomoću Nginxa

Kako biste ograničili pristup vašoj web stranici/aplikaciji ili nekim njenim dijelovima, možete postaviti osnovnu HTTP autentifikaciju. Ovo se u suštini može koristiti za ograničavanje pristupa cijelom HTTP serveru, pojedinačnim blokovima servera ili blokovima lokacije.

Započnite kreiranjem datoteke koja će pohraniti vaše pristupne vjerodajnice (korisničko ime/lozinka) korištenjem uslužnog programa htpasswd.

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

Kao primjer, dodajmo korisničkog administratora na ovu listu (možete dodati što više korisnika), gdje se opcija -c koristi za određivanje datoteke lozinke, a -B za šifriranje lozinke. Kada pritisnete [Enter], od vas će se tražiti da unesete korisničku lozinku:

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

Zatim, dodijelimo odgovarajuća dopuštenja i vlasništvo fajlu lozinke (zamijenite korisnika i grupu nginx sa www-data na Ubuntu).

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

Kao što smo ranije spomenuli, možete ograničiti pristup svom web serveru, jednoj web stranici (koristeći njen blok servera) ili određenom direktoriju ili datoteci. Da bi se to postiglo, mogu se koristiti dvije korisne direktive:

  • auth_basic – uključuje provjeru valjanosti korisničkog imena i lozinke koristeći “HTTP Basic Authentication” protokol.
  • auth_basic_user_file – specificira fajl akreditiva.

Kao primjer, pokazat ćemo kako lozinkom zaštititi direktorij /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;
    }
}

Sada sačuvajte promjene i ponovo pokrenite Nginx servis.

sudo systemctl restart nginx 

Sljedeći put kada svoj preglednik usmjerite na gornji direktorij (http://localhost/protected) od vas će se tražiti da unesete svoje akreditive za prijavu (korisničko ime admin i odabranu lozinku ).

Uspješna prijava vam omogućava pristup sadržaju direktorija, inače ćete dobiti grešku “401 Autorizacija je potrebna “.

Kako podesiti virtuelne hostove zasnovane na imenu (serverske blokove) u Nginxu

Kontekst servera omogućava da se više domena/lokacija pohranjuje i služi sa iste fizičke mašine ili virtuelnog privatnog servera (VPS). Višestruki serverski blokovi (koji predstavljaju virtuelne hostove) mogu se deklarisati unutar http konteksta za svaku lokaciju/domen. Nginx odlučuje koji server obrađuje zahtjev na osnovu zaglavlja zahtjeva koje primi.

Ovaj koncept ćemo demonstrirati koristeći sljedeće lažne domene, od kojih se svaka nalazi u navedenom direktoriju:

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

Zatim dodijelite odgovarajuće dozvole direktoriju za svaku lokaciju.

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

Sada kreirajte uzorak datoteke index.html unutar svakog public_html direktorija.

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

Zatim kreirajte konfiguracijske datoteke bloka servera za svaku lokaciju unutar /etc/httpd/conf.d direktorija.

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

Dodajte sljedeću deklaraciju bloka servera u datoteku wearelinux-console.net.conf.

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;
        }
     
}

Zatim dodajte sljedeću deklaraciju bloka servera u datoteku welovelinux.com.conf.

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

Da biste primijenili nedavne promjene, ponovo pokrenite Nginx web server.

sudo systemctl restart nginx

i usmjeravanje vašeg web servera na gore navedene adrese bi trebalo da učini da vidite glavne stranice lažnih domena.

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

Važno: Ako imate omogućen SELinux, njegova zadana konfiguracija ne dozvoljava Nginxu pristup datotekama izvan dobro poznatih ovlaštenih lokacija (kao što je npr. /etc/nginx za konfiguracije, /var/log/nginx za dnevnike, /var/www/html za web datoteke itd.) .

Ovo možete riješiti tako što ćete onemogućiti SELinux ili postaviti ispravan sigurnosni kontekst. Za više informacija pogledajte ovaj vodič: korištenje Nginxa i Nginx Plus sa SELinuxom na web stranici Nginx Plus.

Kako instalirati i konfigurirati SSL sa Nginxom

SSL certifikati pomažu da se omogući siguran http (HTTPS) na vašoj web lokaciji, što je neophodno za uspostavljanje pouzdane/sigurne veze između krajnjih korisnika i vašeg servera šifriranjem informacija koje se prenosi na, sa ili unutar vaše stranice.

Pojasnit ćemo kako kreirati i instalirati samopotpisani certifikat i generirati zahtjev za potpisivanje certifikata (CSR) za pribavljanje SSL certifikata od tijela za izdavanje certifikata (CA), koristiti sa Nginxom.

Samopotpisani sertifikati su slobodni za kreiranje i praktično su dobri za testiranje i za interne LAN usluge. Za servere okrenute prema javnosti, toplo se preporučuje korištenje certifikata koji izdaje CA (na primjer Let’s Encrypt) kako bi se podržala njegova autentičnost.

Da biste kreirali samopotpisani certifikat, prvo kreirajte direktorij u kojem će biti pohranjeni vaši certifikati.

sudo mkdir /etc/nginx/ssl-certs/

Zatim generirajte svoj samopotpisani certifikat i ključ pomoću alata openssl komandne linije.

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

Hajde da ukratko opišemo opcije koje se koriste u gornjoj naredbi:

  • req -X509 – pokazuje da kreiramo x509 certifikat.
  • -čvorovi (NO DES) – znači “ne šifrirati ključ”.
  • -dana 365 – određuje broj dana za koje će certifikat važiti.
  • -newkey rsa:2048 – specificira da ključ generiran korištenjem RSA algoritma treba biti 2048-bitni.
  • -keyout /etc/nginx/ssl-certs/nginx.key – specificira punu putanju RSA ključa.
  • -out /etc/nginx/ssl-certs/nginx.crt – specificira punu putanju certifikata.

Zatim otvorite konfiguracijsku datoteku virtuelnog hosta i dodajte sljedeće redove u deklaraciju bloka servera koja sluša na portu 443. Mi ćemo testirati sa virtuelnim host fajlom /etc/nginx/conf.d/wearelinux-console.net.conf.

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

Zatim dodajte ssl direktivu u nginx konfiguracijsku datoteku, trebala bi izgledati slično dolje.

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;
        }

}

Sada ponovo pokrenite Nginx i usmjerite svoj pretraživač na sljedeću adresu.

https://www.wearelinux-console.net

Ako želite kupiti SSL certifikat od CA, morate generirati zahtjev za potpisivanje certifikata (CSR) kao što 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

Također možete kreirati CSR iz postojećeg privatnog ključa.

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

Zatim morate poslati CSR koji je generiran CA da zatražite izdavanje CA-potpisanog SSL certifikata. Kada primite svoj certifikat od CA, možete ga konfigurirati kao što je prikazano iznad.

Pročitajte također: Ultimativni vodič za sigurnu, ojačanu i poboljšanje performansi Nginx web servera

Sažetak

U ovom članku smo objasnili kako instalirati i konfigurirati Nginx; pokrio je kako postaviti virtuelni hosting baziran na imenu sa SSL-om za siguran prijenos podataka između web servera i klijenta.

Ako ste iskusili bilo kakve zastoje tokom procesa instalacije/konfiguracije nginxa ili imate bilo kakva pitanja ili komentare, koristite obrazac za povratne informacije ispod da nas kontaktirate.