Sådan installeres Nginx med virtuelle værter og SSL-certifikat


Nginx (forkortelse for Engine-x) er en gratis, open source, kraftfuld, højtydende og skalerbar HTTP og reverse proxyserver, en mail og standard TCP/UDP proxyserver. Det er let at bruge og konfigurere med et simpelt konfigurationssprog. Nginx er nu den foretrukne webserversoftware til at drive kraftigt belastede websteder på grund af dets skalerbarhed og ydeevne.

I denne artikel vil vi diskutere, hvordan man bruger Nginx som en HTTP-server, konfigurerer den til at tjene webindhold og opsætter navne-baserede virtuelle værter og opretter og installerer SSL til sikre datatransmissioner, herunder et selvsigneret certifikat på Ubuntu og CentOS .

Sådan installeres Nginx Web Server

Start først med at installere Nginx-pakken fra de officielle arkiver ved hjælp af din pakkehåndtering som vist.

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

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

Når Nginx-pakken er installeret, skal du starte tjenesten indtil videre, aktivere den til automatisk start ved opstartstid og se dens status ved hjælp af følgende kommandoer. Bemærk, at på Ubuntu skal den startes og aktiveres automatisk, mens pakken er forudkonfigureret.

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

På dette tidspunkt skal Nginx-webserveren køre, du kan kontrollere status med netstat-kommandoen.

$ sudo netstat -tlpn | grep nginx

Hvis dit system har en firewall aktiveret, skal du åbne port 80 og 443 for at tillade henholdsvis HTTP og HTTPS-trafik gennem den ved at køre.

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

Den ideelle metode til test af Nginx-installationen og kontrol af, om den kører og er i stand til at betjene websider, er ved at åbne en webbrowser og pege på serverens IP.

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

En fungerende installation skal angives med følgende skærmbillede.

Sådan konfigureres Nginx Web Server

Nginxs konfigurationsfiler findes i biblioteket /etc/nginx , og den globale konfigurationsfil findes på /etc/nginx/nginx.conf på både CentOS og Ubuntu.

Nginx består af moduler, der styres af forskellige konfigurationsindstillinger, kendt som direktiver. Et direktiv kan enten være simpelt (i formnavnet og de værdier, der afsluttes med en ; ) eller blok (har ekstra instruktioner vedlagt ved hjælp af {} ). Og et blokdirektiv, der indeholder andre direktiver, kaldes en kontekst.

Alle direktiver er forklaret grundigt i Nginx-dokumentationen på projektwebstedet. Du kan henvise til det for mere information.

På et grundlæggende niveau kan Nginx bruges til at servere statisk indhold såsom HTML og mediefiler i standalone-tilstand, hvor kun standardserverblokken bruges (analogt med Apache, hvor der ikke er konfigureret nogen virtuelle værter).

Vi starter med kort at forklare konfigurationsstrukturen i hovedkonfigurationsfilen.

 
$ sudo vim /etc/nginx/nginx.conf

Hvis du ser på denne Nginx-konfigurationsfil, skal konfigurationsstrukturen se ud som følger, og dette kaldes hovedkonteksten, som indeholder mange andre enkle og blokdirektiver. Al webtrafik håndteres i http-sammenhæng.

user  nginx;
worker_processes  1;
.....

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

events {
       	.....
}

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

Det følgende er en eksempel på Nginx-hovedkonfigurationsfil (/etc/nginx/nginx.conf), hvor http-blokken ovenfor indeholder et inkluderingsdirektiv, der fortæller Nginx, hvor webkonfigurationsfiler (virtuelle værtskonfigurationer) skal findes.

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

