Kaip įdiegti „Nginx“ naudojant virtualius pagrindinius kompiuterius ir SSL sertifikatą


Nginx (sutrumpinimas iš Engine-x) yra nemokamas, atvirojo kodo, galingas, didelio našumo ir keičiamo dydžio HTTP ir atvirkštinis tarpinis serveris, pašto ir standartinis TCP/UDP tarpinis serveris. serveris. Jį lengva naudoti ir konfigūruoti paprasta konfigūravimo kalba. Dėl savo mastelio ir našumo „Nginx“ dabar yra pageidaujama žiniatinklio serverio programinė įranga, skirta stipriai apkrautoms svetainėms maitinti.

Šiame straipsnyje bus aptarta, kaip naudoti „Nginx“ kaip HTTP serverį, sukonfigūruoti jį, kad jis teiktų žiniatinklio turinį, nustatyti vardinius virtualius pagrindinius kompiuterius, sukurti ir įdiegti SSL saugiam duomenų perdavimui, įskaitant savarankiškai pasirašytą sertifikatą „Ubuntu“ ir „CentOS“. .

Kaip įdiegti „Nginx“ žiniatinklio serverį

Pirmiausia pradėkite diegdami Nginx paketą iš oficialių saugyklų naudodami paketų tvarkyklę, kaip parodyta.

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

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

Įdiegę „Nginx“ paketą, turite paleisti paslaugą dabar, įgalinti ją automatiškai paleisti įkrovos metu ir peržiūrėti jo būseną naudodami šias komandas. Atminkite, kad naudojant Ubuntu jis turėtų būti paleistas ir įgalintas automatiškai, kol paketas iš anksto sukonfigūruotas.

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

Šiuo metu „Nginx“ žiniatinklio serveris turėtų būti sukurtas ir veikia, galite patikrinti būseną naudodami komandą „netstat“.

sudo netstat -tlpn | grep nginx

Jei jūsų sistemoje įgalinta ugniasienė, turite atidaryti prievadus 80 ir 443, kad leistų HTTP ir HTTPS srautą atitinkamai per jį, bėgant.

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

Idealus būdas išbandyti „Nginx“ diegimą ir patikrinti, ar jis veikia ir gali aptarnauti tinklalapius, yra atidaryti žiniatinklio naršyklę ir nurodyti serverio IP adresą.

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

Veikiantis diegimas turėtų būti rodomas kitame ekrane.

Kaip sukonfigūruoti „Nginx“ žiniatinklio serverį

„Nginx“ konfigūracijos failai yra kataloge /etc/nginx, o visuotinis konfigūracijos failas yra adresu /etc/nginx/nginx.conf tiek „CentOS“, tiek „Ubuntu“.

„Nginx“ sudaro moduliai, valdomi įvairiomis konfigūracijos parinktimis, vadinamomis direktyvomis. Direktyvas gali būti paprastas (formos pavadinimas ir reikšmės baigiasi ;) arba blokas (turi papildomos instrukcijos, pateiktos naudojant {}). O blokinė direktyva, kurioje yra kitų direktyvų, vadinama kontekstu.

Visos direktyvos yra išsamiai paaiškintos Nginx dokumentacijoje projekto svetainėje. Norėdami gauti daugiau informacijos, galite kreiptis į jį.

Kaip teikti statinį turinį naudojant „Nginx“ autonominiu režimu

Pagrindiniu lygmeniu „Nginx“ gali būti naudojamas statiniam turiniui, pvz., HTML ir medijos failams, aptarnauti autonominiu režimu, kai naudojamas tik numatytasis serverio blokas (panašiai kaip „Apache“, kur nebuvo sukonfigūruota jokių virtualių kompiuterių).

Pradėsime trumpai paaiškindami konfigūracijos struktūrą pagrindiniame konfigūracijos faile.

 
sudo vim /etc/nginx/nginx.conf

Jei pažvelgsite į šį „Nginx“ konfigūracijos failą, konfigūracijos struktūra turėtų pasirodyti taip, ir tai vadinama pagrindiniu kontekstu, kuriame yra daug kitų paprastų ir blokuotų direktyvų. Visas žiniatinklio srautas tvarkomas http kontekste.

user  nginx;
worker_processes  1;
.....

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

events {
       	.....
}

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

Toliau pateikiamas pavyzdinis Nginx pagrindinės konfigūracijos failas (/etc/nginx/nginx.conf), kuriame aukščiau esančiame http bloke yra įtraukimo direktyva, kuri nurodo Nginx, kur rasti svetainės konfigūracijos failus (virtualios prieglobos konfigūracijos). .

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

