Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator Nginx PHP-FPM

Blok server dla Laravel, WordPress lub zwykłego PHP: gniazdo FPM, HTTPS, limity i polecenia wdrożenia.

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}

Typowe wartości, wstaw jednym kliknięciem:

Zmieniono dane. Kliknij „Generuj blok”, aby odświeżyć wynik.

Domena

example.com

HTTPS

wyłączony
Uwaga

Nagłówki bezpieczeństwa

wyłączone
Uwaga

Bloków location

6

Linii

33

Rozmiar

919 B

Blok server dla nginx

server { listen 80; server_name example.com; root /var/www/app/public; index index.php index.html; client_max_body_size 64m; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_read_timeout 60s; } location ~* \.(css|js|jpg|jpeg|png|gif|svg|webp|ico|woff2?)$ { expires 365d; add_header Cache-Control "public, immutable"; access_log off; } location ~ /\.(?!well-known) { deny all; } }
919 znaków · 81 słów · 34 linii
  • Uwaga: Konfiguracja bez HTTPS. Na stronie dostępnej publicznie włącz HTTPS.

Jak wdrożyć (Debian / Ubuntu)

# Debian / Ubuntu (inne systemy: zapisz plik w katalogu konfiguracji nginx) sudo nano /etc/nginx/sites-available/example.com.conf sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf sudo nginx -t sudo systemctl reload nginx

Ściąga: co robią dyrektywy w tej konfiguracji

Dyrektywy bloku server
DyrektywaDo czego służy
server_name Nazwy domen obsługiwane przez ten blok; kilka nazw oddzielasz spacją.
root Katalog z plikami strony. Laravel: katalog public, WordPress: katalog z wp-config.php.
try_files $uri $uri/ /index.php?$query_string Najpierw plik, potem katalog, na końcu przekazanie żądania do index.php (ładne adresy URL). W trybie „Zwykły PHP” zamiast tego jest =404.
try_files $uri =404 (w bloku PHP) Zwraca 404 dla nieistniejących plików .php zamiast przekazywać je do PHP-FPM.
fastcgi_pass Adres PHP-FPM: unix:/ścieżka.sock albo adres:port. Musi się zgadzać z parametrem listen w puli PHP-FPM.
fastcgi_param SCRIPT_FILENAME Pełna ścieżka skryptu przekazywana do PHP. Zły root kończy się komunikatem „File not found.”
client_max_body_size Maksymalny rozmiar żądania, np. wysyłanego pliku. Po przekroczeniu nginx zwraca błąd 413.
fastcgi_read_timeout Jak długo nginx czeka na odpowiedź PHP. Po przekroczeniu zwraca błąd 504.
location ~ /\.(?!well-known) Blokuje pliki i katalogi zaczynające się od kropki (.env, .git). Wyjątek .well-known jest potrzebny m.in. do weryfikacji domeny przy Let’s Encrypt.

Typowe błędy nginx z PHP-FPM

Objawy i miejsca do sprawdzenia
ObjawZwykła przyczynaCo sprawdzić
502 Bad Gateway nginx nie łączy się z PHP-FPM Czy usługa PHP-FPM działa i czy fastcgi_pass zgadza się z parametrem listen w puli (Debian/Ubuntu: /etc/php/<wersja>/fpm/pool.d/www.conf).
502 i „permission denied” w error.log brak uprawnień do gniazda Parametry listen.owner i listen.group w puli powinny wskazywać użytkownika, na którym działa nginx (często www-data).
„File not found.” zły root lub nazwa skryptu Czy root wskazuje katalog z index.php i czy użytkownik PHP-FPM ma do niego dostęp.
404 z nginx na podstronach brak przekazania do index.php Czy blok location / ma try_files z /index.php na końcu (nie dotyczy trybu „Zwykły PHP”).
Przeglądarka pobiera plik .php blok PHP nie jest używany Czy konfiguracja jest włączona i przeładowana oraz czy nginx -t nie zgłasza błędów.
413 Request Entity Too Large za mały client_max_body_size Zwiększ też upload_max_filesize i post_max_size w php.ini, bo PHP ma własne limity.
504 Gateway Time-out skrypt działa dłużej niż fastcgi_read_timeout Zwiększ timeout oraz max_execution_time w PHP albo przenieś zadanie do kolejki.

