Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator konfiguracji hostingu

Server block Nginx z HTTPS, pula PHP-FPM i deploy.sh z certbotem dla Laravela, WordPressa lub strony statycznej

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";
}

Bez http:// i www. Wersję z www dodasz zaznaczeniem poniżej.

Dla Laravela katalog public projektu.

Maks. liczba procesów PHP.

Na jeden proces, np. 256M lub 1G.

Dobierz pm.max_children do RAM serwera

w GB

w GB

w MB (RSS)

Gotowa konfiguracja dla example.com (Laravel / PHP): 3 pliki do skopiowania na serwer.

Pliki

3

Wersja PHP

8.3

Domeny w certyfikacie

2

Pamięć PHP przy pełnym obciążeniu

5 120 MB

Górna granica: 20 × 256M ≈ 5,0 GB

/etc/nginx/sites-available/example.com

# /etc/nginx/sites-available/example.com server { listen 80; listen [::]:80; server_name example.com www.example.com; return 301 https://example.com$request_uri; } # www.example.com → example.com server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name www.example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name example.com; root /var/www/example/public; index index.php index.html; client_max_body_size 64M; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml; gzip_min_length 256; location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ { expires 30d; add_header Cache-Control "public, immutable"; } location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; } location ~ /\.(?!well-known).* { deny all; } }
1 820 znaków · 135 słów · 59 linii

/etc/php/8.3/fpm/pool.d/example.com.conf

# /etc/php/8.3/fpm/pool.d/example.com.conf [example.com] user = www-data group = www-data listen = /run/php/php8.3-fpm.sock listen.owner = www-data listen.group = www-data pm = dynamic pm.max_children = 20 pm.start_servers = 4 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pm.max_requests = 500 php_admin_value[memory_limit] = 256M php_admin_value[upload_max_filesize] = 64M php_admin_value[post_max_size] = 64M php_admin_flag[log_errors] = on php_admin_value[error_log] = /var/log/php/example.com-error.log
511 znaków · 51 słów · 18 linii

deploy.sh

# Wdrożenie hostingu: example.com set -e # 1. Katalogi aplikacji i logów PHP sudo mkdir -p /var/www/example/public sudo mkdir -p /var/log/php && sudo chown www-data:www-data /var/log/php # 2. Pula PHP-FPM sudo systemctl restart php8.3-fpm # 3. Certyfikat SSL (Let's Encrypt) przed włączeniem strony: konfiguracja wskazuje pliki certyfikatu sudo certbot certonly --nginx -d example.com -d www.example.com --email [email protected] --agree-tos --no-eff-email # 4. Włączenie strony w Nginx sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx # 5. Automatyczne odnawianie i test odnowienia sudo systemctl enable --now certbot.timer sudo certbot renew --dry-run
730 znaków · 94 słów · 20 linii

Zapisz pliki pod ścieżkami z nagłówków, a potem wykonaj polecenia z deploy.sh po kolei. Przed uzyskaniem certyfikatu rekordy DNS (A/AAAA) domeny muszą już wskazywać na serwer. Ścieżki snippets/fastcgi-php.conf i /run/php/ pochodzą z Debiana i Ubuntu.

Ściąga: pm.max_children a pamięć serwera

Liczone dla rezerwy 1 GB na system i bazę oraz średniego procesu PHP-FPM 64 MB (zmienisz je w pomocniku „Dobierz pm.max_children”).

Sugerowane pm.max_children dla typowych serwerów
RAM serweraPamięć dla PHP-FPMpm.max_children
1 GB — za mało pamięci
2 GB 1 GB 16
4 GB 3 GB 48
8 GB 7 GB 112
16 GB 15 GB 240
32 GB 31 GB 496
64 GB 63 GB 1 008

Jak liczymy pm.max_children

