Nginx-konfigurationsgenerator

Generera Nginx-konfiguration

Att skriva Nginx-konfiguration från grunden innebär att du måste minnas varje rad proxy_set_header, varje MIME-typ som gzip ska komprimera och skillnaden mellan try_files $uri/ /index.php?$args och den variant som i tysthet förstör routningen. Generatorn frågar efter domän, upstream, PHP-hanterare och sökvägar till SSL-filerna, och skriver sedan ut ett server block med rimliga standardvärden för TLS, HTTP/2, cachning av statiska filer och komprimering.

Så skapar du ditt server block

  1. 1

    Välj en förinställning

    Statisk webbplats, PHP-FPM (Laravel, WordPress), omvänd proxy för Node.js eller en ren 301-omdirigering.

  2. 2

    Ange domänen

    Ta med hela listan med server_name, vanligtvis både varianten med www och den utan.

  3. 3

    Fyll i SSL-uppgifterna

    Peka ut dina fullchain- och privkey-filer, eller hoppa över steget om du bara kör HTTP.

  4. 4

    Justera upstream

    Port, sökväg till socket eller backend-URL för fall med proxy_pass.

  5. 5

    Kopiera och driftsätt

    Lägg resultatet i /etc/nginx/sites-available, kör nginx -t och ladda om Nginx.

Så ser ett bra server block ut

En modern virtuell värd i Nginx består oftast av de här delarna:

Del Uppgift
listen 443 ssl http2 Tar emot HTTPS med HTTP/2 påslaget
ssl_certificate + ssl_certificate_key Pekar ut TLS-certifikatet och den privata nyckeln
ssl_protocols TLSv1.2 TLSv1.3 Rensar bort gamla TLS-versioner
gzip on + typlista Komprimerar text/HTML/JSON/JS/CSS i farten
expires-headers för statiska filer Minskar antalet upprepade anrop från återkommande besökare
try_files Skickar vidare till en frontkontroller (PHP, Laravel med flera)
HSTS + säkerhetsheaders Tvingar webbläsaren att hålla sig till TLS

Grunderna i omvänd proxy

För appar i Node.js, Python och Ruby som körs bakom Nginx:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Att glömma X-Forwarded-For är det klassiska sättet att tappa besökarnas verkliga IP-adresser i applikationsloggarna.

Vanliga misstag

  • Ingen reserv för server_name. Om inget namn matchar använder Nginx det första server-blocket som standard. Lägg till ett server_name _-block som fångar allt och svarar med 444, så undviker du attacker via Host-headern.
  • Fel ordning på certifikaten. Filen ssl_certificate måste innehålla hela kedjan (fullchain: servercertifikatet plus mellanliggande certifikat), inte bara servercertifikatet.
  • Alltför ivrig cachning. Att skicka expires 1y för /index.html gör att kommande driftsättningar aldrig slår igenom. Versionshantera URL:erna till de statiska filerna i stället.
  • Omladdning utan test. Kör alltid nginx -t före systemctl reload nginx: ett enda syntaxfel tar ner hela webbplatsen.

Vanliga frågor

HTTP/2 är stabilt och stöds brett i Nginx 1.25 och senare. HTTP/3 (QUIC) finns i samma versioner men är fortfarande experimentellt. För en produktionskonfiguration i dag: slå på HTTP/2 och lägg vid behov till HTTP/3 med direktiven http3 och quic.

Konventionen är /etc/ssl/certs/ för publika kedjor och /etc/ssl/private/ för privata nycklar. Let’s Encrypt lägger allt under /etc/letsencrypt/live/domain/. Följ den sökväg som ditt förnyelseverktyg förväntar sig.

Ja, för de flesta webbplatser. Lägg till ett separat server block på port 80 som svarar med 301 https://$host$request_uri. Tillsammans med HSTS används HTTP-blocket knappt alls efter den första förfrågan.

Kör sudo nginx -t för att tolka konfigurationen utan att ladda om den. Om det står “syntax is ok” och “test is successful” laddar du om med sudo systemctl reload nginx. Använd aldrig restart i produktion: en omladdning byter konfiguration utan avbrott i trafiken.

Relaterade verktyg

Verktyget finns på andra språk