Cum se instalează Nginx cu gazde virtuale și certificat SSL


Nginx (prescurtare de la Engine-x) este un server proxy invers și HTTP gratuit, cu sursă deschisă, puternic, de înaltă performanță și scalabil, un proxy de e-mail și standard TCP/UDP Server. Este ușor de utilizat și configurat, cu un limbaj de configurare simplu. Nginx este acum software-ul de server web preferat pentru alimentarea site-urilor foarte încărcate, datorită scalabilității și performanței sale.

În acest articol, vom discuta despre cum să utilizați Nginx ca server HTTP, să îl configurați pentru a servi conținut web și să configurați gazde virtuale bazate pe nume și să creați și să instalați SSL pentru transmisii de date sigure, inclusiv un certificat autosemnat pe Ubuntu și CentOS .

Cum se instalează serverul web Nginx

Mai întâi, începeți prin a instala pachetul Nginx din depozitele oficiale folosind managerul de pachete, așa cum se arată.

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

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

După ce pachetul Nginx este instalat, trebuie să porniți serviciul deocamdată, să îl activați să pornească automat la pornire și să vedeți starea acestuia, folosind următoarele comenzi. Rețineți că pe Ubuntu, ar trebui să fie pornit și activat automat în timp ce pachetul este pre-configurat.

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

În acest moment, serverul web Nginx ar trebui să funcționeze, puteți verifica starea cu comanda netstat.

sudo netstat -tlpn | grep nginx

Dacă sistemul dvs. are un firewall activat, trebuie să deschideți porturile 80 și 443 pentru a permite traficul HTTP și HTTPS respectiv, prin ea, prin alergare.

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

Metoda ideală pentru a testa instalarea Nginx și pentru a verifica dacă rulează și dacă poate servi pagini web este deschiderea unui browser web și indicarea IP-ului serverului.

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

O instalare funcțională ar trebui să fie indicată de următorul ecran.

Cum se configurează serverul web Nginx

Fișierele de configurare ale lui Nginx se află în directorul /etc/nginx, iar fișierul de configurare globală se află la /etc/nginx/nginx.conf atât pe CentOS, cât și pe Ubuntu.

Nginx este alcătuit din module care sunt controlate de diferite opțiuni de configurare, cunoscute sub numele de directive. O directivă poate fi fie simplă (sub forma nume și valori terminate cu un ;), fie bloc (are instrucțiuni suplimentare incluse folosind {}). Și o directivă de bloc care conține alte directive se numește context.

Toate directivele sunt explicate cuprinzător în documentația Nginx de pe site-ul web al proiectului. Puteți consulta pentru mai multe informații.

Cum să difuzați conținut static folosind Nginx în modul autonom

La un nivel fundamental, Nginx poate fi folosit pentru a servi conținut static, cum ar fi fișiere HTML și media, în modul de sine stătător, unde este folosit doar blocul de server implicit (analog cu Apache unde nu au fost configurate gazde virtuale).

Vom începe prin a explica pe scurt structura de configurare în fișierul de configurare principal.

 
sudo vim /etc/nginx/nginx.conf

Dacă vă uitați în acest fișier de configurare Nginx, structura de configurare ar trebui să apară după cum urmează și acesta este denumit contextul principal, care conține multe alte directive simple și bloc. Tot traficul web este gestionat în contextul http.

user  nginx;
worker_processes  1;
.....

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

events {
       	.....
}

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

Următorul este un exemplu de fișier de configurare principală Nginx (/etc/nginx/nginx.conf), în care blocul http de mai sus conține o directivă include care îi spune lui Nginx unde să găsească fișierele de configurare a site-ului web (configurații de gazdă virtuală) .

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