pm.max_children = (RAM − rezerwa) × 1024 ÷ średnia pamięć procesu w MB. Przykład: (4 GB − 1 GB) × 1024 ÷ 64 MB = 48. Średni rozmiar procesu zmierzysz poleceniem ps -ylC php-fpm8.3 --sort:rss (kolumna RSS w KB). Iloczyn max_children × memory_limit to tylko górna granica: procesy zwykle zużywają mniej.

Dlaczego certyfikat przed włączeniem strony

Konfiguracja Nginx wskazuje pliki z /etc/letsencrypt/live/. Jeśli ich jeszcze nie ma, nginx -t zgłosi błąd i przeładowanie się nie uda. Dlatego skrypt najpierw pobiera certyfikat (certbot certonly --nginx), a dopiero potem włącza stronę. Odnawianie sprawdzisz poleceniem certbot renew --dry-run.

HSTS i nagłówki: na co uważać

HSTS z max-age=31536000 każe przeglądarkom przez rok łączyć się z domeną tylko po HTTPS, a includeSubDomains obejmuje też wszystkie subdomeny. Włącz je dopiero, gdy każda subdomena ma działający certyfikat. X-Frame-Options: SAMEORIGIN blokuje osadzanie strony w ramkach na innych domenach.

Typowe pułapki

Nginx domyślnie przyjmuje żądania do 1 MB, dlatego dla PHP dodajemy client_max_body_size 64M, zgodnie z limitem uploadu w puli. Od nginx 1.25.1 zapis listen 443 ssl http2 jest przestarzały: zaznacz opcję http2 on;. Certbot z pakietu snap używa timera snap.certbot.renew.timer zamiast certbot.timer.

Oceń to narzędzie:

Powiązane narzędzia

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

Generator konfiguracji hostingu

Wdrożenie aplikacji PHP na własnym serwerze wymaga trzech elementów: konfiguracji Nginx, puli PHP-FPM i certyfikatu SSL. Generator konfiguracji hostingu tworzy komplet gotowy do wklejenia na serwer z Debianem lub Ubuntu, w wariancie dla Laravela, WordPressa albo strony statycznej (wtedy bez PHP-FPM).

Co zawiera pakiet

PlikZawartość
/etc/nginx/sites-available/domenaprzekierowanie 301 z HTTP na HTTPS i z www na adres bez www, TLS 1.2 i 1.3, opcjonalnie gzip, cache plików statycznych na 30 dni i nagłówki bezpieczeństwa, try_files dopasowane do typu aplikacji, blokada plików ukrytych (poza .well-known)
/etc/php/8.3/fpm/pool.d/domena.confosobna pula z własnym socketem, pm = dynamic, pm.max_children, memory_limit, upload do 64 MB i log błędów w /var/log/php/
deploy.shkatalogi, restart PHP-FPM, certyfikat Let's Encrypt, symlink, test nginx -t, przeładowanie i automatyczne odnawianie

Dla strony statycznej powstają dwa pliki: konfiguracja Nginx i deploy.sh. Wersję PHP wybierasz z listy od 7.4 do 8.5; od niej zależą ścieżka puli i socket, np. /run/php/php8.3-fpm.sock. Opcja http2 on; przełącza zapis HTTP/2 na składnię wymaganą od nginx 1.25.1.

Dobre praktyki

  • root wskazuje na katalog public/, nie na cały projekt: plik .env, konfiguracja i logi nie są wtedy dostępne z przeglądarki,
  • wymuś HTTPS przekierowaniem 301,
  • ustaw HSTS dopiero, gdy SSL działa poprawnie; przy pierwszym wdrożeniu możesz odznaczyć nagłówki bezpieczeństwa i dodać je po sprawdzeniu,
  • dopasuj pm.max_children do RAM serwera (typowy proces PHP zajmuje 40–80 MB),
  • logi błędów PHP trzymaj poza publicznym katalogiem; generator kieruje je do /var/log/php/domena-error.log.

Wdrożenie