Gniazdo unix czy TCP

Gniazdo unix (unix:/ścieżka.sock) działa tylko na tym samym serwerze i nie otwiera portu sieciowego. Adres TCP (127.0.0.1:9000) wybierz, gdy PHP-FPM działa w innym kontenerze lub na innej maszynie. Wartość musi być identyczna z parametrem listen w puli PHP-FPM.

Nagłówki add_header i dziedziczenie

Jeśli blok location ma własną dyrektywę add_header, nginx nie dziedziczy nagłówków z poziomu server. Dlatego przy włączonej pamięci podręcznej plików statycznych nagłówki bezpieczeństwa są powtórzone w tym bloku.

Certyfikat przed przeładowaniem

Konfiguracja z HTTPS odwołuje się do plików certyfikatu. Jeśli ich nie ma, nginx -t zgłosi błąd i konfiguracji nie da się przeładować. Wystaw certyfikat przed włączeniem bloku z HTTPS.

Parametr http2 w listen

W nowszych wersjach nginx (od 1.25.1) parametr http2 w dyrektywie listen jest oznaczony jako przestarzały i zastępuje go osobna dyrektywa http2 on. Starsze wersje jej nie znają, dlatego generator używa składni działającej wszędzie.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Generator Nginx dla PHP-FPM

Nginx z PHP-FPM to najczęstsza konfiguracja aplikacji PHP na VPS-ie. Nginx serwuje pliki statyczne, a żądania do skryptów .php przekazuje przez FastCGI do procesu PHP-FPM. Generator buduje gotowy blok server dla trzech typów aplikacji: Laravel, WordPress i zwykły PHP, razem z nazwą pliku .conf i poleceniami wdrożenia dla Debiana i Ubuntu.

Najważniejsze dyrektywy

ElementRolaWartość w generatorze
try_fileskierowanie żądań do front controllera/index.php?$query_string (Laravel, WordPress) lub =404 (zwykły PHP)
fastcgi_passprzekazanie PHP do gniazda FPMdomyślnie unix:/run/php/php8.3-fpm.sock
client_max_body_sizelimit rozmiaru żądania, np. uploadudomyślnie 64m, 0 wyłącza limit
fastcgi_read_timeoutczas oczekiwania na odpowiedź PHPod 1 do 3600 s, domyślnie 60
Cache statykówdługie nagłówki dla CSS, JS, obrazów i fontówexpires 365d i Cache-Control „public, immutable”

Laravel, WordPress i zwykły PHP

Laravel używa katalogu public jako root, a wszystkie adresy bez istniejącego pliku trafiają do public/index.php. WordPress działa na katalogu z wp-config.php i również potrzebuje przekazania do index.php, inaczej ładne permalinki zwracają 404. Tryb „Zwykły PHP” (root /var/www/html) nie ma front controllera: nieistniejący adres kończy się błędem 404 zamiast przekierowania do index.php.

Bezpieczeństwo

  • Generator domyślnie blokuje pliki ukryte (.git, .env), z wyjątkiem .well-known potrzebnego do weryfikacji domeny.
  • Opcjonalnie dodaje nagłówki X-Content-Type-Options, X-Frame-Options i Referrer-Policy, a przy HTTPS także HSTS na rok.
  • Dostęp do xmlrpc.php w WordPressie i zakaz wykonywania PHP w katalogu uploadów musisz dopisać ręcznie (przykłady niżej).

Jak działa generator Nginx PHP-FPM

Generator buduje statyczny fragment konfiguracji Nginx na podstawie wybranych opcji: typu aplikacji, domen (do 10, oddzielonych spacją), katalogu głównego, adresu gniazda FPM, limitu uploadu i timeoutu. Nie łączy się z serwerem i nie uruchamia usług. Wynikiem jest blok server do skopiowania lub pobrania jako plik nazwany od pierwszej domeny, np. example.com.conf, który wklejasz do sites-available i włączasz przez symlink.

