Kā instalēt Nginx ar virtuālajiem saimniekiem un SSL sertifikātu


Nginx (saīsinājums no Engine-x) ir bezmaksas, atvērta pirmkoda, jaudīgs, augstas veiktspējas un mērogojams HTTP un reversā starpniekserveris, pasts un standarta TCP/UDP starpniekserveris. To ir viegli lietot un konfigurēt, izmantojot vienkāršu konfigurācijas valodu. Nginx tagad ir vēlamā tīmekļa servera programmatūra, lai darbinātu ļoti noslogotas vietnes, pateicoties tās mērogojamībai un veiktspējai.

Šajā rakstā tiks apspriests, kā izmantot Nginx kā HTTP serveri, konfigurēt to, lai apkalpotu tīmekļa saturu, un iestatīt uz nosaukuma balstītus virtuālos resursdatorus, kā arī izveidot un instalēt SSL drošai datu pārraidei, ieskaitot pašu parakstītu sertifikātu Ubuntu un CentOS .

Kā instalēt Nginx tīmekļa serveri

Vispirms sāciet instalēt Nginx pakotni no oficiālajiem krātuvēm, izmantojot paku pārvaldnieku, kā parādīts.

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

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

Pēc Nginx pakotnes instalēšanas jums pagaidām jāsāk pakalpojums, jāļauj tam automātiski startēt sāknēšanas laikā un apskatīt tā statusu, izmantojot šādas komandas. Ņemiet vērā, ka operētājsistēmā Ubuntu tā ir jāsāk un jāiespējo automātiski, kamēr pakete ir iepriekš konfigurēta.

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

Šajā brīdī Nginx tīmekļa serverim vajadzētu darboties, statusu var pārbaudīt ar komandu netstat.

$ sudo netstat -tlpn | grep nginx

Ja jūsu sistēmā ir iespējots ugunsmūris, jums jāatver 80. un 443. ports, lai caur to atļautu attiecīgi HTTP un HTTPS trafiku, palaižot.

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

Ideāla metode, kā pārbaudīt Nginx instalāciju un pārbaudīt, vai tā darbojas un spēj apkalpot tīmekļa lapas, ir atvērt tīmekļa pārlūkprogrammu un norādīt uz servera IP.

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

Darbojoša instalācija jānorāda nākamajā ekrānā.

Kā konfigurēt Nginx tīmekļa serveri

Nginx konfigurācijas faili atrodas direktorijā /etc/nginx , un globālais konfigurācijas fails atrodas vietnē /etc/nginx/nginx.conf gan CentOS, gan Ubuntu.

Nginx sastāv no moduļiem, kurus kontrolē dažādas konfigurācijas opcijas, kas pazīstamas kā direktīvas. Direktīva var būt vienkārša (formas nosaukumā un vērtībās, kas izbeigtas ar ; ), vai arī bloķēt (tai ir papildu instrukcijas, kas pievienotas, izmantojot {} ). Grupu direktīvu, kas satur citas direktīvas, sauc par kontekstu.

Visas direktīvas ir izsmeļoši izskaidrotas Nginx dokumentācijā projekta vietnē. Lai uzzinātu vairāk, varat to skatīt.

Pamata līmenī Nginx var izmantot statiska satura, piemēram, HTML un multivides failu, apkalpošanai atsevišķā režīmā, kur tiek izmantots tikai noklusējuma servera bloks (analogs Apache, kur nav konfigurēti virtuālie resursdatori).

Mēs sāksim īsi izskaidrot konfigurācijas struktūru galvenajā konfigurācijas failā.

 
$ sudo vim /etc/nginx/nginx.conf

Ja ielūkojaties šajā Nginx konfigurācijas failā, konfigurācijas struktūrai vajadzētu parādīties šādi, un to sauc par galveno kontekstu, kas satur daudzas citas vienkāršas un bloķējošas direktīvas. Visa tīmekļa trafika tiek apstrādāta http kontekstā.

user  nginx;
worker_processes  1;
.....

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

events {
       	.....
}

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

Šis ir Nginx galvenās konfigurācijas (/etc/nginx/nginx.conf) faila paraugs, kur iepriekš minētajā http blokā ir iekļauta direktīva, kas Nginx norāda, kur atrast vietnes konfigurācijas failus (virtuālās resursdatora konfigurācijas).

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