Kolejność w deploy.sh ma znaczenie: certyfikat powstaje przed włączeniem strony, bo blok server odwołuje się do plików z /etc/letsencrypt/live/. Gdyby ich nie było, nginx -t zgłosiłby błąd i przeładowanie by się nie udało.

  1. Rekordy DNS A/AAAA domeny (i wersji www) muszą już wskazywać na serwer.
  2. Zapisz pliki pod ścieżkami z nagłówków wyniku.
  3. sudo systemctl restart php8.3-fpm uruchamia nową pulę.
  4. sudo certbot certonly --nginx -d domena -d www.domena --email adres --agree-tos --no-eff-email pobiera certyfikat.
  5. sudo ln -s /etc/nginx/sites-available/domena /etc/nginx/sites-enabled/, a potem sudo nginx -t && sudo systemctl reload nginx.
  6. sudo systemctl enable --now certbot.timer i sudo certbot renew --dry-run włączają i sprawdzają odnawianie.

Jak działa generator konfiguracji hostingu

Generator wypełnia szablony danymi z formularza: typem aplikacji, domeną, katalogiem, wersją PHP, adresem e-mail do Let's Encrypt, liczbą procesów i memory_limit. Socket oraz ścieżki puli, certyfikatu i logów wynikają z domeny i wersji PHP, więc trzy pliki są ze sobą spójne. Wartości pm.start_servers, pm.min_spare_servers i pm.max_spare_servers są dobierane tak, by nie przekraczały pm.max_children (przy 20 procesach: 4, 2 i 8). Gdyby je przekroczyły, PHP-FPM by nie wystartował.

Sedno to limit procesów PHP. Pomocnik „Dobierz pm.max_children do RAM serwera” liczy: pm.max_children = (RAM − rezerwa) × 1024 ÷ średnia pamięć procesu w MB, przy czym RAM i rezerwę podajesz w GB. Wynik zaokrągla w dół i wstawia do pola (najwyżej 1000). Zaokrąglenie w dół jest celowe: przekroczenie pamięci kończy się swapem, a wtedy czas odpowiedzi rośnie skokowo.

Kafelek „Pamięć PHP przy pełnym obciążeniu” pokazuje iloczyn pm.max_children × memory_limit, np. 20 × 256M = 5120 MB. To górna granica, a nie realne zużycie: memory_limit ogranicza pojedyncze żądanie, a typowy proces zajmuje znacznie mniej.

Pliki .php trafiają przez FastCGI do socketa puli, a SCRIPT_FILENAME korzysta z $realpath_root. Dzięki temu konfiguracja działa także przy wdrożeniach, w których katalog aplikacji jest symlinkiem do bieżącego wydania.

Przykład: serwer z 4 GB RAM krok po kroku

  1. Serwer ma 4 GB RAM, działa na nim jedna aplikacja Laravel i lokalna baza danych.
  2. Rezerwujesz 1 GB na system, bazę i procesy pomocnicze. Dla PHP-FPM zostaje (4 − 1) × 1024 = 3072 MB.
  3. Przyjmujesz średni proces 64 MB (domyślna wartość pomocnika): 3072 ÷ 64 = 48, czyli pm.max_children = 48.
  4. Sprawdzasz wariant pesymistyczny: przy procesach po 80 MB wychodzi 3072 ÷ 80 = 38,4, czyli 38. Tę wartość wybierasz, gdy aplikacja ładuje dużo bibliotek albo przetwarza obrazy.
  5. Typ „Laravel / PHP” podpowiada root /var/www/app/public i regułę try_files $uri $uri/ /index.php?$query_string.
  6. Skrypt deploy.sh pobiera certyfikat dla domeny i www, a dopiero potem tworzy symlink w sites-enabled i przeładowuje Nginx.

Tabela referencyjna: pamięć RAM a pm.max_children

Wartości policzone wzorem z pomocnika, z rezerwą rosnącą razem z serwerem. Ściąga pod narzędziem używa jednej rezerwy, którą ustawiasz w pomocniku.

RAM serweraRezerwaPamięć dla PHP-FPM64 MB na proces80 MB na proces
1 GB0,5 GB512 MB86
2 GB0,5 GB1536 MB2419
4 GB1 GB3072 MB4838
8 GB2 GB6144 MB9676
16 GB4 GB12288 MB192153
32 GB8 GB24576 MB384307

