Hoe configureer en optimaliseer je een NGINX + PHP-FPM-stack voor zware belasting op CentOS 7?
Een webstack opzetten kan eenvoudig zijn, maar ervoor zorgen dat hij echt *supersnel* presteert bij veel verkeer? Dat is een heel ander verhaal. Deze setup is ideaal als je veel gelijktijdige bezoekers wilt bedienen met minimale vertraging. Van het installeren van NGINX en PHP-FPM, het optimaliseren van configuraties voor de belasting, tot het ervoor zorgen dat je server niet vastloopt: deze handleiding behandelt de essentie. Verwacht een snellere, efficiëntere server die meer verzoeken aankan zonder problemen. Het leuke gedeelte begint wanneer je website sneller laadt dan ooit, zelfs tijdens piekuren. Maar om dat te bereiken, moet je die configuraties goed afstemmen. Want de standaardinstellingen zijn meestal niet gemaakt voor zwaar verkeer.
Hoe NGINX + PHP-FPM te optimaliseren voor zwaar verkeer
Methode 1: De NGINX Worker- en verbindingsinstellingen aanpassen
Voordat we de configuraties induiken, is het goed om te begrijpen waarom dit belangrijk is. Het aantal ` worker processes` en ` connections per worker` bepaalt direct hoeveel verzoeken uw server tegelijkertijd kan verwerken. Als deze waarden te laag zijn, blijven bezoekers wachten; als ze te hoog zijn, kan de server geheugenproblemen krijgen. Begin met het bewerken van ` /etc/nginx/nginx.conf`. Zoek de belangrijkste instructies bovenaan: `- nginx worker_processes auto; worker_connections 1024;`.Hier zorgt `auto` ervoor dat NGINX automatisch het aantal CPU-cores detecteert, wat meestal prima is. Maar als u weet dat uw server 4 cores heeft, kunt u expliciet `worker_processes 4;` instellen. Het verhogen van `worker_connections` van 1024 naar bijvoorbeeld 4096 kan uw server helpen meer gelijktijdige verzoeken te verwerken — dit is vooral handig als u veel verkeer verwacht. Schakel vervolgens in het `http`-blok de optimale verbindingsmethode en betere afhandeling van verzoeken in: `- nginx use epoll;` // betere prestaties voor Linux multi_accept on; // accepteer zoveel mogelijk tegelijk tcp_nodelay on; // vermindert vertragingen in netwerkpakketten tcp_nopush on; // optimaliseer het verzenden van TCP-pakketten Vergeet niet NGINX opnieuw op te starten na het opslaan: – ` # systemctl restart nginx` Bij sommige configuraties kan NGINX vastlopen op de standaard time-outs of de maximale bodygrootte. Om dit aan te passen: – nginx keepalive_timeout 30; // wacht 30 seconden voordat inactieve keepalives worden gesloten client_max_body_size 2m; // beperk de uploadgrootte indien nodig Het toevoegen van gzip-compressie kan de bandbreedte aanzienlijk verminderen: – nginx gzip on; gzip_types text/plain application/javascript application/json image/svg+xml; Controleer na de wijzigingen uw configuraties en herstart: – ` # nginx -t && systemctl restart nginx` Deze configuratie zorgt ervoor dat NGINX meer verbindingen kan accepteren, sneller gegevens kan verzenden en grotere bestanden kan verwerken zonder te vertragen.
Methode 2: PHP-FPM-poolinstellingen aanpassen voor zware belasting
PHP-FPM is de backend die PHP-code verwerkt. Standaard is deze geoptimaliseerd voor kleine websites, dus voor veel verkeer moet u de limieten verhogen, met name ` pm.max_children`, ` pm.start_servers` en gerelateerde parameters. Open `/ etc/php-fpm.d /www.conf` en pas de volgende instellingen aan: – ini pm = dynamic pm.max_children = 18 // maximaal aantal PHP-processen pm.start_servers = 6 // begin met dit aantal processen pm.min_spare_servers = 4 // houd deze inactief pm.max_spare_servers = 16 // houd er niet meer inactief pm.max_requests = 400 // herstart PHP na dit aantal verzoeken om geheugenlekken te voorkomen Een snelle tip: voor een server met 4 CPU-cores en 1 GB RAM zijn 18 child-processen een prima begin. U moet mogelijk experimenteren; houd het geheugengebruik in de gaten. Als PHP te veel RAM verbruikt, verlaag dit dan. Wijzig de socketinstellingen voor snellere IPC: – ini listen = /var/run/php-fpm/php-fpm.sock listen.owner = nginx listen.group = nginx listen.mode = 0660 Zorg ervoor dat PHP-FPM bij het opstarten start en herstart het: – ` # systemctl restart php-fpm` Deze configuratie zorgt ervoor dat PHP verzoeken kan verwerken zonder een knelpunt te creëren.
Methode 3: NGINX aanpassen voor het verwerken van statische bestanden en caching
Websites met veel verkeer serveren statische bestanden zoals JS, CSS, afbeeldingen, enz.vaak efficiënter door ze te cachen en de serverbelasting te minimaliseren. Voeg in uw ` /etc/nginx/nginx.conf`, binnen het `http`-blok, het volgende toe: – nginx gzip on; gzip_types application/javascript application/json image/svg+xml; expires max; // cache vervaldatum voor statische content Voor specifieke bestandstypen kunt u het volgende toevoegen: – nginx location ~* \.(js|css|png|jpg|gif|woff|woff2)$ { expires 7d; // 7 dagen cache access_log off; add_header Cache-Control “public”; } Stel time-outs voor verbindingen en aanvraaglimieten in: – nginx keepalive_timeout 30; client_body_timeout 10; send_timeout 2; client_max_body_size 2m; Vergeet niet om nginx opnieuw op te starten: – ` # systemctl restart nginx` Op deze manier laden statische bestanden sneller bij herhaalde bezoeken, waardoor de belasting van PHP-FPM en nginx zelf afneemt.
Laatste, belangrijke aanpassingen: Afstemming voor hoge belasting
– Zorg ervoor dat `worker_processes` overeenkomt met het aantal CPU-cores.- Verhoog `worker_connections` — probeer waarden zoals 4096.- Pas PHP-FPM `pm.max_children` aan op basis van je RAM-geheugen.- Gebruik `epoll` (of `kqueue` op BSD) voor schaalbare I/O.- Schakel gzip in om serverreacties te comprimeren.- Cache statische bestanden om schijf-I/O te verminderen. Dit zijn de belangrijkste punten. Monitor ook regelmatig het resourcegebruik van je server (met `htop`, `top` of `vmstat`) om te zien welke processen zwaar belast worden en pas deze indien nodig verder aan.
Samenvatting
- Stel `worker_processes` in op CPU-cores of `auto`.
- Verhoog het aantal `worker_connections` om meer clients tegelijk te kunnen verwerken.
- Schakel epoll en multi_accept in voor Linux.
- Configureer PHP-FPM met een hogere `pm.max_children` en pas de proceslimieten aan.
- Optimaliseer het serveren van statische bestanden met caching en gzip.
- Monitor de serverbronnen en pas de configuraties dienovereenkomstig aan.
Samenvatting
Het optimaliseren van een server voor hoge belasting is een kunst op zich: je past hier wat aan, test daar wat en kijkt wat het beste werkt. Dit zijn goede uitgangspunten; afhankelijk van het daadwerkelijke verkeer en de specificaties van de server zul je aanpassingen moeten maken. Onthoud: plan voor voldoende capaciteit, test grondig en houd de prestatiestatistieken in de gaten. Het verschil tussen een trage en een snelle website tijdens piekuren is vaak terug te voeren op deze configuraties. Ik hoop dat dit helpt; het werkte voor mij – hopelijk werkt het ook voor jou.