Rețineți că pe Ubuntu, veți găsi și o directivă de includere suplimentară (include /etc/nginx/sites-enabled/*;), unde directorul /etc /nginx/sites-enabled/ stochează linkuri simbolice către fișierele de configurare a site-urilor web create în /etc/nginx/sites-available/, pentru a activa site-urile. Și ștergerea unui link simbolic dezactivează site-ul respectiv.

Pe baza sursei de instalare, veți găsi fișierul implicit de configurare a site-ului web la /etc/nginx/conf.d/default.conf (dacă ați instalat din depozitul oficial NGINX și EPEL) sau /etc/nginx/sites-enabled/default (dacă ați instalat din depozitele Ubuntu).

Acesta este exemplul nostru de bloc implicit de server nginx situat la /etc/nginx/conf.d/default.conf pe sistemul de testare.

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

O scurtă explicație a directivelor din configurația de mai sus:

  • ascultă: specifică portul pe care ascultă serverul.
  • nume_server: definește numele serverului, care poate fi nume exacte, nume metacaraterelor sau expresii regulate.
  • rădăcină: specifică directorul din care Nginx va servi paginile web și alte documente.
  • index: specifică tipul (tipurile) de fișier(e) index care urmează să fie difuzat.
  • locație: folosită pentru a procesa cereri pentru anumite fișiere și dosare.

Dintr-un browser web, când indicați către server folosind numele de gazdă localhost sau adresa sa IP, acesta procesează cererea și deservește fișierul /var/www/html/index.html și salvează imediat evenimentul în jurnalul său de acces (/var/log/nginx/access.log) cu un răspuns 200 (OK). În cazul unei erori (eveniment eșuat), acesta înregistrează mesajul în jurnalul de erori (/var/log/nginx/error.log).

Pentru a afla mai multe despre conectarea la Nginx, puteți consulta Cum să configurați accesul personalizat sau formatele de jurnal de erori în Nginx.

În loc să utilizați fișierele jurnal implicite, puteți defini fișiere jurnal personalizate pentru diferite site-uri web, așa cum vom vedea mai târziu, în secțiunea „Configurarea gazdelor virtuale bazate pe nume (blocuri de server)”.

Cum să restricționați accesul la o pagină web cu Nginx

Pentru a restricționa accesul la site-ul/aplicația dvs. sau la unele părți ale acestuia, puteți configura autentificarea HTTP de bază. Acest lucru poate fi folosit în esență pentru a restricționa accesul la întregul server HTTP, la blocuri de server individuale sau la blocuri de locație.

Începeți prin a crea un fișier care va stoca acreditările dvs. de acces (nume de utilizator/parolă) utilizând utilitarul htpasswd.

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

De exemplu, să adăugăm administrator de utilizator la această listă (puteți adăuga cât mai mulți utilizatori), unde opțiunea -c este folosită pentru a specifica fișierul cu parole și -B pentru a cripta parola. După ce apăsați pe [Enter], vi se va cere să introduceți parola utilizatorilor:

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

Apoi, să atribuim permisiunile și dreptul de proprietate corespunzătoare fișierului cu parole (înlocuiți utilizatorul și grupul nginx cu www-data pe Ubuntu).

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

După cum am menționat mai devreme, puteți restricționa accesul la serverul dvs. web, la un singur site web (folosind blocul de server) sau la un anumit director sau fișier. Două directive utile pot fi folosite pentru a realiza acest lucru:

  • auth_basic – activează validarea numelui de utilizator și a parolei utilizând protocolul „Autentificare de bază HTTP”.
  • auth_basic_user_file – specifică fișierul acreditării.

Ca exemplu, vom arăta cum să protejați cu parolă directorul /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;
    }
}

Acum, salvați modificările și reporniți serviciul Nginx.

sudo systemctl restart nginx 

Data viitoare când vă orientați browserul către directorul de mai sus (http://localhost/protected), vi se va cere să introduceți datele de conectare (nume de utilizator admin și parola aleasă ).

O autentificare reușită vă permite să accesați conținutul directorului, altfel veți primi o eroare „401 Authorization Required”.

Cum să configurați gazde virtuale bazate pe nume (blocuri de server) în Nginx

Contextul serverului permite ca mai multe domenii/site-uri să fie stocate și servite de pe aceeași mașină fizică sau server privat virtual (VPS). Mai multe blocuri de server (reprezentând gazde virtuale) pot fi declarate în contextul http pentru fiecare site/domeniu. Nginx decide ce server procesează o solicitare pe baza antetului cererii pe care îl primește.

Vom demonstra acest concept folosind următoarele domenii fictive, fiecare situat în directorul specificat:

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

Apoi, atribuiți permisiunile corespunzătoare în director pentru fiecare site.

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

Acum, creați un exemplu de fișier index.html în fiecare director 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>

Apoi, creați fișierele de configurare a blocului serverului pentru fiecare site din directorul /etc/httpd/conf.d.

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

Adăugați următoarea declarație de blocare a serverului în fișierul 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;
        }
     
}

Apoi, adăugați următoarea declarație de blocare a serverului în fișierul 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;
        }
     
}

Pentru a aplica modificările recente, reporniți serverul web Nginx.

sudo systemctl restart nginx

și îndreptarea serverului dvs. web către adresele de mai sus ar trebui să vă facă să vedeți paginile principale ale domeniilor fictive.

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

Important: dacă aveți SELinux activat, configurația sa implicită nu permite Nginx să acceseze fișiere în afara locațiilor autorizate bine-cunoscute (cum ar fi /etc/nginx pentru configurații, /var/log/nginx pentru jurnale, /var/www/html pentru fișiere web etc..) .

Puteți gestiona acest lucru fie dezactivând SELinux, fie setând contextul de securitate corect. Pentru mai multe informații, consultați acest ghid: utilizarea Nginx și Nginx Plus cu SELinux pe site-ul web Nginx Plus.

Cum se instalează și se configurează SSL cu Nginx

Certificatele SSL ajută la activarea http (HTTPS) securizat pe site-ul dvs., ceea ce este esențial pentru stabilirea unei conexiuni de încredere/securizate între utilizatorii finali și serverul dvs. prin criptarea informațiilor care este transmis către, de la sau în cadrul site-ului dvs.

Vom discuta cum să creați și să instalați un certificat autosemnat și să generăm o solicitare de semnare a certificatului (CSR) pentru a obține un certificat SSL de la o autoritate de certificare (CA), de utilizat cu Nginx.

Certificatele autosemnate sunt libere de creat și sunt practic bune pentru testare și pentru servicii interne numai LAN. Pentru serverele publice, este foarte recomandat să folosiți un certificat emis de o CA (de exemplu Let’s Encrypt) pentru a-și menține autenticitatea.

Pentru a crea un certificat autosemnat, creați mai întâi un director în care vor fi stocate certificatele dvs.

sudo mkdir /etc/nginx/ssl-certs/

Apoi generați certificatul autosemnat și cheia utilizând instrumentul de linie de comandă openssl.

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

Să descriem pe scurt opțiunile utilizate în comanda de mai sus:

  • req -X509 – arată că creăm un certificat x509.
  • -noduri (NU DES) – înseamnă „nu criptați cheia”.
  • -zile 365 – specifică numărul de zile pentru care certificatul va fi valabil.
  • -newkey rsa:2048 – specifică că cheia generată folosind algoritmul RSA ar trebui să fie de 2048 de biți.
  • -keyout /etc/nginx/ssl-certs/nginx.key – specifică calea completă a cheii RSA.
  • -out /etc/nginx/ssl-certs/nginx.crt – specifică calea completă a certificatului.

Apoi, deschideți fișierul de configurare a gazdei virtuale și adăugați următoarele linii la o declarație de blocare a serverului care ascultă pe portul 443. Vom testa cu fișierul gazdă virtuală /etc/nginx/conf.d/wearelinux-console.net.conf.

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

Apoi adăugați directiva ssl în fișierul de configurare nginx, ar trebui să arate similar cu cel de mai jos.

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

}

Acum reporniți Nginx și direcționați browserul către următoarea adresă.

https://www.wearelinux-console.net

Dacă doriți să achiziționați un certificat SSL de la o CA, trebuie să generați o cerere de semnare a certificatului (CSR), așa cum se arată.

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

De asemenea, puteți crea un CSR dintr-o cheie privată existentă.

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

Apoi, trebuie să trimiteți CSR care este generat unui CA pentru a solicita emiterea unui certificat SSL semnat de CA. După ce primiți certificatul de la CA, îl puteți configura așa cum se arată mai sus.

Citiți și: Ghidul final pentru a securiza, consolida și îmbunătăți performanța serverului web Nginx

rezumat

În acest articol, am explicat cum să instalați și să configurați Nginx; a descris cum să configurați găzduirea virtuală bazată pe nume cu SSL pentru a securiza transmisiile de date între serverul web și un client.

Dacă ați întâmpinat orice eșec în timpul procesului de instalare/configurare nginx sau aveți întrebări sau comentarii, utilizați formularul de feedback de mai jos pentru a ne contacta.