Combineer het beste van beide: Nginx en Apache
Nginx is een lichte en snelle webserver zonder goede ondersteuning voor PHP. Het is wel mogelijk via Fast-CGI maar is niet zo snel als de combinatie van Apache met PHP en MySQL. Daarom wordt in deze handleiding het beste van allebei gecombineerd.
De opstelling wordt als volgt:
- Nginx wordt de eerste webserver waarmee bezoekers te maken krijgen. Deze reageert op het IP 192.168.1.100 en luistert naar poort 80.
- Het domein wat Nginx gaat bedienen is kb.mvandek.nl
- Alle afbeeldingen zullen door Nginx worden geserveerd terwijl overige aanvragen doorgestuurd worden naar Apache.
- Apache draait op het IP 127.0.0.1 en luistert ook naar poort 80. Alle aanvragen die doorgestuurd zijn vanaf Nginx zullen door deze webserver behandeld worden en weer teruggegeven worden aan Nginx om die naar de bezoeker te sturen.
- Aangemaakte VirtualHosts in Apache hoeven niet aangepast te worden. Deze worden straks door Apache gebruikt om vast te stellen welke site opgevraagd wordt via Nginx.
Apache
Allereerst (als dat nog niet gebeurt is) moet Apache geïnstalleerd worden.
Lees hier hoe dit moet en ga dan verder met deze handleiding.
Vervolgens moet het IP waar Apache naar luistert aangepast worden zodat er alleen nog maar naar 127.0.0.1 geluisterd wordt, het IP waar Nginx alle overige aanvragen naartoe zal sturen.
Open ports.conf in de map /etc/apache/
- Verander Listen 80 naar Listen 127.0.0.1:80
Sla de wijziging op en herstart Apache
service apache2 restart
Installeer nu de module 'libapache2-mod-rpaf' om ervoor te zorgen dat Apache het juiste IP uit de 'X-Forwarded-For' header haalt. Dit is belangrijk als er een log wordt bijgehouden in combinatie met AWstats of andere pakketten. Deze geven dan het IP van Nginx weer in plaats van die van de bezoeker.
aptitude install libapache2-mod-rpaf
Apache is nu geconfigureerd.
Nginx
Nu moet Nginx geïnstalleerd worden, lees hier hoe dat moet en ga dan verder met deze handleiding.
Nginx moet geconfigureerd worden zodat het naar het adres 192.168.1.100 en poort 80 gaat luisteren.
Ga naar de map /etc/nginx/sites-enabled en open het bestand default
- Verander hier Listen 80 default; naar Listen 192.168.1.100:80 default;
Sla de wijziging op en maak vervolgens een nieuw bestand aan in de map met de naam public
In public wordt het domein waar Nginx op moet reageren aangegeven.
Kopieer de volgende tekst:
upstream apache {
server 127.0.0.1:80 fail_timeout=120s;
}
server {
listen 192.168.1.100:80;
server_name kb.mvandek.nl;
access_log off;
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 256k;
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 4k;
proxy_buffers 32 256k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 256k;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_pass http://apache;
}
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js) {
root /srv/www/kb.mvandek.nl;
expires 300d;
}
}Wat deze regels doen in het kort:
- upstream geeft aan naar welke server(s) het verkeerd gestuurd moet worden als er niet aan de aanvraag voldaan kan worden door Nginx zelf. Apache is in dit geval de naam die later gebruikt wordt om deze upstream aan te spreken. Hier kan elke naam gebruikt worden zolang deze maar overeenkomt met proxy_pass.
- server definieert voor Nginx waar het verkeer naartoe moet worden gestuurd
- server { ... } opent voor Nginx een nieuwe serverconfiguratie met alle bijbehorende functies en parameters
- location en de bijbehorende bestandsextensies geven aan dat bestanden die opgevraagd worden door Nginx zelf uit de map /srv/sites/kb.mvandek.nl geserveerd mogen worden.
Sla de wijziging op en test de configuratie:
nginx -t
En (her)start Nginx
service nginx (re)start
Bezoek nu kb.mvandek.nl en controleer met FireBug of DragonFly of de plaatjes via Nginx geserveerd worden.