Hoe Nginx te installeren met virtuele hosts en SSL-certificaat
Nginx (afkorting van Engine-x) is een gratis, open source, krachtige, krachtige en schaalbare HTTP- en reverse proxy-server, een mail- en standaard TCP/UDP-proxy server. Het is gemakkelijk te gebruiken en te configureren, met een eenvoudige configuratietaal. Nginx is nu de geprefereerde webserversoftware voor het aansturen van zwaarbelaste sites, vanwege de schaalbaarheid en prestaties.
In dit artikel wordt besproken hoe u Nginx als HTTP-server kunt gebruiken, deze kunt configureren om webinhoud te serveren, op naam gebaseerde virtuele hosts kunt instellen en SSL kunt maken en installeren voor veilige gegevensoverdracht, inclusief een zelfondertekend certificaat op Ubuntu en CentOS .
Hoe Nginx-webserver te installeren
Begin eerst met het installeren van het Nginx-pakket vanuit de officiële repositories met behulp van uw pakketbeheerder, zoals weergegeven.
------------ On Ubuntu ------------
sudo apt update
sudo apt install nginx
------------ On CentOS ------------
sudo yum update
sudo yum install epel-release
sudo yum install nginx
Nadat het Nginx-pakket is geïnstalleerd, moet u de service voorlopig starten, deze automatisch laten starten tijdens het opstarten en de status ervan bekijken met behulp van de volgende opdrachten. Houd er rekening mee dat het op Ubuntu automatisch moet worden gestart en ingeschakeld terwijl het pakket vooraf is geconfigureerd.
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
Op dit punt zou de Nginx-webserver actief moeten zijn. U kunt de status verifiëren met de netstat-opdracht.
sudo netstat -tlpn | grep nginx
Als op uw systeem een firewall is ingeschakeld, moet u poort 80 en 443 openen om HTTP- en HTTPS-verkeer toe te staan respectievelijk, er doorheen, door te rennen.
------------ 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
De ideale methode om de Nginx-installatie te testen en te controleren of deze actief is en webpagina's kan weergeven, is door een webbrowser te openen en naar het IP-adres van de server te verwijzen.
http://Your-IP-Address
OR
http://Your-Domain.com
Een werkende installatie moet worden aangegeven door het volgende scherm.
Hoe Nginx-webserver te configureren
De configuratiebestanden van Nginx bevinden zich in de directory /etc/nginx
en het globale configuratiebestand bevindt zich op /etc/nginx/nginx.conf
op zowel CentOS als Ubuntu.
Nginx bestaat uit modules die worden bestuurd door verschillende configuratie-opties, bekend als richtlijnen. Een directive kan eenvoudig zijn (in de vorm van naam en waarden afgesloten met een ;
) of blok (heeft extra instructies ingesloten met {}
). En een blokrichtlijn die andere richtlijnen bevat, wordt een context genoemd.
Alle richtlijnen worden uitgebreid uitgelegd in de Nginx-documentatie op de projectwebsite. Voor meer informatie kunt u ernaar verwijzen.
Statische inhoud weergeven met Nginx in de standalone-modus
Op een fundamenteel niveau kan Nginx worden gebruikt om statische inhoud zoals HTML en mediabestanden aan te bieden, in stand-alone modus, waarbij alleen het standaard serverblok wordt gebruikt (analoog aan Apache waar geen virtuele hosts zijn geconfigureerd).
We beginnen met een korte uitleg van de configuratiestructuur in het hoofdconfiguratiebestand.
sudo vim /etc/nginx/nginx.conf
Als je dit Nginx-configuratiebestand bekijkt, zou de configuratiestructuur er als volgt moeten uitzien en dit wordt de hoofdcontext genoemd, die vele andere eenvoudige en blokrichtlijnen bevat. Al het webverkeer wordt afgehandeld in de http-context.
user nginx;
worker_processes 1;
.....
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
.....
events {
.....
}
http {
server{
…….
}
.....
}
Het volgende is een voorbeeld van een Nginx-hoofdconfiguratiebestand (/etc/nginx/nginx.conf), waarbij het http-blok hierboven een include-richtlijn bevat die Nginx vertelt waar websiteconfiguratiebestanden kunnen worden gevonden (virtuele hostconfiguraties) .
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;
}
Merk op dat je op Ubuntu ook een extra include-richtlijn zult vinden (include /etc/nginx/sites-enabled/*;), waar de map /etc /nginx/sites-enabled/ slaat symlinks op naar de configuratiebestanden van de website die zijn gemaakt in /etc/nginx/sites-available/, om de sites in te schakelen. En als u een symlink verwijdert, wordt die specifieke site uitgeschakeld.
Op basis van uw installatiebron vindt u het standaard websiteconfiguratiebestand op /etc/nginx/conf.d/default.conf (als u het hebt geïnstalleerd vanuit de officiële NGINX-repository en EPEL) of /etc/nginx/sites-enabled/default (als je hebt geïnstalleerd vanuit Ubuntu-repository's).
Dit is ons voorbeeld van een standaard nginx-serverblok op /etc/nginx/conf.d/default.conf op het testsysteem.
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/html/;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Een korte uitleg van de richtlijnen in de bovenstaande configuratie:
- luisteren: specificeert de poort waarop de server luistert.
- servernaam: definieert de servernaam. Dit kunnen exacte namen, jokertekens of reguliere expressies zijn.
- root: specificeert de map van waaruit Nginx webpagina's en andere documenten zal weergeven.
- index: specificeert het type(s) van de indexbestanden die moeten worden aangeboden.
- locatie: gebruikt om verzoeken voor specifieke bestanden en mappen te verwerken.
Wanneer u vanuit een webbrowser naar de server verwijst met behulp van de hostnaam localhost of het IP-adres ervan, wordt het verzoek verwerkt en wordt het bestand /var/www/html/index.html weergegeven., en slaat de gebeurtenis onmiddellijk op in het toegangslogboek (/var/log/nginx/access.log) met een 200 (OK) antwoord. In het geval van een fout (mislukte gebeurtenis), wordt het bericht vastgelegd in het foutenlogboek (/var/log/nginx/error.log).
Voor meer informatie over inloggen in Nginx kunt u het gedeelte Aangepaste toegangs- of foutenlogboekindelingen configureren in Nginx raadplegen.
In plaats van de standaard logbestanden te gebruiken, kunt u aangepaste logbestanden voor verschillende websites definiëren, zoals we later zullen bekijken, onder de sectie “op naam gebaseerde virtuele hosts instellen (serverblokken)”.
Hoe u de toegang tot een webpagina beperkt met Nginx
Om de toegang tot uw website/applicatie of bepaalde delen ervan te beperken, kunt u basis-HTTP-authenticatie instellen. Dit kan hoofdzakelijk worden gebruikt om de toegang tot de gehele HTTP-server, individuele serverblokken of locatieblokken te beperken.
Begin met het maken van een bestand waarin uw toegangsgegevens (gebruikersnaam/wachtwoord) worden opgeslagen met behulp van het hulpprogramma htpasswd.
yum install httpd-tools #RHEL/CentOS
sudo apt install apache2-utils #Debian/Ubuntu
Laten we bijvoorbeeld gebruikersbeheerder aan deze lijst toevoegen (u kunt zoveel mogelijk gebruikers toevoegen), waarbij de optie -c
wordt gebruikt om het wachtwoordbestand op te geven, en de optie -B
om het wachtwoord te coderen. Zodra u op [Enter] klikt, wordt u gevraagd het wachtwoord van de gebruiker in te voeren:
sudo htpasswd -Bc /etc/nginx/conf.d/.htpasswd admin
Laten we vervolgens de juiste rechten en eigendom aan het wachtwoordbestand toewijzen (vervang de gebruiker en groep nginx door www-data op Ubuntu).
sudo chmod 640 /etc/nginx/conf.d/.htpasswd
sudo chown nginx:nginx /etc/nginx/conf.d/.htpasswd
Zoals we eerder vermeldden, kunt u de toegang tot uw webserver, een enkele website (met behulp van het serverblok) of een specifieke map of bestand beperken. Om dit te bereiken kunnen twee nuttige richtlijnen worden gebruikt:
- auth_basic – schakelt de validatie van gebruikersnaam en wachtwoord in met behulp van het “HTTP Basic Authentication”-protocol.
- auth_basic_user_file – specificeert het bestand van de inloggegevens.
Als voorbeeld laten we zien hoe u de map /var/www/html/protected met een wachtwoord kunt beveiligen.
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;
}
}
Sla nu de wijzigingen op en start de Nginx-service opnieuw.
sudo systemctl restart nginx
De volgende keer dat u uw browser naar de bovenstaande map (http://localhost/protected) verwijst, wordt u gevraagd uw inloggegevens in te voeren (gebruikersnaam admin en het gekozen wachtwoord ).
Als u zich succesvol heeft aangemeld, krijgt u toegang tot de inhoud van de map, anders krijgt u de foutmelding '401-autorisatie vereist'.
Hoe op naam gebaseerde virtuele hosts (serverblokken) in Nginx in te stellen
Dankzij de servercontext kunnen meerdere domeinen/sites worden opgeslagen en bediend vanaf dezelfde fysieke machine of virtuele privéserver (VPS). Er kunnen meerdere serverblokken (die virtuele hosts vertegenwoordigen) binnen de http-context voor elke site/domein worden gedeclareerd. Nginx beslist welke server een verzoek verwerkt op basis van de verzoekheader die het ontvangt.
We zullen dit concept demonstreren met behulp van de volgende dummydomeinen, elk in de opgegeven map:
- wearelinux-console.net – /var/www/html/wearelinux-console.net/
- welovelinux.com – /var/www/html/welovelinux.com/
Wijs vervolgens de juiste machtigingen toe voor de map voor elke site.
sudo chmod -R 755 /var/www/html/wearelinux-console.net/public_html
sudo chmod -R 755 /var/www/html/welovelinux.com/public_html
Maak nu een voorbeeldbestand van index.html in elke map 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>
Maak vervolgens de serverblokconfiguratiebestanden voor elke site in de map /etc/httpd/conf.d.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
sudo vi /etc/nginx/conf.d/welovelinux.com.conf
Voeg de volgende serverblokdeclaratie toe aan het bestand 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;
}
}
Voeg vervolgens de volgende serverblokdeclaratie toe aan het bestand 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;
}
}
Om de recente wijzigingen toe te passen, start u de Nginx-webserver opnieuw op.
sudo systemctl restart nginx
en als u uw webserver naar de bovenstaande adressen verwijst, ziet u de hoofdpagina's van de dummy-domeinen.
http://wearelinux-console.net
http://welovelinux.com
Belangrijk: als je SELinux hebt ingeschakeld, staat de standaardconfiguratie Nginx niet toe om toegang te krijgen tot bestanden buiten bekende geautoriseerde locaties (zoals /etc/nginx voor configuraties, /var/log/nginx voor logs, /var/www/html voor webbestanden enz.) .
Je kunt dit afhandelen door SELinux uit te schakelen, of door de juiste beveiligingscontext in te stellen. Raadpleeg voor meer informatie deze handleiding: Nginx en Nginx Plus gebruiken met SELinux op de Nginx Plus-website.
SSL installeren en configureren met Nginx
SSL-certificaten helpen bij het inschakelen van beveiligde http (HTTPS) op uw site, wat essentieel is voor het tot stand brengen van een vertrouwde/veilige verbinding tussen de eindgebruikers en uw server door de informatie te coderen die wordt verzonden naar, van of binnen uw site.
We bespreken hoe u een zelfondertekend certificaat kunt maken en installeren, en hoe u een certificaatondertekeningsverzoek (CSR) kunt genereren om een SSL-certificaat van een certificeringsinstantie (CA) te verkrijgen. te gebruiken met Nginx.
Zelfondertekende certificaten kunnen gratis worden gemaakt en zijn praktisch geschikt voor testdoeleinden en voor interne LAN-only-services. Voor openbare servers wordt het ten zeerste aanbevolen om een certificaat te gebruiken dat is uitgegeven door een CA (bijvoorbeeld Let's Encrypt) om de authenticiteit ervan te behouden.
Om een zelfondertekend certificaat te maken, maakt u eerst een map aan waarin uw certificaten worden opgeslagen.
sudo mkdir /etc/nginx/ssl-certs/
Genereer vervolgens uw zelfondertekende certificaat en de sleutel met behulp van het opdrachtregelprogramma 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
Laten we kort de opties beschrijven die in de bovenstaande opdracht worden gebruikt:
- req -X509 – laat zien dat we een x509-certificaat maken.
- -nodes (NO DES) – betekent “versleutel de sleutel niet”.
- -dagen 365 – specificeert het aantal dagen dat het certificaat geldig is.
- -newkey rsa:2048 – specificeert dat de sleutel die wordt gegenereerd met het RSA-algoritme 2048-bit moet zijn.
- -keyout /etc/nginx/ssl-certs/nginx.key – specificeert het volledige pad van de RSA-sleutel.
- -out /etc/nginx/ssl-certs/nginx.crt – specificeert het volledige pad van het certificaat.
Open vervolgens uw virtuele hostconfiguratiebestand en voeg de volgende regels toe aan een serverblokdeclaratie die luistert op poort 443. We zullen testen met het virtuele hostbestand /etc/nginx/conf.d/wearelinux-console.net.conf.
sudo vi /etc/nginx/conf.d/wearelinux-console.net.conf
Voeg vervolgens de SSL-richtlijn toe aan het nginx-configuratiebestand. Het zou er ongeveer zo uit moeten zien als hieronder.
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;
}
}
Start nu de Nginx opnieuw op en wijs uw browser naar het volgende adres.
https://www.wearelinux-console.net
Als u een SSL-certificaat van een CA wilt kopen, moet u een certificaatondertekeningsverzoek (CSR) genereren, zoals weergegeven.
sudo openssl req -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl-certs/example.com.key -out /etc/nginx/ssl-certs/example.com.csr
U kunt ook een CSR maken op basis van een bestaande privésleutel.
sudo openssl req -key /etc/nginx/ssl-certs/example.com.key -new -out /etc/nginx/ssl-certs/example.com.csr
Vervolgens moet u de gegenereerde CSR naar een CA sturen om de uitgifte van een door een CA ondertekend SSL-certificaat aan te vragen. Zodra u uw certificaat van de CA heeft ontvangen, kunt u het configureren zoals hierboven weergegeven.
Lees ook: de ultieme gids voor het beveiligen, versterken en verbeteren van de prestaties van de Nginx-webserver
Samenvatting
In dit artikel hebben we uitgelegd hoe je Nginx installeert en configureert; behandelde hoe u op naam gebaseerde virtuele hosting met SSL kunt instellen om gegevensoverdracht tussen de webserver en een client te beveiligen.
Als je tegenslagen hebt ondervonden tijdens het installatie-/configuratieproces van nginx of als je vragen of opmerkingen hebt, gebruik dan het onderstaande feedbackformulier om ons te bereiken.