wordpress hosting - vpn - cloud - statistiekservice - email

LinuxPro stapt over naar http/2

Het zal wellicht de gemiddelde gebruiker een worst wezen maar LinuxPro draait nu met NGINX met het http/2 protocol. Het werd de hoogste tijd voor een opvolger van het oude HTTP protocol. We hebben een tijd met een tussenvorm gedraaid: SPDY maar dat is nu ingehaald door http2. Overigens schijnt Apache ook in experimentele fase http2 te ondersteunen.

Het nietuwe protocol wat vastgelegd is onder RFC7540 zorgt voor een sneller en veiliger internet en wie kan daar nou op tegen zijn?  Door compressie en versleuting wordt het (voorlopig in ieder geval) een stuk moeilijk om onderschepte data te decoderen en door de compressie komt niet alleen een verzoek om een pagina op te vragen sneller aan maar ook de pagina zelf. 

We zijn nog aan het finetunen oa. met de SSL ciphers om tot een zo snel en veilig mogelijke site te komen voor een zo breed mogelijk publiek. Heel oude browsers zullen overigens met deze techniek, net zoals met SPDY niet om kunnen gaan. 

Uitgebreidere documentatie vind je hier: https://http2.github.io/

Redirect NGINX van http naar https

Om bezoekers direct naar de https variant van een website te sturen kan in NGINX worden bereikt door in de configuratie van de virtual host een rewrite rule op te nemen:

  location / { 
      rewrite ^ https://$server_name$request_uri permanent; }

 

 

 

 

 

 

 

NGINX 1.3.15 introduceert SPDY

nginx

De webserversoftware van NGINX is een goed en snel alternatief voor Apache. In de ontwikkelaarsversie 1.3.15 is het SPDY protocol geintroduceerd. Het werkt alleen indien gebruik gemaakt wordt van OpenSSL 1.0.1 of hoger.

Dit SPDY protocol, ontwikkeld door Google, zorgt voor snellere en veilige verbindingen naar websites. LinuxPro heeft dit geimplementeerd voor de webmail.

Er is voor Google Chrome en Firefox extensies beschikbaar die tonen of een website het SPDY protocol ondersteund.

configuratie

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