Atminkite, kad Ubuntu taip pat rasite papildomą įtraukimo direktyvą (įtraukti /etc/nginx/sites-enabled/*;), kur katalogas /etc /nginx/sites-enabled/ saugo nuorodas į svetainių konfigūracijos failus, sukurtus /etc/nginx/sites-available/, kad įgalintų svetaines. Ir ištrynus simbolinę nuorodą ta svetainė išjungiama.

Atsižvelgdami į diegimo šaltinį, numatytąjį svetainės konfigūracijos failą rasite adresu /etc/nginx/conf.d/default.conf (jei įdiegėte iš oficialios NGINX saugyklos ir EPEL) arba /etc/nginx/sites-enabled/default (jei įdiegėte iš Ubuntu saugyklų).

Tai yra mūsų numatytojo „nginx“ serverio bloko pavyzdys, esantis /etc/nginx/conf.d/default.conf bandomojoje sistemoje.

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

Trumpas aukščiau pateiktos konfigūracijos direktyvų paaiškinimas:

  • klausytis: nurodo prievadą, kurio serveris klauso.
  • serverio_pavadinimas: apibrėžia serverio pavadinimą, kuris gali būti tikslūs pavadinimai, pakaitos simbolių pavadinimai arba reguliarios išraiškos.
  • root: nurodo katalogą, iš kurio „Nginx“ teiks tinklalapius ir kitus dokumentus.
  • indeksas: nurodo pateikiamo (-ų) indekso failo (-ų) tipą (-us).
  • vieta: naudojama konkrečių failų ir aplankų užklausoms apdoroti.

Kai iš žiniatinklio naršyklės nukreipiate į serverį naudodami hostname localhost arba jo IP adresą, jis apdoroja užklausą ir pateikia failą /var/www/html/index.html . ir nedelsiant išsaugo įvykį savo prieigos žurnale (/var/log/nginx/access.log) su 200 (Gerai) atsakymu. Jei įvyksta klaida (įvykis nepavyko), jis įrašo pranešimą klaidų žurnale (/var/log/nginx/error.log).

Norėdami sužinoti daugiau apie prisijungimą prie Nginx, žr. Kaip konfigūruoti tinkintą prieigą arba klaidų žurnalo formatus naudojant Nginx.

Užuot naudoję numatytuosius žurnalo failus, galite apibrėžti pasirinktinius žurnalo failus skirtingoms svetainėms, kaip apžvelgsime vėliau, skyriuje „Virtualių prieglobų (serverio blokų) nustatymas pavadinimu“.

Kaip apriboti prieigą prie tinklalapio naudojant „Nginx“.

Norėdami apriboti prieigą prie savo svetainės/programos ar kai kurių jos dalių, galite nustatyti pagrindinį HTTP autentifikavimą. Tai iš esmės gali būti naudojama norint apriboti prieigą prie viso HTTP serverio, atskirų serverio blokų arba vietos blokų.

Pradėkite sukurdami failą, kuriame bus saugomi jūsų prieigos kredencialai (naudotojo vardas/slaptažodis), naudodami htpasswd priemonę.

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

Pavyzdžiui, į šį sąrašą įtraukkime vartotojo administratorių (galite įtraukti kuo daugiau vartotojų), kur parinktis -c naudojama slaptažodžio failui nurodyti, o -B . norėdami užšifruoti slaptažodį. Kai paspausite [Enter], jūsų bus paprašyta įvesti naudotojo slaptažodį:

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

Tada priskirkime reikiamus leidimus ir nuosavybės teisę slaptažodžio failui (Ubuntu naudotoją ir grupę nginx pakeiskite www-data).

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

Kaip minėjome anksčiau, galite apriboti prieigą prie savo žiniatinklio serverio, vienos svetainės (naudodami jos serverio bloką) arba konkretų katalogą ar failą. Tam gali būti naudojamos dvi naudingos direktyvos:

  • auth_basic – įjungia vartotojo vardo ir slaptažodžio patvirtinimą naudojant „HTTP pagrindinio autentifikavimo“ protokolą.
  • auth_basic_user_file – nurodo kredencialų failą.

Kaip pavyzdį parodysime, kaip slaptažodžiu apsaugoti katalogą /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;
    }
}

Dabar išsaugokite pakeitimus ir iš naujo paleiskite „Nginx“ paslaugą.

sudo systemctl restart nginx 

Kai kitą kartą nukreipsite naršyklę į aukščiau esantį katalogą (http://localhost/protected), jūsų bus paprašyta įvesti prisijungimo duomenis (naudotojo vardą admin ir pasirinktą slaptažodį ).

Sėkmingas prisijungimas leidžia pasiekti katalogo turinį, kitu atveju gausite klaidą „Reikalingas 401 leidimas“.

Kaip nustatyti vardais pagrįstus virtualius pagrindinius kompiuterius (serverio blokus) „Nginx“.

Serverio kontekstas leidžia saugoti kelis domenus/svetaines ir aptarnauti iš tos pačios fizinės mašinos arba virtualaus privataus serverio (VPS). Kiekvienos svetainės/domeno http kontekste gali būti deklaruojami keli serverių blokai (atitinkantys virtualius pagrindinius kompiuterius). „Nginx“ nusprendžia, kuris serveris apdoros užklausą pagal gautą užklausos antraštę.

Mes parodysime šią koncepciją naudodami šiuos netikrus domenus, kurių kiekvienas yra nurodytame kataloge:

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

Tada kiekvienai svetainei priskirkite atitinkamus leidimus kataloge.

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

Dabar kiekviename public_html kataloge sukurkite pavyzdinį index.html failą.

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

Tada sukurkite serverio bloko konfigūracijos failus kiekvienai svetainei kataloge /etc/httpd/conf.d.

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

Pridėkite šią serverio bloko deklaraciją į failą 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;
        }
     
}

Tada į failą welovelinux.com.conf pridėkite šią serverio bloko deklaraciją.

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

Norėdami pritaikyti naujausius pakeitimus, iš naujo paleiskite „Nginx“ žiniatinklio serverį.

sudo systemctl restart nginx

ir nukreipę savo žiniatinklio serverį į aukščiau nurodytus adresus, turėtumėte matyti pagrindinius netikrų domenų puslapius.

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

Svarbu: jei įgalinote SELinux, numatytoji konfigūracija neleidžia Nginx pasiekti failų, esančių už gerai žinomų įgaliotų vietų (pvz., /etc/nginx konfigūracijai, /var/log/nginx žurnalams, /var/www/html žiniatinklio failams ir kt.) .

Tai galite padaryti išjungę SELinux arba nustatydami tinkamą saugos kontekstą. Daugiau informacijos rasite šiame vadove: Nginx ir Nginx Plus naudojimas su SELinux Nginx Plus svetainėje.

Kaip įdiegti ir konfigūruoti SSL naudojant Nginx

SSL sertifikatai padeda įgalinti saugų http (HTTPS) jūsų svetainėje, o tai būtina norint užmegzti patikimą/saugų ryšį tarp galutinių naudotojų ir jūsų serverio užšifruojant informaciją, yra perduodamas į jūsų svetainę, iš jos arba joje.

Aptarsime, kaip sukurti ir įdiegti savarankiškai pasirašytą sertifikatą ir sugeneruoti sertifikato pasirašymo užklausą (CSR), kad gautumėte SSL sertifikatą iš sertifikatų institucijos (CA), naudoti su Nginx.

Savarankiškai pasirašytus sertifikatus galima kurti nemokamai ir praktiškai juos galima naudoti testavimo tikslais ir tik vidinėms LAN paslaugoms. Viešiesiems serveriams primygtinai rekomenduojama naudoti CA išduotą sertifikatą (pvz., „Let’s Encrypt“), kad būtų išlaikytas jo autentiškumas.

Norėdami sukurti savarankiškai pasirašytą sertifikatą, pirmiausia sukurkite katalogą, kuriame bus saugomi jūsų sertifikatai.

sudo mkdir /etc/nginx/ssl-certs/

Tada sugeneruokite savo pasirašytą sertifikatą ir raktą naudodami komandų eilutės įrankį 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

Trumpai apibūdinkime parinktis, naudojamas aukščiau pateiktoje komandoje:

  • req -X509 – rodo, kad kuriame x509 sertifikatą.
  • -mazgai (BE DES) – reiškia „nešifruoti rakto“.
  • -365 dienos – nurodo, kiek dienų sertifikatas galios.
  • -newkey rsa:2048 – nurodo, kad raktas, sugeneruotas naudojant RSA algoritmą, turi būti 2048 bitų.
  • -keyout /etc/nginx/ssl-certs/nginx.key – nurodo visą RSA rakto kelią.
  • -out /etc/nginx/ssl-certs/nginx.crt – nurodo visą sertifikato kelią.

Tada atidarykite virtualiosios prieglobos konfigūracijos failą ir pridėkite šias eilutes prie serverio bloko deklaracijos klausymosi prievade 443. Bandysime naudodami virtualaus pagrindinio kompiuterio failą /etc/nginx/conf.d/wearelinux-console.net.conf.

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

Tada pridėkite ssl direktyvą prie nginx konfigūracijos failo, ji turėtų atrodyti panašiai kaip žemiau.

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

}

Dabar iš naujo paleiskite „Nginx“ ir nukreipkite naršyklę šiuo adresu.

https://www.wearelinux-console.net

Jei norite įsigyti SSL sertifikatą iš CA, turite sugeneruoti sertifikato pasirašymo užklausą (CSR), kaip parodyta.

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

Taip pat galite sukurti CSR iš esamo privataus rakto.

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

Tada turite išsiųsti sugeneruotą CSR CA, kad prašytumėte išduoti CA pasirašytą SSL sertifikatą. Gavę sertifikatą iš CA, galite jį konfigūruoti, kaip parodyta aukščiau.

Taip pat skaitykite: galutinis vadovas, kaip apsaugoti, sustiprinti ir pagerinti Nginx žiniatinklio serverio veikimą

Santrauka

Šiame straipsnyje paaiškinome, kaip įdiegti ir konfigūruoti Nginx; apžvelgė, kaip nustatyti vardais pagrįstą virtualų prieglobą naudojant SSL, kad būtų užtikrintas duomenų perdavimas tarp žiniatinklio serverio ir kliento.

Jei nginx diegimo/konfigūravimo proceso metu patyrėte kokių nors nesėkmių arba turite klausimų ar komentarų, naudokite toliau pateiktą atsiliepimų formą, kad su mumis susisiektumėte.