Zoeken op website

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.