Nginx vs Apache – Prestanda och Konfiguration Jämförda
En teknisk jämförelse av Nginx och Apache. Arkitektur, prestanda vid hög trafik, konfigurationsexempel och rekommendationer.
Två filosofier, samma uppgift
Nginx och Apache är världens två mest använda webbservrar, men de löser uppgiften på fundamentalt olika sätt. Apache skapades 1995 med en process-per-connection-modell. Nginx byggdes 2004 specifikt för att hantera tusentals samtidiga connections med minimal resursanvändning.
Idag kör Nginx på över 35% av alla webbplatser globalt, medan Apache har cirka 30%. Men marknadsandelar berättar inte hela historien.
Arkitektur
Apache: Process/Thread-baserad
Apache skapar en ny process eller tråd för varje inkommande connection. Med mpm_prefork (standard för PHP) skapas en komplett process per request. Med mpm_worker eller mpm_event används trådar för bättre prestanda.
Nginx: Event-driven
Nginx använder en asynkron, event-driven arkitektur. En enda worker-process hanterar tusentals connections via en event loop. Ingen ny process skapas per request — istället multiplexas alla connections effektivt.
# Nginx arkitektur: 1 master + N workers
# Varje worker hanterar tusentals connections
ps aux | grep nginx
# root 1234 nginx: master process
# www-data 1235 nginx: worker process (handles 10000+ connections)
# www-data 1236 nginx: worker process (handles 10000+ connections)
# Apache mpm_prefork: 1 process per connection
ps aux | grep apache
# root 2345 apache2 -k start
# www-data 2346 apache2 -k start (1 connection)
# www-data 2347 apache2 -k start (1 connection)
# www-data 2348 apache2 -k start (1 connection)
# ... 150+ processer vid hög trafikPrestanda vid hög trafik
Vid låg trafik (under 100 simultana connections) är skillnaden försumbar. Vid hög trafik syns Nginx fördelar tydligt:
- Minnesanvändning: Nginx använder ~2 MB per 10 000 inaktiva connections. Apache kan använda 100+ MB för samma antal med mpm_prefork
- Statiskt innehåll: Nginx är 2-3x snabbare på att servera statiska filer
- Concurrent connections: Nginx hanterar 10 000+ connections per worker. Apache med prefork slår i taket vid ~256 simultana connections (per default)
Konfigurationsjämförelse
# Nginx: Virtual host (/etc/nginx/sites-available/example.se)
server {
listen 80;
server_name example.se www.example.se;
root /var/www/example.se/public;
index index.html index.php;
# Statiska filer — Nginx egen styrka
location /static/ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# PHP via FastCGI
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Reverse proxy till Node.js-app
location /api/ {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}# Apache: Virtual host (/etc/apache2/sites-available/example.se.conf)
<VirtualHost *:80>
ServerName example.se
ServerAlias www.example.se
DocumentRoot /var/www/example.se/public
<Directory /var/www/example.se/public>
AllowOverride All
Require all granted
</Directory>
# PHP via mod_php eller php-fpm
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>
# Reverse proxy till Node.js-app
ProxyPreserveHost On
ProxyPass /api/ http://localhost:3000/
ProxyPassReverse /api/ http://localhost:3000/
# Caching av statiska filer
<LocationMatch "\.(jpg|jpeg|png|gif|css|js|woff2)$">
ExpiresActive On
ExpiresDefault "access plus 30 days"
Header set Cache-Control "public, immutable"
</LocationMatch>
</VirtualHost>.htaccess — Apaches fördel (och nackdel)
Apache stödjer .htaccess-filer som tillåter konfiguration per katalog utan att starta om servern. Det är extremt bekvämt för delade hosting-miljöer där användare inte har tillgång till serverkonfigurationen.
Men .htaccess har en prestanda-kostnad: Apache läser filen vid varje request och söker i varje katalog upp till document root. I produktionsmiljöer där du har full kontroll bör du flytta alla regler till den centrala konfigurationen.
Nginx har ingen .htaccess-motsvarighet. All konfiguration sker i centrala filer, vilket är snabbare men kräver serveråtkomst.
Min rekommendation
Välj Nginx om: Du bygger en ny server, behöver reverse proxy-funktionalitet, servar mycket statiskt innehåll eller förväntar dig hög trafik.
Välj Apache om: Du kör WordPress med plugins som förlitar sig på .htaccess, har en befintlig Apache-setup som fungerar, eller behöver .htaccess för delade hosting-miljöer.
Bästa av båda: Nginx som reverse proxy framför Apache. Nginx hanterar SSL, statiska filer och load balancing. Apache hanterar dynamiskt PHP-innehåll bakom.
Sammanfattning
Nginx är det moderna standardvalet för nya installationer. Dess event-driven arkitektur ger överlägsen prestanda vid hög trafik med minimalt resursutnyttjande. Apache har fortfarande sin plats — särskilt i PHP-tunga miljöer och delade hosting-setups. Oavsett val: konfigurera din webbserver medvetet, aktivera caching och komprimering, och monitorera prestandan.