Webbserver
nginx-konfigurator
Välj typ av sajt, TLS och cache — få ett komplett server-block för /etc/nginx/sites-available som du kan testa med nginx -t.
/etc/nginx/sites-available/ngssc.se
# ngssc.se — klistra in i /etc/nginx/sites-available/ngssc.se
# och länka: ln -s /etc/nginx/sites-available/ngssc.se /etc/nginx/sites-enabled/
limit_req_zone $binary_remote_addr zone=rl_ngssc_se_65184945:10m rate=10r/s;
# HTTP: allt vidare till HTTPS
server {
listen 80;
listen [::]:80;
server_name ngssc.se www.ngssc.se;
return 301 https://ngssc.se$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ngssc.se;
ssl_certificate /etc/letsencrypt/live/ngssc.se/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ngssc.se/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
root /var/www/ngssc.se;
index index.html;
client_max_body_size 8m;
charset utf-8;
gzip on;
gzip_min_length 1024;
gzip_vary on;
gzip_comp_level 5;
gzip_types text/plain text/css text/javascript application/javascript application/json application/xml image/svg+xml;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Innehållshashat statiskt: cacha ett år, immutable är säkert
location ~* \.(?:css|js|woff2?|ttf|otf|avif|webp|png|jpe?g|gif|svg|ico)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
access_log off;
}
location / {
limit_req zone=rl_ngssc_se_65184945 burst=20 nodelay;
limit_req_status 429;
try_files $uri $uri/ =404;
}
}
# www → primärhost (undvik dubbla kanoniska adresser)
# Certifikatet måste täcka båda namnen: certbot --nginx -d ngssc.se -d www.ngssc.se
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.ngssc.se;
ssl_certificate /etc/letsencrypt/live/ngssc.se/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ngssc.se/privkey.pem;
return 301 https://ngssc.se$request_uri;
}
Testa med nginx -t innan du laddar om. Certifikatet skapas eller förnyas med certbot --nginx -d ngssc.se -d www.ngssc.se — båda namnen måste stå med, annars varnar webbläsaren på www-adressen.
| Steg | Kommando |
|---|---|
| 1. Skriv filen | sudo nano /etc/nginx/sites-available/ngssc.se |
| 2. Aktivera | sudo ln -s /etc/nginx/sites-available/ngssc.se /etc/nginx/sites-enabled/ |
| 3. Testa | sudo nginx -t |
| 4. Ladda om | sudo systemctl reload nginx |
| 5. HTTPS | sudo certbot --nginx -d ngssc.se -d www.ngssc.se |
Vanliga frågor
- Var lägger jag filen?
- I /etc/nginx/sites-available/<domän>, länka den i /etc/nginx/sites-enabled/, kör nginx -t och ladda om med systemctl reload nginx.
- Varför svarar omvänd proxy 502 (Bad Gateway)?
- nginx når inte upstream. Kontrollera att adressen i proxy_pass stämmer, att tjänsten lyssnar på den porten (ss -ltnp) och att den svarar lokalt med curl.
- Vad gör try_files i en single page app?
- Okända sökvägar skickas till index.html så att klientens router tar dem. En statisk sajt bör i stället svara =404, annars indexeras trasiga länkar som sidor.
- Var ska limit_req_zone ligga?
- Zonen deklareras en gång i http-kontexten, till exempel i /etc/nginx/conf.d/. Själva limit_req används inne i location. Den här konfigurationen lägger zonen överst i filen, vilket nginx läser i http-kontext via sites-enabled.