Mechanizm opiera się na podziale ról. Nginx najpierw sprawdza dopasowania dokładne (location = /favicon.ico), potem bloki z wyrażeniami regularnymi w kolejności zapisu, a gdy żaden nie pasuje, używa location /. Dla pliku statycznego zwraca go bezpośrednio z dysku z nagłówkami cache. Dla adresu, który nie wskazuje istniejącego pliku, reguła try_files kieruje żądanie do index.php. Dopiero wtedy działa blok PHP z fastcgi_pass, który przekazuje je do PHP-FPM przez gniazdo Unix lub TCP. Linia try_files $uri =404 wewnątrz bloku PHP zwraca 404 dla nieistniejących skryptów, zamiast przekazywać je do FPM.

Najczęstsze źródło problemów to niespójność dwóch wartości: root oraz SCRIPT_FILENAME. Generator składa SCRIPT_FILENAME z $document_root$fastcgi_script_name, więc wystarczy poprawny root. W Laravel root wskazuje katalog public; jeśli podasz inny, narzędzie pokaże ostrzeżenie. W WordPress root to katalog z wp-config.php, a front controller to index.php w tym samym miejscu.

Przykład konfiguracji krok po kroku

  1. Wybierz tryb i root. Kliknięcie presetu ustawia root: Laravel /var/www/app/public, WordPress /var/www/wordpress, zwykły PHP /var/www/html. Domena w przykładzie to example.com z zaznaczoną opcją „Dodaj też www”, więc server_name to example.com www.example.com.
  2. Ustal gniazdo PHP-FPM. Dla PHP 8.3 na Debianie i Ubuntu typowy adres to unix:/run/php/php8.3-fpm.sock, na RHEL i Fedorze unix:/run/php-fpm/www.sock. Sprawdź parametr listen w pliku puli, np. /etc/php/8.3/fpm/pool.d/www.conf. Jeśli PHP-FPM działa w osobnym kontenerze, wpisz adres TCP, np. 127.0.0.1:9000.
  3. Reguła try_files. Dla Laravel i WordPress generator wstawia try_files $uri $uri/ /index.php?$query_string;. W Nginx zmienne $query_string i $args mają tę samą wartość, więc często spotykany w poradnikach WordPressa wariant z $args działa identycznie.
  4. Włącz HTTPS. Opcja HTTPS dodaje osobny blok na porcie 80 z przekierowaniem 301 oraz blok na 443 ze ścieżkami /etc/letsencrypt/live/example.com/fullchain.pem i privkey.pem. W poleceniach wdrożenia pojawi się sudo certbot certonly --nginx -d example.com -d www.example.com.
  5. Ustaw limity. Zwiększ client_max_body_size, jeśli aplikacja przyjmuje duże uploady (format 512k, 64m, 1g). Timeout FastCGI powyżej 300 s narzędzie oznacza ostrzeżeniem, bo długie żądania blokują procesy PHP-FPM.
  6. Sprawdź i przeładuj. Zapisz plik, wykonaj sudo nginx -t i dopiero potem sudo systemctl reload nginx. Oczekiwany wynik to strona z kodem 200. Jeśli gniazdo FPM jest błędne, pojawi się 502 Bad Gateway, a szczegóły znajdziesz w /var/log/nginx/error.log.

Tabela referencyjna: Laravel, WordPress i zabezpieczenia

ObszarLaravelWordPress
Katalog głównypublic w katalogu projektukatalog z index.php i wp-config.php
Front controllerpublic/index.phpindex.php w root
try_files$uri $uri/ /index.php?$query_stringto samo (wariant z $args jest równoważny)
Pliki ukryteblokuj .env i .gitblokuj .htaccess, .git i inne pliki kropkowe
PHP-FPMfastcgi_pass do gniazda Unix lub TCPtak samo, z tym samym SCRIPT_FILENAME
Uploadypliki użytkowników trzymaj w storage, poza publicdopisz zakaz wykonywania PHP w wp-content/uploads
xmlrpc.phpnie występujelocation = /xmlrpc.php { deny all; }, jeśli nieużywany
Cache statykówpliki z Vite mają hash w nazwie, 365 dni jest bezpiecznemotywy dodają ?ver= do adresu; obrazy podmieniane pod tą samą nazwą mogą się nie odświeżyć

