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.