Virtual hosts
IPv6 en meerdere virtual hosts in nginx
Nginx is standaard al ipv6 ready maar bij het configuren van meerdere virtual hosts en ipv6 loop je soms tegen een foutmelding aan bij een (re)start van nginx: cannot bound.. enz. Dit is op te lossen door een virtual host als de default host te configureren en aan te geven op welke poort en ipadres geluisterd moet worden:
server { listen 80; listen [::]:80 default_server ipv6only=on; server_name domain1.com www.domain1.com ; .... } server { listen 80; listen [::]:80; server_name domain2.com www.domain2.com ; .... }
Standaard catch-all virtual host
Om requests naar nginx af te vangen voor niet geconfigureerde domeinen kan een de onderstaande configuratie gebruikt worden. Zo kan een soort landingspagina gebruikt worden om dit soort requests op te vangen of automatisch worden doorverwezen naar een default host:
http { index index.html; server { listen 80 default; server_name _; access_log logs/default.access.log main; server_name_in_redirect off; root /var/www/html/htdocs/catchall; } }
Directory beveiligen met basic authentication
Nginx werkt niet zoals Apache met .htaccess
files maar kan op een gelijksoortige manier die Apache ook kan middels de configuratie van een (virtual) host een directory met een password (basic authentication) beveiligen. Met de htpasswd util kan op dezelfde manier als voor apache file worden aangemaakt met een user en password. In dit voorbeeld wordt het bestand mypassword.txt
aangemaakt in de directory /etc/nginx
:
htpasswd -c /etc/nginx/mypassword.txt piet
Als dit bestand er staat en we de directory /downloads
willen beveiligen zodat alleen de user piet erbij kan:
location /downloads { index index.php index.html; root /var/www/html/mydomain; auth_basic Downloads voor piet; auth_basic_user_file /etc/nginx/mypassword.txt; }
Automatisch indexeren van een directory
Voorbeeld om de inhoud van een (download) directory automatisch door nginx te indexeren:
location /downloads { root /var/www/domain1; autoindex on; }
In dit geval wordt voor de directory /var/www/domain1/downloads
automatisch een index aangemaakt op een soort gelijke wijze als de mod_index module voor Apache doet. Uiteraard dient nginx gecompileerd te zijn met de autoindex module, of dat het geval is kan worden opgevraagd met nginx -V
Problemen met uploaden van bestanden
Indien er problemen zijn met het uploaden van bestanden via een form dan moet voor de desbetreffende (virtual) host de client_max_body_size
parameter een waarde krijgen van de maximale grootte. Als bijvoorbeeld uploads tot 50MB mogelijk moeten zijn wordt de volgende regel opgenomen:
client_max_body_size 50m;
PHP
Installeer spawn-fcgi of download de source met wget http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.bz2
Na de installatie (of de compilatie en installatie van de source) kan deze gestart worden zoals in onderstaand voorbeeld:
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 53000 -P /var/run/fastcgi-php.pid -- /usr/bin/php-cgi
In de configuratie van nginx worden de volgende regels opgenomen:
location ~ \.php$ { fastcgi_pass 127.0.0.1:53000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; include fastcgi_params
En vervolgens is uiteraard een restart van nginx nodig om de configuratiewijzigingen actief te maken.
NGINX service script voor systemd
Diverse linux distributies gebruiken systemctl om services te stoppen en te starten. Voordeel is dat er in het startup script afhankelijkheden kunnen worden opgegeven. Het opstartscript staat dan niet meer in /etc/init.d
maar in /lib/systemd
Volg onderstaande stappen om NGINX te kunnen stoppen/starten via het service
commando:
Maak in /lib/systemd/system
een tekstbestand aan met als naam nginx.service
en met de volgende inhoud:
[Unit] Description=Nginx - a high performance http(s) server After=syslog.target network.target [Service] Type=forking ExecStart=/usr/sbin/nginx ExecReload=/usr/sbin/nginx -s reload [Install] WantedBy=multi-user.target
Maak in /etc/systemd/system/multi-user.target.want
een static link naar dit bestand met: ln -s /lib/systemd/system/nginx.service nginx.service
Geef het commando systemctl