Bemærk, at på Ubuntu finder du også et yderligere inkluderingsdirektiv (inkluderer/etc/nginx/sites-enabled/*;), hvor biblioteket/etc/nginx/sites-enabled/gemmer symlinks til websteds konfigurationsfiler oprettet i/etc/nginx/sites-available /, for at aktivere webstederne. Og sletning af et symlink deaktiverer det pågældende websted.

Baseret på din installationskilde finder du standardwebsite-konfigurationsfilen på /etc/nginx/conf.d/default.conf (hvis du installerede fra officielt NGINX-arkiv og EPEL) eller/etc/nginx/sites-enabled/default (hvis du har installeret fra Ubuntu-arkiver).

Dette er vores eksempel standard nginx serverblok placeret på /etc/nginx/conf.d/default.conf på testsystemet.

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

En kort forklaring af direktiverne i ovenstående konfiguration:

  • lyt: specificerer den port, som serveren lytter til.
  • servernavn: definerer servernavnet, der kan være nøjagtige navne, jokertegnnavne eller regulære udtryk.
  • root: specificerer den mappe, hvorfra Nginx skal servere websider og andre dokumenter.
  • indeks: angiver typen (e) af de indeksfiler, der skal vises.
  • placering: bruges til at behandle anmodninger om specifikke filer og mapper.

Når du peger på serveren ved hjælp af værtsnavnet localhost eller dens IP-adresse fra en webbrowser, behandler den anmodningen og serverer filen /var/www/html/index.html og gemmer øjeblikkeligt begivenheden i dens adgangslog (/ var/log/nginx/access.log) med et svar på 200 (OK). I tilfælde af en fejl (mislykket begivenhed) registrerer den meddelelsen i fejlloggen (/var/log/nginx/error.log).

For at lære mere om logning i Nginx kan du se Sådan konfigureres brugerdefineret adgang eller fejllogformater i Nginx.

I stedet for at bruge standardlogfilerne kan du definere brugerdefinerede logfiler til forskellige websteder, som vi senere skal se på, under afsnittet “opsætning af navnebaserede virtuelle værter (serverblokke)”.

For at begrænse adgangen til dit websted/din applikation eller nogle dele af den kan du konfigurere grundlæggende HTTP-godkendelse. Dette kan i det væsentlige bruges til at begrænse adgangen til hele HTTP-serveren, individuelle serverblokke eller placeringsblokke.

Start med at oprette en fil, der gemmer dine adgangsoplysninger (brugernavn/adgangskode) ved hjælp af htpasswd-værktøjet.

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

Lad os som et eksempel tilføje brugeradministrator til denne liste (du kan tilføje så mange brugere som muligt), hvor indstillingen -c bruges til at specificere adgangskodefilen, og -B for at kryptere adgangskoden. Når du har trykket på [Enter], bliver du bedt om at indtaste brugerens adgangskode:

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

Lad os derefter tildele de rigtige tilladelser og ejerskab til adgangskodefilen (udskift brugeren og gruppen nginx med www-data på Ubuntu).

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

Som vi nævnte tidligere, kan du begrænse adgangen til din webserver, et enkelt websted (ved hjælp af dets serverblok) eller en bestemt mappe eller fil. To nyttige direktiver kan bruges til at opnå dette:

  • auth_basic - aktiverer validering af brugernavn og adgangskode ved hjælp af "HTTP Basic Authentication" -protokollen.
  • auth_basic_user_file - angiver legitimationsoplysningens fil.

Som et eksempel viser vi, hvordan du beskytter biblioteket/var/www/html/beskyttet med adgangskode.

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

Gem nu ændringer, og genstart Nginx-tjenesten.

$ sudo systemctl restart nginx 

Næste gang du peger din browser på ovenstående bibliotek (http:/localhost/beskyttet), bliver du bedt om at indtaste dine loginoplysninger (brugernavn admin og den valgte adgangskode).

Et vellykket login giver dig adgang til bibliotekets indhold, ellers får du en "401 autorisation påkrævet" -fejl.

Sådan konfigureres navnebaserede virtuelle værter (serverblokke) i Nginx

Serverkonteksten tillader, at flere domæner/websteder gemmes i og serveres fra den samme fysiske maskine eller virtuelle private server (VPS). Flere serverblokke (der repræsenterer virtuelle værter) kan erklæres inden for http-konteksten for hvert websted/domæne. Nginx beslutter, hvilken server der behandler en anmodning baseret på den anmodningshoved, den modtager.

Vi demonstrerer dette koncept ved hjælp af følgende dummy-domæner, der hver findes i den angivne mappe:

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

Dernæst tildel de relevante tilladelser til biblioteket for hvert websted.

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

Opret nu en prøve index.html-fil i hver public_html-mappe.

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

Opret derefter serverblokkonfigurationsfiler for hvert websted i /etc/httpd/conf.d-biblioteket.

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

Tilføj følgende serverblokeringserklæring i filen 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;
        }
     
}

Dernæst tilføj følgende serverblokeringserklæring i filen 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;
        }
     
}

For at anvende de seneste ændringer skal du genstarte Nginx-webserveren.

$ sudo systemctl restart nginx

og pege din webserver til ovenstående adresser skulle få dig til at se hovedsiderne i dummy-domænerne.

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

Vigtigt: Hvis du har SELinux aktiveret, giver standardkonfigurationen ikke Nginx adgang til filer uden for velkendte autoriserede placeringer (såsom/etc/nginx til konfigurationer,/var/log/nginx for logs,/var/www/html til webfiler osv ..).

Du kan håndtere dette ved enten at deaktivere SELinux eller indstille den korrekte sikkerhedskontekst. For mere information henvises til denne vejledning: brug af Nginx og Nginx Plus med SELinux på Nginx Plus-webstedet.

Sådan installeres og konfigureres SSL med Nginx

SSL-certifikater hjælper med at aktivere sikker http (HTTPS) på dit websted, hvilket er vigtigt for at etablere en pålidelig/sikker forbindelse mellem slutbrugerne og din server ved at kryptere de oplysninger, der transmitteres til, fra eller inden for dit websted.

Vi vil dække, hvordan man opretter og installerer et selvsigneret certifikat og genererer en certifikatsigneringsanmodning (CSR) for at erhverve et SSL-certifikat fra en certifikatmyndighed (CA) til brug sammen med Nginx.

Selvsignerede certifikater er gratis at oprette og er praktisk anvendelige til testformål og til interne LAN-tjenester. For offentligt vendte servere anbefales det stærkt at bruge et certifikat udstedt af en CA (for eksempel Lad os kryptere) for at opretholde dens ægthed.

For at oprette et selvsigneret certifikat skal du først oprette et bibliotek, hvor dine certifikater gemmes.

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

Generer derefter dit selvsignerede certifikat og nøglen ved hjælp af openssl kommandolinjeværktøjet.

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

Lad os kort beskrive de muligheder, der bruges i ovenstående kommando:

  • req -X509 - viser, at vi opretter et x509-certifikat.
  • -noder (NO DES) - betyder "krypter ikke nøglen".
  • -dage 365 - angiver det antal dage, certifikatet vil være gyldigt.
  • -ny nøgle rsa: 2048 - angiver, at den nøgle, der genereres ved hjælp af RSA-algoritme, skal være 2048-bit.
  • -keyout /etc/nginx/ssl-certs/nginx.key - angiver den fulde sti til RSA-nøglen.
  • -out /etc/nginx/ssl-certs/nginx.crt - angiver certifikatets fulde sti.

Dernæst skal du åbne din virtuelle værts konfigurationsfil og tilføje følgende linjer til en serverblokklæring, der lytter på port 443. Vi tester med den virtuelle værtsfil /etc/nginx/conf.d/wearelinux-console.net.conf.

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

Tilføj derefter ssl-direktivet til nginx-konfigurationsfilen, det skal se ud som nedenfor.

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

}

Genstart Nginx og peg din browser til følgende adresse.

https://www.wearelinux-console.net

Hvis du vil købe et SSL-certifikat fra en CA, skal du oprette en certifikatsigneringsanmodning (CSR) som vist.

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

Du kan også oprette en CSR ud fra en eksisterende privat nøgle.

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

Derefter skal du sende den genererede CSR til en CA for at anmode om udstedelse af et CA-signeret SSL-certifikat. Når du har modtaget dit certifikat fra CA, kan du konfigurere det som vist ovenfor.

I denne artikel har vi forklaret, hvordan du installerer og konfigurerer Nginx; dækkede, hvordan man opsætter navnebaseret virtuel hosting med SSL for at sikre dataoverførsler mellem webserveren og en klient.

Hvis du har oplevet tilbageslag under din nginx installations-/konfigurationsproces eller har spørgsmål eller kommentarer, så brug feedbackformularen nedenfor for at nå os.