Praktyczne wskazówki przed wdrożeniem

  • Najpierw zweryfikuj gniazdo FPM. Nazwa pliku zależy od wersji PHP i konfiguracji puli. Zamiast zgadywać, otwórz plik pool.d/www.conf i skopiuj wartość listen. Dzięki temu unikniesz 502 Bad Gateway po reloadzie.
  • Certyfikat przed blokiem HTTPS. Nginx -t zgłosi błąd, jeśli plików fullchain.pem i privkey.pem jeszcze nie ma. Wdróż najpierw wersję bez HTTPS, wystaw certyfikat przez certbot, a potem podmień konfigurację.
  • Nie wystawiaj portu FPM na świat. PHP-FPM nie ma uwierzytelniania. Przy adresie TCP innym niż 127.0.0.1 lub localhost generator pokazuje ostrzeżenie; taki port zamknij w firewallu.
  • Zablokuj wykonywanie PHP w katalogach zapisywalnych. W WordPressie dodaj przed blokiem PHP regułę location ~* /wp-content/uploads/.*\.php$ { deny all; }. Bloki regex działają w kolejności zapisu, więc ta reguła musi stać wyżej niż location ~ \.php$. Sam zakaz nie chroni przed wszystkim, ale utrudnia uruchomienie webshella.

Czego generator nie uwzględnia

  • Stanu środowiska. Narzędzie nie sprawdza, czy PHP-FPM działa, czy gniazdo istnieje i czy Nginx ma do niego uprawnienia. Te informacje musisz potwierdzić na serwerze.
  • Konfiguracji PHP. Limity uploadu, memory_limit, czas wykonania i opcache ustawia się w php.ini lub w puli FPM. Sam client_max_body_size w Nginx nie wystarczy do obsługi dużych plików.
  • Certyfikatów spoza Let’s Encrypt i wielu witryn. Ścieżki certyfikatu zakładają certbota. Inny dostawca wymaga ręcznej zmiany ssl_certificate, a każda kolejna aplikacja z innym root potrzebuje osobnego bloku server.
  • Zaawansowanego proxy i kontenerów. Jeśli przed Nginx stoi Traefik, load balancer albo CDN, potrzebne są nagłówki X-Forwarded-For, X-Forwarded-Proto i zaufane adresy proxy. Generator nie modeluje całego łańcucha.

Najczęstsze pytania

Jaki socket PHP-FPM wpisać w Nginx?

Na Debianie i Ubuntu zwykle unix:/run/php/phpX.Y-fpm.sock, gdzie X.Y to wersja PHP, na RHEL i Fedorze unix:/run/php-fpm/www.sock. Dokładną wartość znajdziesz w parametrze listen puli, np. /etc/php/8.3/fpm/pool.d/www.conf. W kontenerach częściej używa się TCP, np. 127.0.0.1:9000.

Dlaczego Nginx zwraca 502 Bad Gateway?

Nieprawidłowa ścieżka gniazda FPM, zatrzymana usługa PHP-FPM lub brak uprawnień do gniazda. Przy „permission denied” w error.log sprawdź listen.owner i listen.group w puli: powinny wskazywać użytkownika Nginx, zwykle www-data.

Czy client_max_body_size wystarczy do dużych uploadów?

Nie. Domyślnie Nginx przyjmuje 1 MB, a PHP ma własne limity upload_max_filesize i post_max_size. Ustaw wszystkie trzy spójnie, np. 64m w Nginx i php.ini, inaczej żądanie odrzuci ta warstwa, która ma niższy limit.

Czy generator Nginx PHP-FPM obsługuje Laravel i WordPress?

Tak, ma presety Laravel (root w public), WordPress (root w katalogu z wp-config.php) i zwykły PHP bez front controllera. Konfiguracja nie zależy od wersji frameworka ani CMS.

Dlaczego WordPress zwraca 404 po zmianie permalinków?

Nginx nie czyta pliku .htaccess, więc permalinki działają tylko z regułą try_files kończącą się na /index.php. Sprawdź też, czy root wskazuje katalog z wp-config.php, i przeładuj Nginx.

Jak zablokować dostęp do .env i wp-config.php w Nginx?

Generator domyślnie dodaje regułę deny all dla wszystkich ścieżek zaczynających się od kropki (.env, .git) z wyjątkiem .well-known. Dla wp-config.php możesz dopisać location = /wp-config.php { deny all; }. Po zmianach uruchom nginx -t.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!