Illustration för Linux
← Tillbaka till artiklar
Linux2026-03-13·12 min läsning

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 trafik

Prestanda 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.