Praktyczne wskazówki

  • Zmierz realne zużycie zamiast zgadywać. Polecenie ps -ylC php-fpm8.3 --sort:rss pokazuje kolumnę RSS w KB; średnią podziel przez 1024 i wpisz do pomocnika w miejsce 64 MB.
  • Nie planuj pamięci do zera. Bez rezerwy na system i bazę nawet poprawnie policzony limit skończy się swapem przy pierwszym skoku ruchu.
  • Reguła try_files zależy od typu aplikacji: Laravel przekazuje $query_string, WordPress $args, a strona statyczna zwraca 404 dla brakujących plików. Przy nietypowej strukturze katalogów dopisz własne bloki location.
  • nginx -t uruchamiaj przed każdym przeładowaniem. Błędny plik przy reload zostawia starą konfigurację, ale po restart albo restarcie serwera Nginx w ogóle nie wstanie.

Czego narzędzie nie uwzględnia

  • Realnego profilu pamięci aplikacji: 64 MB to wartość przykładowa, a aplikacja z ciężkimi bibliotekami może zużywać więcej. Wtedy limit trzeba obniżyć.
  • Innych usług na tym samym serwerze. Gdy obok PHP działają Node, Redis, kolejne pule PHP-FPM albo kontenery Docker, zwiększ rezerwę, a wyliczony pm.max_children traktuj jako górną granicę.
  • Warstwy przed serwerem. Proxy, CDN i load balancer nie są częścią wyniku; przy nich przekierowanie na HTTPS i nagłówki bezpieczeństwa mogą się dublować albo zapętlać.
  • Systemów spoza rodziny Debian/Ubuntu. Ścieżki snippets/fastcgi-php.conf, /run/php/ i użytkownik www-data pochodzą z tych dystrybucji; na Rocky Linux czy AlmaLinux trzeba je zmienić.
  • Pozostałych wymagań frameworka, takich jak rozszerzenia PHP, kolejki czy harmonogram zadań. Limit uploadu to 64 MB w Nginx i w puli; większy zmień w obu miejscach.

Najczęstsze pytania

Ile procesów PHP-FPM ustawić?

Odejmij od RAM rezerwę na system i bazę, pomnóż przez 1024 i podziel przez średnią pamięć procesu w MB. Przy 2 GB RAM, rezerwie 0,5 GB i procesie 64 MB wychodzi 24.

Czy certbot przerywa działanie strony?

Nie. certbot certonly --nginx na chwilę dodaje regułę do walidacji HTTP-01 i przeładowuje Nginx bez zatrzymywania go. Odnawianie działa w tle przez certbot.timer, a w instalacji ze snapa przez snap.certbot.renew.timer.

Czy konfiguracja zadziała dla WordPressa?

Tak. Typ „WordPress” ustawia try_files $uri $uri/ /index.php?$args, co obsługuje przyjazne odnośniki (permalinki). Jako root podaj katalog instalacji, np. /var/www/blog.

Czy jedna konfiguracja obsłuży kilka domen?

Generuj osobny zestaw dla każdej domeny: każda dostaje własny plik w sites-available i własną pulę PHP-FPM. Wspólna pula dla kilku serwisów utrudnia rozliczenie pamięci, bo pm.max_children obowiązuje całą pulę.

Jak sprawdzić SSL przed włączeniem HSTS?

Otwórz stronę i upewnij się, że przeglądarka nie zgłasza ostrzeżeń i żaden zasób nie ładuje się po HTTP. Generowany nagłówek ma max-age=31536000 (rok) i includeSubDomains, więc każda subdomena też musi mieć działający certyfikat.

Czy narzędzie wygeneruje konfigurację dla Apache?

Nie, tworzy pliki dla Nginx, PHP-FPM i certbota. Do Apache użyj generatora Apache VirtualHost.

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