NGINX als webserver

Op deze pagina:

NGINX is populair vanwege de goede performance die het biedt en het gemak waarmee NGINX ingesteld kan worden.

NGINX is een lichtgewicht gratis open source HTTP server beschikbaar voor zowel Linux als Windows. Behalve als webserver kan NGINX ook functioneren als een reverse proxy server, als mail proxy server en als load balancer.

NGINX draait als een service of daemon op een server en kan eenvoudig worden bediend via systemctl op Linux.

NGINX installeren

Zorg dat de software op je systeem is bijgewerkt en dat je een gebruiker hebt die sudo rechten heeft om opdrachten als root uit te kunnen voeren.

Kijken of je systeem up-to-date is:


sudo apt update
sudo apt upgrade -y

NGINX is beschikbaar in de standaard Ubuntu en Debian repositories waardoor je deze eenvoudig via apt kunt installeren:


sudo apt install nginx

NGINX starten

Je kunt NGINX starten door deze eerst te activeren (zodat deze voortaan tijdens het starten van het systeem ook meteen zal starten) en dan te starten:


sudo systemctl enable nginx
sudo systemctl start nginx

Kijken of NGINX daadwerkelijk draait:


sudo systemctl status nginx

Je kunt ook in een webbrowser naar het IP-adres van je server gaan om de default pagina van NGINX te krijgen als bewijs dat NGINX draait.

Firewall aanpassen voor NGINX

NGINX moet door de firewall heen kunnen, daar zijn bij ufw drie mogelijkheden voor, zet alleen aan wat je nodig hebt, zodat je geen overbodige poorten openzet.

Alleen poort 80:


sudo ufw allow 'Nginx HTTP'

Alleen poort 443:


sudo ufw allow 'Nginx HTTPS'

Zowel poort 80 als poort 443:


sudo ufw allow 'Nginx Full'

Als je ook SSH wil gebruiken op je server, dan moet je deze ook toegang geven:


sudo ufw allow OpenSSH

De status van de firewall opvragen kan met:


sudo ufw status

NGINX configuratie

De server configuratie bestanden staan in /etc/nginx

directory etc nginx

Het algemene NGINX server configuratie bestand is: /etc/nginx/nginx.conf

In dit bestand moet deze regel staan om onderstaande configuratiebestanden ook te kunnen gebruiken:


include /etc/nginx/sites-enabled/*.conf;

nginx.conf in nano 1

nginx.conf in nano 2

nginx.conf in nano 3

Eventueel kun je deze regel toevoegen:


server_names_hash_bucket_size 64;

Deze regel met server_names_hash_bucket_size verhoogt de toewijzing van geheugen voor het verwerken van domeinnamen.

De configuratie bestanden voor de afzonderlijke websites staan in /etc/nginx/sites-available (op Ubuntu en Debian systemen)

Net als bij Apache worden deze configuratie bestanden pas actief als ze zijn gelinkt naar de (voor NGINX) /etc/nginx/sites-enabled directory.

In de directory /etc/nginx/sites-enabled kun je dus zien welke websites daadwerkelijk actief zijn in NGINX.

directory etc nginx sites-enables - sites-available

Een website waarvoor je een configuratiebestand hebt aan gemaakt in /etc/nginx/sites-available (als voorbeeld: mijnwebsite.nl.conf) kun je linken naar /etc/nginx/sites-enabled met:


sudo ln -s /etc/nginx/sites-available/mijnwebsite.nl.conf /etc/nginx/sites-enabled/

Een eigen 404 pagina maken in NGINX

Wanneer een door een bezoeker opgevraagde webpagina niet gevonden kan worden, volgt er een 404 error. Je kunt in plaats van de standaard 404-pagina een eigen 404-pagina instellen.

Maak eerst een eigen html 404 pagina en sla deze op in de root van de website, geef deze pagina een die het voor jou duidelijk maakt dat het om de pagina gaat die te zien moet zijn bij een 404 error. De naam mag je vrij kiezen, maar neem bijvoorbeeld zoiets: error-404.html.

In /etc/nginx in het html blok kun je nu een regel toevoegen voor de 404 pagina:


error_page 404 /error-404.html;

Voor andere foutcodes, zoals 403 kun je ook eigen error pagina's maken en op dezelfde manier in het configuratie bestand opnemen (met het andere nummer dan natuurlijk).

NGINX logbestanden

De logbestanden van NGINX (access.log en error.log) kun je vinden in de /var/log/nginx/ directory.

  • access.log: Hier wordt elk verzoek aan je webserver in vastgelegd.
  • error.log: Hier worden de fouten in vastgelegd.

error log nginx

In het bovenstaande error log kun je een foutmelding zien over een missende gekrulde eindhaak '}' (vergeten uit commentaar te halen in het bestand 'default') en een foutmelding over de verkeerde php-fpm.sock versie (7.4 i.p.v. 8.1, ook dit stond niet goed in het bestand 'default')

Directory voor de webpagina's

Waar NGINX je webpagina's zoekt (document root), wordt vastgelegd in de configuratiebetanden.

De default directory op Ubuntu en Debian is: /var/www/html

Op andere Linux systemen zoals CentOS, Rocky Linux en Alma Linux is dit: /usr/share/nginx/html.

Meerdere websites hosten

Server blocks, vaak virtual hosts genoemd in NGINX (net zoals in Apache) maken het mogelijk om meerdere websites te hosten op één server.

Maak directories aan voor de bestanden van de websites, in dit voorbeeld website1.nl en website2.nl:


sudo mkdir -p /var/www/website1.nl/html
sudo mkdir -p /var/www/website2.nl/html

De -p in het bovenstaande zorgt ervoor dat eventueel ontbrekende (parent) directories ook worden aangemaakt.

In beide directories kun je nu test html pagina's plaatsen (/var/www/website1.nl/html/index.html en /var/www/website2.nl/html/index.html) die je straks kunt gebruiken om te kijken of het allemaal werkt.

In /etc/nginx/sites-available/ kun je nu de Virtual Host (Server Block) configuratiebestanden aanmaken, deze kun je het beste de naam van de websites geven.

Bijvoorbeeld: /etc/nginx/sites-available/website1.nl.conf en /etc/nginx/sites-available/website2.nl.conf

De inhoud van zo'n Server Block configuratiebestand kan er als volgt uitzien (voor website1.nl):


server {
    listen 80;
    server_name website1.nl www.website1.nl;
    root /var/www/website1.nl/public_html;
    access_log /var/log/nginx/website1-access.log;
    error_log /var/log/nginx/website1-error.log;
}

De betekenis:

  • listen: De poort waar NGINX moet luisteren.
  • server_name: De domeinnaam zonder www en met www
  • root: De plaats waar de bestanden voor de website te vinden zijn
  • error_log: De plaats en naam voor het errorlog voor deze website
  • access_log: De plaats en naam voor het toegangslog voor deze website

virtual host configuratie example

De websites actief maken doe je weer door ze te linken:


sudo ln -s /etc/nginx/sites-available/website1.nl /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/website2.nl /etc/nginx/sites-enabled/

Je kunt de configuratie ook eerst nog testen voordat je NGINX herstart:


sudo nginx -t

Als alles goed staat, dan kun je NGINX herstarten om de nieuwe configuratie in gebruik te nemen:


sudo systemctl restart nginx

De status van NGINX opvragen:


sudo systemctl status nginx

SSL met Let's Encrypt

SSL met Let's Encrypt kan ook met NGINX, ga naar certbot.

Je kunt certbot ook via een snap pakket installeren.

Als snap nog niet is geinstalleerd, dan moet je deze eerst installeren:


sudo apt update
sudo apt install snapd -y
sudo snap install core
sudo snap refresh core

Nu kun je certbot installeren:


sudo snap install --classic certbot

De snap als opdracht beschikbaar maken:


sudo ln -s /snap/bin/certbot /usr/bin/certbot

Voer de volgende opdracht uit om je certificaten te installeren:


sudo certbot --nginx --agree-tos --redirect -m jouwemail@email.nl -d website1.nl -d www.website1.nl

Deze opdracht zal Free SSL nstalleren, redirectie naar HTTPS instellen en NGINX herstarten. Het configuratiebestand voor deze website wordt hiermee dus aangepast door certbot.

Het vernieuwen van het certificaat kan automatisch, voer de volgende opdracht uit:


sudo certbot renew --dry-run

Het testen van de SSL van je website kan via ssllabs.com/ssltest/.

HTTP verkeer doorsturen naar HTTPS

Als je SSL hebt ingeschakeld voor je websites, dan wil je natuurlijk dat je bezoekers allemaal via HTTPS je websites bezoeken.

Je kunt met NGINX je bezoekers automatisch doorsturen naar HTTPS, ook al komen ze via HTTP binnen.

Je kunt dit per website instellen, of voor alle websites tegelijk.

Als je het per website wilt instellen, dan moet je het configuratiebestand voor de die website aanpassen, er moeten dan 3 server blokken in komen te staan.


server {
    # redirect alle HTTP verkeer naar HTTPS
    listen 80;
    server_name website1.nl www.website1.nl;
    return 301 https://website1.nl$request_uri;
}

server {
    # redirect HTTPS www.
    listen              443 ssl;
    server_name         www.website1.nl;
    return 301 https://website1.nl$request_uri;
}

server {
    listen              443 ssl;
    server_name         website1.nl;
    ssl_certificate     website1.nl.crt;
    ssl_certificate_key website1.nl.key;
    ...
}

In plaats van dit in te stellen per website, kun je het ook in één keer instellen voor alle websites in /etc/nginx/nginx.conf


server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name _;
        return 301 https://$host$request_uri;
}

Directories in NGINX met een wachtwoord beveiligen

Het beveiligen van de toegang tot een directory van je website met een gebruikersnaam en een wachtwoord kan met NGINX HTTP basic auth.

Om deze functie te kunnen gebruiken moet je eerst apache2-utils installeren, dit bevat het htpasswd pakket dat je in staat stelt om hashed wachtwoorden te genereren.


sudo apt install apache2-utils

Een gebruiker aanmaken met een wachtwoord. Als voorbeeld: gebruiker kees, met als locatie voor het .htpasswd bestand /etc/nginx/


sudo htpasswd -c /etc/nginx/.htpasswd kees

Nu wordt je gevraagd om een wachtwoord in te geven en dit nogmaals te herhalen, je moet het wachtwoord dus twee keer intypen. In het bovenstaande voorbeeld moet je kees natuurlijk vervangen door de gebruikersnaam die je zelf wilt hebben.

Controleren of het aanmaken van de gebruiker en het wachtwoord succesvol was kan met:


cat /etc/nginx/.htpasswd

Je krijgt nu de inhoud van het bestand .htpasswd te zien, hier moet je gebruikersnaam staan en een hash van je wachtwoord.

Het alleen aanmaken van het bestand .htpasswd is niet genoeg, je moet ook in de configuratie van NGINX aangeven dat dit bestand gebruikt moet worden.

Je kunt dit algemeen doen in /etc/nginx/nginx.conf, of per website, bijvoorbeeld in /etc/nginx/sites-available/mijnwebsite.nl als mijnwebsite.nl je website is.

Voorbeeld:


location /admin {
  auth_basic "Website beheer";
  auth_basic_user_file /etc/nginx/.htpasswd;
}

In het bovenstaande voorbeeld wordt de directory /admin beschermd met een gebrukersnaam en een wachtwoord. Als je je hele website achter een gebruikersnaam en wachtwoord wil plaatsen, dan kun je als locatie / gebruiken (een slash).

Bij auth_basic geef je een naam op die voor jezelf handig is, je bent vrij om die te kiezen.

Bij auth_basic_user_file geef je de locatie van het .htpasswd op.

Controleren of je geen fouten hebt gemaakt bij het aanpassen van de configuratie kan met:


sudo nginx -t

NGINX herladen kan met:


sudo systemctl reload nginx

NGINX herstarten kan met:


sudo systemctl restart nginx

Als je alles goed hebt gedaan, dan kun je nu via je browser naar de locatie gaat die je hebt beveiligd waar je dan eerst je gebruikersnaam en wachtwoord invullen.

Toegang tot directories geheel ontzeggen

Je kunt niet alleen directories met een gebruikersnaam en een wachtwoord beveiligen, maar je kunt ook de toegang tot een directory geheel ontzeggen aan iedereen of aan bepaalde ip-adressen.

Stel je hebt een directory /data waarvan je de toegang wil beperken. In de configuratie van NGINX kun je dat voor elkaar krijgen met deny en allow.

BELANGRIJK: De regels met deny en allow worden op volgorde uitgevoerd, zodra er een match is, hebben de overige regels geen effect meer. Als de eerste regel deny all is, dan hebben de regels die erna komen met allow geen effect meer.

Voorbeeld waarbij de toegang voor iedereen verboden wordt, behalve voor een bepaald ip-adres:


location /data {
    ...
    allow 192.168.1.5;
    deny all;
    ...
}

Voorbeeld waarbij de toegang voor een bepaald ip-adres verboden wordt:


location /data {
    ...
    deny 192.168.1.5;
    ...
}

Voorbeeld waarbij de toegang voor meerdere ip-adressen verboden wordt:


location /data {
   ...
   deny 192.168.1.5;
   deny 192.168.1.8;
   ...
}

Voorbeeld waarbij de toegang voor een reeks van ip-adressen verboden wordt:


location /data {
   ...
   deny 192.168.1.0/24;
   ...
}

Na het aanpassen van configuratiebestanden moet je NGINX herstarten om deze aanpassingen actief te laten worden.


sudo systemctl restart nginx

Wanneer er een pagina wordt opgevraagd uit een directory waar geen toegang tot is, krijgt de opvrager een 403 Forbidden error.

Toegang tot een subdomein beperken

Je kunt niet alleen de toegang tot een directory beperken, maar je kunt ook de toegang tot een subdomein beperken.

Open het configuratiebestand voor de website waarvan je de toegang tot een subdomein wil beperken, bijvoorbeeld /etc/nginx/sites-available/mijnwebsite.nl

BELANGRIJK: De regels met deny en allow worden op volgorde uitgevoerd, zodra er een match is, hebben de overige regels geen effect meer. Als de eerste regel deny all is, dan hebben de regels die erna komen met allow geen effect meer.

Een bepaald ip-adres geen toegang geven tot het subdomein mail:


server {
  server mail.mijnwebsite.nl;
  deny 192.168.1.5;
}

Slechts één ip-adres toegang geven tot het subdomein mail:


server {
  server mail.mijnwebsite.nl;
  allow 192.168.1.5;
  deny all;
}

Meerdere ip-adressen de toegang tot het subdomein mail ontzeggen:


server {
  server mail.mijnwebsite.nl;
  deny 192.168.1.5;
  deny 192.168.1.16;
  deny 192.168.1.27;
}

Een reeks ip-adressen de toegang tot het subdomein mail ontzeggen:


server {
  server mail.mijnwebsite.nl;
  deny 192.168.1.1/24;
}

Na de configuratie aangepast te hebben kun je deze controleren op fouten met:


sudo nginx -t

Als er geen fouten zijn, dan kun je NGINX herstarten om de nieuwe configuratie actief te maken met:


sudo systemctl restart nginx

LEMP (Linux NGINX MariaDB PHP-FPM)

Een webserver die dynamische webpagina's kan serveren heeft een programmeertaal en een database nodig. Vaak worden PHP en MariaDB (MySQL) hiervoor gebruikt. In tegenstelling tot bijvoorbeeld Apache, heeft NGINX geen eigen ondersteuning voor PHP. Daarom wordt PHP-FPM (PHP Fast Process Manager) gebruikt voor het afhandelen van PHP pagina's.

Een voorbeeld van de opdacht waarmee je de hele LEMP stack installeert, inclusief enkele veelgebruikte php uitbreidingen:


sudo apt install nginx mariadb-server mariadb-client php-mysqli php8.1-fpm php-zip php-curl php-xml

Nog wat PHP populaire uitbreidingen die je kunt installeren, onder andere gebruikt door Wordpress:


sudo apt install php-imagick php-opcache php-intl php-common php-bcmath php-imap php-xmlrpc php-json php-readline php-memcached php-memcache php-redis php-mbstring php-apcu

Hierboven wordt release php8.1-fpm geinstalleerd, welke release je kunt gebruiken, hangt af van wat er beschikbaar is in de repository van je Linux systeem. In Ubuntu 22.04 wordt php 8.1 gebruikt.

Je kunt NGINX en PHP-FPM starten met (pas eventueel 8.1 aan naar je eigen versie):


sudo systemctl start nginx php8.1-fpm

Je kunt ervoor zorgen dat NGINX en PHP-FPM starten tijdens de boot van het systeem met (pas eventueel 8.1 aan naar je eigen versie):


sudo systemctl enable nginx php8.1-fpm

Je kunt controleren of ze draaien met (pas eventueel 8.1 aan naar je eigen versie):


sudo systemctl status nginx php8.1-fpm

PHP instellingen die je kunt aanpassen voor webapplicaties in het bestand /etc/php/8.1/fpm/php.ini


upload_max_filesize = 32M # of 20M
post_max_size = 48M # of 21M
memory_limit = 256M
max_execution_time = 600
max_input_vars = 3000
max_input_time = 1000 # of 30

php-fpm.conf in nano

php-fpm.conf in nano

php-fpm.conf in nano

php-fpm.conf in nano

php-fpm.conf in nano

php-fpm.conf in nano

php-fpm.conf in nano

mysql_secure_installation

De installatie van MariaDB (of MySQL) maak je veilig met (stel hiermee ook een wachtwoord voor de root gebruiker in):


sudo mysql_secure_installation

mysql_secure_installation

mysql_secure_installation

mysql_secure_installation

Meld je aan bij MariaDB met de mysql opdracht en specificeer de root gebruiker:


sudo mysql -u root -p

Maak een database aan voor je website:


CREATE DATABASE website1db;

Maak een gebruiker aan voor het verbinden en beheren van de database:


CREATE USER gebruiker@localhost IDENTIFIED BY wachtwoord;

In het bovenstaande moet je 'gebruiker' vervangen door de gebruikersnaam die je wenst en 'wachtwoord' door het wachtwoord dat je wil gebruiken.

Deze gebruiker heeft alle rechten nodig op de database voor de webapplicatie:


GRANT ALL PRIVILEGES ON website1db.* TO gebruiker@localhost;

Nu nog afmelden uit mariadb:


FLUSH PRIVILEGES;
\q

Overzicht van de opdrachten voor de MariaDB service:


# MariaDB service starten
sudo systemctl start mariadb

# MariaDB service stoppen
sudo systemctl stop mariadb

# MariaDB service starten bij de start van het systeem
sudo systemctl enable mariadb

# MariaDB service niet meer starten bij de start van het systeem
sudo systemctl disable mariadb

# MariaDB service herstarten
sudo systemctl restart mariadb

enable mariadb

Om PHP te kunnen gebruiken moet je voor je websites ook de configuratie nog aanpassen.

In bijvoorbeeld /etc/nginx/sites-available/website1.nl.conf voor de website website1.nl moet een locatie blok komen in het server blok voor het afhandelen van de php pagina's:


    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix: /var/run/php/php7.4-fpm.sock;
    }

De index regel moet worden uitgebreid met index.php, zet deze vooraan zodat deze voorrang heeft in de gevallen dat er ook een index.html in de directory aanwezig is.


    index index.php index.html index.html index.nginx-debian.html;

Het server blok begint meestal met:


    listen 80 website1.nl;
    listen [::]:80 website1.nl;

Vergeet ook de regel met root niet, dat is waar je website bestanden staan:


    root /var/www/website1.nl/public_html;

En natuurlijk de regel met server_name:


    server_name website1.nl;

Een volledig serverblok kan er zo uit zien:


server {
    listen 80;
    listen [::]:80;

    server_name website1.nl www.website1.nl;

    root /var/www/html/website1.nl/public_html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

Je kunt een info.php bestand aanmaken in de directory voor je website met de volgende inhoud:


<?php
        phpinfo();
?>

phpinfo

Als je deze pagina opvraagt in je browser, dan moet er bij Server API staan: FPM/FastCGI

Je kunt ook een php script aanmaken om de verbinding met de database-server te testen:


<?php
$dbh = mysqli_connect('localhost', 'gebruiker', 'wachtwoord', "website1db");
if (!$dbh) {
    die('Kon net verbinden: ' . mysqli_error());
}
echo 'Verbinden met MariaDB SQL database gelukt';
mysqli_close($dbh);
?>

In het bovenstaande moet je 'gebruiker', 'wachtwoord' en 'website1db' vervangen door de gegevens die jezelf hebt gebruikt bij het aanmaken van de database.

Sla dit script op in de directory van je website, bijvoorbeeld als dbtest.php en vraag het op via je browser, of via curl.

Eigendom en rechten instellen van bestanden en directories voor NGINX

Het eigendom van bestanden en directories en de bestands- en directory-rechten van de website directories en bestanden moet veilig zijn en het moet zodanig ingesteld zijn dat het ook werkt.

Als je NGINX met PHP-FPM gebruikt, dan moet je voor PHP-FPM een aparte gebruiker per website aanmaken. Die gebruiker kun je dan het beste de naam van de website geven. Dus voor website1.nl maak je een gebruiker aan die website1 heet, voor website2.nl maak je een gebruiker aan die website2 heet, enzovoort. Dit is de website-gebruiker, deze mag geen lid zijn van de sudo groep.

Een gebruiker aanmaken voor PHP-FPM voor website website1.nl:


sudo useradd website1

Deze gebruiker een wachtwoord geven:


sudo passwd website1

Het configuratie bestand voor PHP-FPM voor deze website (bijvoorbeeld: /etc/php-fpm.d/website1.nl.conf) moet dan voorzien worden van deze voor deze website aangemaakte gebruiker:


listen = /var/run/php-fpm/website1.nl.sock
listen.owner = website1
listen.group = website1
listen.mode = 0660
user = website1
group = website1

De NGINX gebruiker

NGINX moet draaien onder zijn eigen, niet-sudo gebruiker. Standaard is dit www-data (Debian/Ubuntu) of nginx (Centos/Alma Linux/Rocky Linux). Dit is de algemene gebruiker die gebruikt wordt voor alle websites. In het configuratiebestand /etc/nginx/nginx.conf kun je dit als volgt zien staan:


user www-data;

De bestanden die behoren bij de website gebruiker groepen moeten kunnen worden gelezen door de NGINX (webserver) gebruiker.


sudo usermod -a -G website1 www-data

Bovenstaande voegt de gebruiker www-data toe aan de website1 groep

Het eigendom van de bestanden in de directory van de website moet liggen bij de website gebruiker en groep. Voorbeeld voor gebruiker website1 van website website1.nl:


sudo chown -R website1:website1 /var/www/website1.nl/public_html

Dit moet je per website instellen.

De rechten op de directories en bestanden voor je website (bijvoorbeeld website1.nl) kun je als volgt goed instellen:


sudo chmod -R u=rwX,g=rX,o= /var/www/website1.nl/public_html

In het bovenstaande krijgt de website gebruiker (website1) lees- en schrijfrechten op alle bestanden en leesrechten op alle directories.

De website groep (webserver gebruiker) krijgt alleen leesrechten, geen schrijfrechten.

De overige gebruikers krijgen helemaal geen rechten.

Troubleshooting Wordpress

Melding: error establishing a database connection wordpress

GRANT vergeten uit te voeren?


GRANT ALL PRIVILEGES ON website1db.* TO gebruiker@localhost;

Melding: To perform the requested action, WordPress needs to access your web server. Please enter your FTP credentials to proceed. If you do not remember your credentials, you should contact your web host.

Bij het verwijderen van plugins: heeft te maken met de rechten op de bestanden en kan als dat het geval is verholpen worden door de gebruiker/groep die eigenaar is van de website-bestanden aan te passen.

Hotlinken van afbeeldingen voorkomen in NGINX

Hotlinken is het (zonder toestemming) gebruiken van afbeeldingen of andere bestanden door andere websites. Hierdoor worden deze afbeeldingen of andere bestanden geserveerd vanaf jouw webserver, dus op jouw kosten en heeft de andere website gratis afbeeldingen of bestanden beschikbaar waar jij de hosting voor betaald.

Hotlinken kun je voorkomen door in het configuratiebestand voor je website, bijvoorbeeld /etc/nginx/sites-available/website1.nl.conf (voor website1.nl) in het server blok regels op te nemen die het hotlinken voorkomen, in het voorbeeld wordt voor de website website1.nl gebruikt, dit moet je vervangen door je eigen website.


        location ~ .(gif|png|jpe?g)$ {
            valid_referers none blocked website1.nl *.website1.nl;
            if ($invalid_referer) {
                return 403;
            }
        }

Extra extensies die je wilt beschermen kun je met een rechtopstaande streep ('pipe') toevoegen tussen de haakjes op de location regel. Stel je wilt hier webp aan toevoegen:

Voorbeeld: location ~ .(gif|png|jpe?g|webp)$ {

Op de regel met valid_referers zet je je eigen websites, dus de websites die de afbeeldingen en andere bestanden wel mogen serveren.

Alle andere websites die een afbeelding proberen op te vragen krijgen een 403 error 'Forbidden/Access Denied'.

Op soortgelijke wijze kun je ook alle bestanden in een bepaalde map afschermen, ongeacht welke extensie deze bestanden hebben.


        location /plaatjes/ {
            valid_referers none blocked website1.nl *.website1.nl;
            if ($invalid_referer) {
                return 403;
            }
        }

In het bovenstaande voorbeeld worden alle bestanden in de map plaatjes beschermd tegen hotlinken.

NGINX starten, stoppen en herstarten (overzicht)

De opdrachten voor NGINX worden op deze webpagina verspreid een aantal maal genoemd, hier staan de opdrachten voor het gemak nog eens bij elkaar:

NGINX starten


sudo systemctl start nginx

NGINX stoppen


sudo systemctl stop nginx

NGINX herstarten (stoppen en dan weer starten)


sudo systemctl restart nginx

Je kunt ook php8.1-fpm meteen mee herstarten:


sudo systemctl restart nginx php8.1-fpm

NGINX herladen (zachte herstart, lopende aanvragen worden niet afgebroken, maar eerst nog afgehandeld)


sudo systemctl reload nginx

NGINX status (laat de status zien)


sudo systemctl status nginx

NGINX enable (zorgen dat NGINX bij het starten van het systeem voortaan automatisch ook start)


sudo systemctl enable nginx

NGINX t (NGINX configuratie testen)


sudo nginx -t

NGINX documentatie

De website van NGINX heeft veel documentatie.

 

Verwante artikelen