Ņemiet vērā, ka Ubuntu jūs atradīsit arī papildu iekļaušanas direktīvu (iekļaujiet/etc/nginx/sites-enabled/*;), kur direktorijā/etc/nginx/sites-enabled/tiek saglabātas saites uz vietņu konfigurācijas failiem, kas izveidoti/etc/nginx/sites-available /, lai iespējotu vietnes. Dzēšot saiti, šī vietne tiek atspējota.

Pamatojoties uz instalācijas avotu, noklusējuma vietnes konfigurācijas failu atradīsit vietnē /etc/nginx/conf.d/default.conf (ja instalējāt no oficiālās NGINX repozitorija un EPEL) vai/etc/nginx/sites-enabled/default (ja instalējāt no Ubuntu krātuvēm).

Šis ir mūsu noklusējuma nginx servera bloka paraugs, kas testa sistēmā atrodas /etc/nginx/conf.d/default.conf.

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

Īss direktīvu skaidrojums iepriekšminētajā konfigurācijā:

  • klausīties: norāda portu, kuru serveris klausās.
  • servera_nosaukums: nosaka servera nosaukumu, kas var būt precīzi nosaukumi, aizstājējzīmju nosaukumi vai regulāras izteiksmes.
  • sakne: norāda direktoriju, kurā Nginx apkalpos tīmekļa lapas un citus dokumentus.
  • indekss: norāda izsniedzamā (-o) indeksa faila (-u) veidu (-us).
  • atrašanās vieta: tiek izmantota noteiktu failu un mapju pieprasījumu apstrādei.

No tīmekļa pārlūkprogrammas, norādot uz serveri, izmantojot resursdatora nosaukumu localhost vai tā IP adresi, tas apstrādā pieprasījumu un apkalpo failu /var/www/html/index.html un nekavējoties saglabā notikumu tā piekļuves žurnālā (/ var/log/nginx/access.log) ar atbildi 200 (OK). Kļūdas (neizdevies notikums) gadījumā tā ieraksta ziņojumu kļūdu žurnālā (/var/log/nginx/error.log).

Lai uzzinātu vairāk par reģistrēšanos Nginx, varat uzzināt, kā konfigurēt pielāgotas piekļuves vai kļūdu žurnāla formātus Nginx.

Tā vietā, lai izmantotu noklusējuma žurnālfailus, varat definēt pielāgotus žurnālfailus dažādām vietnēm, kā mēs to aplūkosim vēlāk, sadaļā “Virtuālo resursdatoru uz nosaukuma iestatīšana (servera bloki)”.

Lai ierobežotu piekļuvi savai vietnei/lietojumprogrammai vai dažām tās daļām, varat iestatīt pamata HTTP autentifikāciju. To var galvenokārt izmantot, lai ierobežotu piekļuvi visam HTTP serverim, atsevišķiem serveru blokiem vai atrašanās vietas blokiem.

Sāciet, izveidojot failu, kurā tiks saglabāti jūsu piekļuves akreditācijas dati (lietotājvārds/parole), izmantojot utilītu htpasswd.

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

Piemēram, pievienosim lietotāju administratoru šim sarakstam (jūs varat pievienot pēc iespējas vairāk lietotāju), kur paroles faila norādīšanai tiek izmantota opcija -c un -B , lai šifrētu paroli. Kad nospiedīsit [Enter], jums tiks lūgts ievadīt lietotāja paroli:

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

Pēc tam paroles failam piešķirsim atbilstošās atļaujas un īpašumtiesības (aizstājiet lietotāju un grupu nginx ar www datiem Ubuntu).

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

Kā mēs jau iepriekš minējām, jūs varat ierobežot piekļuvi savam tīmekļa serverim, vienai vietnei (izmantojot tās servera bloku) vai noteiktam direktorijam vai failam. Lai to panāktu, var izmantot divas noderīgas direktīvas:

  • auth_basic - ieslēdz lietotājvārda un paroles validāciju, izmantojot protokolu “HTTP pamata autentifikācija”.
  • auth_basic_user_file - norāda akreditācijas datu failu.

Kā piemēru mēs parādīsim, kā ar paroli aizsargāt direktoriju/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;
    }
}

Tagad saglabājiet izmaiņas un restartējiet Nginx pakalpojumu.

$ sudo systemctl restart nginx 

Nākamreiz, kad novirzīsit pārlūkprogrammu uz iepriekš minēto direktoriju (http:// localhost/protected), jums tiks lūgts ievadīt pieteikšanās datus (lietotājvārda administrators un izvēlētā parole).

Veiksmīga pieteikšanās ļauj piekļūt direktorija saturam, pretējā gadījumā tiks parādīta kļūda “Nepieciešama autorizācija 401”.

Kā iestatīt uz nosaukuma balstītus virtuālos resursdatorus (servera blokus) Nginx

Servera konteksts ļauj vairākus domēnus/vietnes saglabāt un apkalpot vienā un tajā pašā fiziskajā mašīnā vai virtuālajā privātajā serverī (VPS). Katras vietnes/domēna http kontekstā var deklarēt vairākus serveru blokus (kas pārstāv virtuālos resursdatorus). Nginx izlemj, kurš serveris apstrādā pieprasījumu, pamatojoties uz saņemto pieprasījuma galveni.

Mēs parādīsim šo koncepciju, izmantojot šādus fiktīvos domēnus, katrs no kuriem atrodas norādītajā direktorijā:

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

Pēc tam katrai vietnei piešķiriet direktorijā atbilstošās atļaujas.

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

Tagad katrā public_html direktorijā izveidojiet faila index.html paraugu.

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

Pēc tam izveidojiet servera bloka konfigurācijas failus katrai vietnei direktorijā /etc/httpd/conf.d.

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

Pievienojiet šādu servera bloka deklarāciju 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;
        }
     
}

Pēc tam pievienojiet šādu servera bloka deklarāciju failā 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;
        }
     
}

Lai lietotu pēdējās izmaiņas, restartējiet Nginx tīmekļa serveri.

$ sudo systemctl restart nginx

un, novirzot tīmekļa serveri uz iepriekš minētajām adresēm, jums vajadzētu redzēt manekena domēnu galvenās lapas.

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

Svarīgi: ja esat iespējojis SELinux, tā noklusējuma konfigurācija neļauj Nginx piekļūt failiem ārpus labi zināmām pilnvarotām vietām (piemēram,/etc/nginx konfigurācijām,/var/log/nginx žurnāliem,/var/www/html tīmekļa failiem utt.).

To var apstrādāt, atspējojot SELinux vai iestatot pareizo drošības kontekstu. Lai iegūtu papildinformāciju, skatiet šo rokasgrāmatu: Nginx un Nginx Plus lietošana kopā ar SELinux vietnē Nginx Plus.

Kā instalēt un konfigurēt SSL ar Nginx

SSL sertifikāti palīdz jūsu vietnē iespējot drošu http (HTTPS), kas ir būtiski, lai izveidotu uzticamu/drošu savienojumu starp galalietotājiem un jūsu serveri, šifrējot informāciju, kas tiek pārsūtīta uz jūsu vietni, no tās vai tajā.

Mēs aplūkosim, kā izveidot un instalēt pašparakstītu sertifikātu un ģenerēt sertifikāta parakstīšanas pieprasījumu (CSR), lai iegūtu SSL sertifikātu no sertifikātu iestādes (CA), lai to izmantotu ar Nginx.

Pašu parakstītus sertifikātus var brīvi izveidot, un tos praktiski var izmantot testēšanas nolūkos un tikai iekšējiem LAN tikai pakalpojumiem. Serveriem, kas vērsti uz publisku piekļuvi, ir ļoti ieteicams izmantot CA izsniegtu sertifikātu (piemēram, Let’s Encrypt), lai saglabātu tā autentiskumu.

Lai izveidotu pašparakstītu sertifikātu, vispirms izveidojiet direktoriju, kurā tiks glabāti jūsu sertifikāti.

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

Pēc tam, izmantojot komandrindas rīku openssl, ģenerējiet pats parakstītu sertifikātu un atslēgu.

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

Īsumā aprakstīsim iepriekšminētajā komandā izmantotās opcijas:

  • req -X509 - parāda, ka mēs izveidojam x509 sertifikātu.
  • -mezgli (NO DES) - nozīmē “nešifrēt atslēgu”.
  • -days 365 - norāda dienu skaitu, kurā sertifikāts būs derīgs.
  • -newkey rsa: 2048 - norāda, ka atslēgai, kas ģenerēta, izmantojot RSA algoritmu, jābūt 2048 bitu.
  • -keyout /etc/nginx/ssl-certs/nginx.key - norāda pilnu RSA atslēgas ceļu.
  • -out /etc/nginx/ssl-certs/nginx.crt - norāda visu sertifikāta ceļu.

Pēc tam atveriet savu virtuālā resursdatora konfigurācijas failu un pievienojiet šīs rindas servera bloka deklarācijai, klausoties 443. portu. Mēs pārbaudīsim ar virtuālā resursdatora failu /etc/nginx/conf.d/wearelinux-console.net.conf.

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

Pēc tam pievienojiet ssl direktīvu nginx konfigurācijas failam, tam vajadzētu izskatīties līdzīgi zemāk redzamajam.

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

}

Tagad restartējiet Nginx un norādiet pārlūkprogrammu uz šo adresi.

https://www.wearelinux-console.net

Ja vēlaties iegādāties SSL sertifikātu no SI, jums jāveido sertifikāta parakstīšanas pieprasījums (CSR), kā parādīts.

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

Varat arī izveidot CSR no esošās privātās atslēgas.

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

Pēc tam jums jānosūta ģenerētais CSR CA, lai pieprasītu izsniegt CA parakstītu SSL sertifikātu. Kad esat saņēmis sertifikātu no CA, varat to konfigurēt, kā parādīts iepriekš.

Šajā rakstā mēs esam paskaidrojuši, kā instalēt un konfigurēt Nginx; aprakstīts, kā iestatīt uz vārda balstītu virtuālo mitināšanu ar SSL, lai nodrošinātu datu pārraidi starp tīmekļa serveri un klientu.

Ja nginx instalēšanas/konfigurēšanas procesā esat piedzīvojis kādas neveiksmes vai jums ir kādi jautājumi vai komentāri, izmantojiet zemāk esošo atsauksmju veidlapu, lai sazinātos ar mums.