Generator konfiguracji Nginx

Generuj konfigurację Nginx

Pisanie konfiguracji Nginx od zera oznacza pamiętanie o każdej linii proxy_set_header, o każdym typie MIME kompresowanym przez gzip oraz o różnicy między try_files $uri/ /index.php?$args a wersją, która po cichu psuje routing. Ten generator pyta o domenę, upstream, obsługę PHP i ścieżki plików SSL, a następnie zwraca server block z rozsądnymi ustawieniami domyślnymi dla TLS, HTTP/2, buforowania plików statycznych i kompresji.

Jak wygenerować swój server block

  1. 1

    Wybierz gotowy schemat

    Strona statyczna, PHP-FPM (Laravel, WordPress), reverse proxy dla Node.js albo zwykłe przekierowanie 301.

  2. 2

    Podaj domenę

    Wpisz pełną listę server_name, zwykle wariant z www i bez www.

  3. 3

    Ustaw dane SSL

    Wskaż pliki fullchain i privkey albo pomiń ten krok, jeśli używasz wyłącznie HTTP.

  4. 4

    Dostosuj upstream

    Port, ścieżka gniazda lub adres URL backendu w przypadku proxy_pass.

  5. 5

    Skopiuj i wdróż

    Umieść wynik w /etc/nginx/sites-available, uruchom nginx -t, a następnie przeładuj Nginx.

Jak wygląda dobry server block

Nowoczesny host wirtualny Nginx składa się zwykle z takich elementów:

Element Zadanie
listen 443 ssl http2 Przyjmuje połączenia HTTPS z włączonym HTTP/2
ssl_certificate + ssl_certificate_key Wskazuje pliki certyfikatu i klucza TLS
ssl_protocols TLSv1.2 TLSv1.3 Odrzuca stare wersje TLS
gzip on + lista typów Kompresuje tekst/HTML/JSON/JS/CSS w locie
Nagłówki expires dla plików statycznych Ogranicza powtarzające się żądania powracających użytkowników
try_files Przekazuje żądanie do kontrolera wejściowego (PHP, Laravel itd.)
HSTS + nagłówki bezpieczeństwa Wymusza na przeglądarce korzystanie z TLS

Podstawy reverse proxy

Dla aplikacji w Node.js, Pythonie i Ruby działających za 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";
}

Pominięcie X-Forwarded-For to klasyczny sposób na utratę prawdziwych adresów IP klientów w logach aplikacji.

Najczęstsze błędy

  • Brak zapasowego bloku server_name. Jeśli żadna nazwa nie pasuje, Nginx użyje pierwszego bloku server jako domyślnego. Dodaj blok server_name _ przechwytujący wszystko i zwracający 444, aby zabezpieczyć się przed atakami na nagłówek Host.
  • Zła kolejność certyfikatów. Plik ssl_certificate musi zawierać pełny łańcuch (fullchain: certyfikat serwera i certyfikaty pośrednie), a nie sam certyfikat serwera.
  • Zbyt agresywne buforowanie. Nagłówek expires 1y dla /index.html zepsuje kolejne wdrożenia. Zamiast tego wersjonuj adresy URL plików statycznych.
  • Przeładowanie bez testu. Zawsze uruchom nginx -t przed systemctl reload nginx: jeden błąd składni potrafi wyłączyć całą witrynę.

Najczęściej zadawane pytania

HTTP/2 jest stabilny i powszechnie obsługiwany w Nginx 1.25+. HTTP/3 (QUIC) jest dostępny w Nginx 1.25+, ale wciąż jako funkcja eksperymentalna. W konfiguracji produkcyjnej włącz dziś HTTP/2, a HTTP/3 dodaj opcjonalnie dyrektywami http3 i quic.

Przyjęło się trzymać publiczne łańcuchy w /etc/ssl/certs/, a klucze prywatne w /etc/ssl/private/. Let’s Encrypt umieszcza wszystko w /etc/letsencrypt/live/domain/. Trzymaj się ścieżki, której oczekuje Twoje narzędzie do odnawiania certyfikatów.

W większości witryn tak. Dodaj osobny server block na porcie 80, który zwraca 301 https://$host$request_uri. W połączeniu z HSTS blok HTTP po pierwszym żądaniu praktycznie przestaje być używany.

Uruchom sudo nginx -t, aby przeanalizować konfigurację bez przeładowania. Jeśli wypisze “syntax is ok” oraz “test is successful”, przeładuj serwer poleceniem sudo systemctl reload nginx. Nigdy nie używaj restart na produkcji: przeładowanie wprowadza zmiany bez przerywania obsługi ruchu.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach