🚀 Jak Skonfigurować Serwer Nginx do Obsługi PHP na Ubuntu 20.04 [Kompletny Przewodnik]

Nginx w połączeniu z PHP stanowi jedno z najpopularniejszych i najwydajniejszych rozwiązań dla nowoczesnych aplikacji webowych. W tym szczegółowym przewodniku przeprowadzimy Cię przez cały proces instalacji i konfiguracji serwera Nginx z obsługą PHP na Ubuntu 20.04, tak abyś mógł uruchomić swoje strony i aplikacje w optymalny sposób.

⚡ Ekspresowe Podsumowanie:

  1. Instalacja pakietów: Zaktualizuj repozytorium, zainstaluj Nginx, PHP oraz niezbędne rozszerzenia PHP.
  2. Konfiguracja PHP-FPM: Dostosuj ustawienia PHP-FPM dla optymalnej wydajności i bezpieczeństwa.
  3. Konfiguracja Nginx: Skonfiguruj serwer Nginx do prawidłowej obsługi plików PHP i współpracy z PHP-FPM.
  4. Testowanie i dostrajanie: Sprawdź działanie konfiguracji i zoptymalizuj ją pod kątem wydajności.

🗺️ Spis Treści - Twoja Mapa Drogowa


📋 Wymagania Wstępne

Zanim przystąpimy do właściwej konfiguracji, upewnij się, że spełniasz następujące wymagania:

  • Serwer z systemem Ubuntu 20.04 LTS
  • Dostęp do konta root lub użytkownika z uprawnieniami sudo
  • Podstawowa znajomość terminala Linux
  • Domena (opcjonalnie, jeśli planujesz hostować stronę dostępną publicznie)

Przygotowanie Systemu

Pierwszym krokiem jest aktualizacja repozytorium pakietów:

sudo apt update
sudo apt upgrade -y

Dobra praktyka to także instalacja podstawowych narzędzi, które mogą być przydatne:

sudo apt install -y curl wget vim unzip software-properties-common

✨ Pro Tip: Zawsze warto rozpocząć pracę z serwerem od aktualizacji systemu, aby upewnić się, że wszystkie pakiety są aktualne i zawierają najnowsze poprawki bezpieczeństwa.

🔧 Instalacja Nginx i PHP

Przystępujemy do instalacji głównych komponentów: serwera Nginx oraz PHP z modułem PHP-FPM.

Instalacja Nginx

Nginx jest dostępny w domyślnych repozytoriach Ubuntu:

sudo apt install -y nginx

Po zakończeniu instalacji, sprawdźmy, czy Nginx działa poprawnie:

sudo systemctl status nginx

Jeśli Nginx nie jest uruchomiony, możemy go wystartować:

sudo systemctl start nginx
sudo systemctl enable nginx

Weryfikacja działania serwera:

curl http://localhost

Jeśli wszystko działa prawidłowo, powinieneś zobaczyć domyślną stronę powitalną Nginx.

Instalacja PHP i PHP-FPM

Ubuntu 20.04 domyślnie zawiera PHP 7.4. Zainstalujmy PHP wraz z niezbędnymi rozszerzeniami oraz PHP-FPM (FastCGI Process Manager):

sudo apt install -y php7.4 php7.4-fpm php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl

Powyższa komenda instaluje:

  • php7.4 - podstawowy pakiet PHP
  • php7.4-fpm - FastCGI Process Manager, który będzie wykorzystywany przez Nginx do przetwarzania plików PHP
  • Różne rozszerzenia PHP, które mogą być wymagane przez aplikacje webowe (MySQL, XML, CURL, GD itd.)

Uwaga: Jeśli potrzebujesz konkretnej wersji PHP, możesz skorzystać z repozytorium PPA. Na przykład, aby zainstalować PHP 8.0, należy dodać repozytorium ppa:ondrej/php i zainstalować odpowiednie pakiety. Pamiętaj jednak, że w takim przypadku musisz dostosować wszystkie dalsze kroki, zastępując php7.4 odpowiednią wersją.

Po instalacji sprawdźmy, czy PHP-FPM działa poprawnie:

sudo systemctl status php7.4-fpm

Jeśli usługa nie jest uruchomiona, startujemy ją:

sudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm

⚙️ Konfiguracja PHP-FPM

Zanim przejdziemy do konfiguracji Nginx, warto dostosować ustawienia PHP-FPM dla optymalnej wydajności.

Podstawowa Konfiguracja PHP-FPM

Główny plik konfiguracyjny PHP-FPM dla puli www znajduje się w /etc/php/7.4/fpm/pool.d/www.conf. Otwórzmy go:

sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Oto kilka ustawień, które warto dostosować:

  1. User i Group - Domyślnie PHP-FPM działa jako użytkownik www-data. Możesz to pozostawić bez zmian lub dostosować do swoich potrzeb:
user = www-data
group = www-data
  1. Listen - Określa, gdzie PHP-FPM będzie nasłuchiwać na połączenia. Domyślnie jest to unix socket, co jest zalecane dla wydajności:
listen = /run/php/php7.4-fpm.sock

Alternatywnie możesz skonfigurować nasłuchiwanie na TCP/IP:

listen = 127.0.0.1:9000
  1. Process Manager - Konfiguracja zarządzania procesami. Dostępne opcje to: static, dynamic i ondemand. Dla większości przypadków dynamic jest dobrym wyborem:
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Dla serwerów z większą ilością pamięci RAM, warto zwiększyć powyższe wartości.

Optymalizacja PHP.ini

Dostosujmy teraz główny plik konfiguracyjny PHP:

sudo nano /etc/php/7.4/fpm/php.ini

Oto kilka kluczowych ustawień do zmodyfikowania:

  1. memory_limit - Limit pamięci dla skryptów PHP, domyślnie 128M:
memory_limit = 256M
  1. upload_max_filesize i post_max_size - Maksymalny rozmiar przesyłanych plików:
upload_max_filesize = 64M
post_max_size = 64M
  1. max_execution_time - Maksymalny czas wykonania skryptu:
max_execution_time = 300
  1. opcache.enable - Włączenie opcache dla lepszej wydajności:
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1

Po wprowadzeniu zmian, restartujemy PHP-FPM:

sudo systemctl restart php7.4-fpm

🛠️ Konfiguracja Nginx do Obsługi PHP

Teraz skonfigurujmy Nginx, aby prawidłowo przekazywał żądania plików PHP do PHP-FPM.

Podstawowa Konfiguracja Serwera

Utwórzmy nowy plik konfiguracyjny dla naszej strony:

sudo nano /etc/nginx/sites-available/mojadomena.conf

Wklej poniższą konfigurację, dostosowując ją do swoich potrzeb:

server {
    listen 80;
    server_name example.com www.example.com;  # Zmień na swoją domenę
    root /var/www/html;  # Zmień na ścieżkę do katalogu Twojej strony
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Konfiguracja obsługi plików PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;  # Ścieżka do socketa PHP-FPM
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Blokowanie dostępu do ukrytych plików
    location ~ /\.ht {
        deny all;
    }
}

Kilka ważnych elementów tej konfiguracji:

  • server_name - nazwa domeny, którą będzie obsługiwać ten serwer
  • root - ścieżka do katalogu z plikami strony
  • index - domyślne pliki, które będą ładowane dla katalogu
  • location / {...} - obsługa URL i przekierowania dla aplikacji (np. WordPress, Laravel)
  • location ~ \.php$ {...} - konfiguracja przekazywania plików PHP do PHP-FPM
  • location ~ /\.ht {...} - blokowanie dostępu do plików .htaccess

Aktywacja Konfiguracji

Aby aktywować nową konfigurację, musimy utworzyć link symboliczny w katalogu sites-enabled:

sudo ln -s /etc/nginx/sites-available/mojadomena.conf /etc/nginx/sites-enabled/

Opcjonalnie, można usunąć domyślną konfigurację:

sudo rm /etc/nginx/sites-enabled/default

Sprawdźmy poprawność konfiguracji:

sudo nginx -t

Jeśli test zakończył się pomyślnie, restartujemy Nginx:

sudo systemctl restart nginx

Tworzenie Katalogu Dla Strony

Utwórzmy katalog dla naszej strony i nadajmy mu odpowiednie uprawnienia:

sudo mkdir -p /var/www/html
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

🔍 Testowanie Konfiguracji

Utwórzmy prosty plik PHP, aby przetestować naszą konfigurację:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Teraz możemy otworzyć przeglądarkę i przejść pod adres http://twojadomena.com/info.php lub http://twoj_adres_ip/info.php, aby zobaczyć stronę z informacjami o konfiguracji PHP.

Uwaga: Ze względów bezpieczeństwa, po zakończeniu testów zaleca się usunięcie pliku info.php, ponieważ zawiera on szczegółowe informacje o konfiguracji serwera:

sudo rm /var/www/html/info.php

🔐 Zabezpieczanie Konfiguracji

Bezpieczeństwo jest kluczowym aspektem konfiguracji każdego serwera. Oto kilka podstawowych kroków, które warto wykonać:

1. Aktualizacja Ustawień PHP

Otwórz plik php.ini:

sudo nano /etc/php/7.4/fpm/php.ini

Zmień następujące ustawienia dla większego bezpieczeństwa:

display_errors = Off
expose_php = Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source

2. Konfiguracja Nginx dla Lepszego Bezpieczeństwa

Edytuj plik konfiguracyjny strony:

sudo nano /etc/nginx/sites-available/mojadomena.conf

Dodaj następujące dyrektywy:

# Ukrywanie wersji Nginx
server_tokens off;

# Dodatkowe nagłówki bezpieczeństwa
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;

# Blokowanie dostępu do plików wrażliwych
location ~* \.(git|svn|hg|txt|md)$ {
    deny all;
    return 404;
}

3. Konfiguracja SSL/TLS (HTTPS)

Dla stron produkcyjnych, niezbędne jest skonfigurowanie HTTPS. Możemy użyć Let's Encrypt i Certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Postępuj zgodnie z instrukcjami, a Certbot automatycznie skonfiguruje Nginx do obsługi HTTPS.

📈 Optymalizacja Wydajności

Oto kilka dodatkowych kroków, które możesz wykonać, aby poprawić wydajność swojego serwera:

1. Włączenie Buforowania W Nginx

Edytuj plik konfiguracyjny:

sudo nano /etc/nginx/sites-available/mojadomena.conf

Dodaj następującą konfigurację buforowania:

# Buforowanie statycznych plików
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

# Buforowanie w pamięci
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=PHPCACHE:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

# Włączenie buforowania dla lokacji PHP
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_cache PHPCACHE;
    fastcgi_cache_valid 200 60m;
    add_header X-FastCGI-Cache $upstream_cache_status;
}

Utwórz katalog cache:

sudo mkdir -p /var/cache/nginx
sudo chown -R www-data:www-data /var/cache/nginx

2. Optymalizacja PHP-FPM Pool

Dla bardziej obciążonych stron warto dostosować konfigurację puli PHP-FPM:

sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Zmodyfikuj następujące wartości (dostosuj je do zasobów swojego serwera):

pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500

3. Zwięększenie Limitów Otwartych Plików

Edytuj plik systemd dla PHP-FPM:

sudo systemctl edit php7.4-fpm

Dodaj:

[Service]
LimitNOFILE=65535

Zapisz i zresetuj demon systemd:

sudo systemctl daemon-reload
sudo systemctl restart php7.4-fpm

🔄 Zarządzanie Wieloma Stronami (Wirtualne Hosty)

Jeśli potrzebujesz hostować więcej niż jedną stronę na swoim serwerze, możesz utworzyć dodatkowe pliki konfiguracyjne dla każdej domeny:

sudo nano /etc/nginx/sites-available/drugisite.conf

Treść będzie podobna do pierwszej konfiguracji, ale z innymi wartościami server_name i root.

Aktywuj konfigurację:

sudo ln -s /etc/nginx/sites-available/drugisite.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

❓ FAQ - Odpowiedzi na Twoje Pytania

Jak sprawdzić, czy PHP-FPM działa poprawnie?
Możesz sprawdzić status usługi za pomocą komendy sudo systemctl status php7.4-fpm. Jeśli usługa jest aktywna, będzie wyświetlony status "active (running)".

Dlaczego lepiej używać socketa Unix niż TCP/IP dla PHP-FPM?
Sockety Unix są szybsze niż połączenia TCP/IP, ponieważ omijają stos sieciowy. Są również bezpieczniejsze, ponieważ dostęp do nich można kontrolować za pomocą standardowych uprawnień do plików.

Jak zmienić wersję PHP używaną przez Nginx?
Aby zmienić wersję PHP, musisz:

  1. Zainstalować nową wersję PHP-FPM (sudo apt install php8.0-fpm)
  2. Zaktualizować konfigurację Nginx, aby używała nowego socketa (fastcgi_pass unix:/run/php/php8.0-fpm.sock)
  3. Zrestartować Nginx (sudo systemctl restart nginx)

Jak rozwiązać problem "502 Bad Gateway"?
Ten błąd zwykle oznacza, że Nginx nie może połączyć się z PHP-FPM. Sprawdź:

  1. Czy PHP-FPM działa: sudo systemctl status php7.4-fpm
  2. Czy ścieżka do socketa jest poprawna w konfiguracji Nginx
  3. Logi: sudo tail -f /var/log/nginx/error.log

Co zrobić, gdy strona działa wolno?

  1. Sprawdź użycie zasobów serwera: top, htop
  2. Zoptymalizuj konfigurację PHP-FPM (zwiększ pm.max_children)
  3. Włącz buforowanie w Nginx
  4. Włącz opcache PHP
  5. Rozważ użycie CDN dla statycznych plików

🏁 Podsumowanie - Gotowy na Sukces?

W tym przewodniku nauczyliśmy się, jak zainstalować i skonfigurować serwer Nginx z obsługą PHP na Ubuntu 20.04. Przeszliśmy przez wszystkie kluczowe kroki:

  1. Instalacja Nginx i PHP-FPM
  2. Konfiguracja PHP-FPM dla optymalnej wydajności
  3. Skonfigurowanie Nginx do obsługi plików PHP
  4. Zabezpieczenie serwera
  5. Optymalizacja wydajności

Masz teraz solidną podstawę do hostowania nowoczesnych aplikacji PHP, które będą działać szybko i bezpiecznie.

✅ Twoja Checklista:

  • 🔍 Nginx zainstalowany i skonfigurowany
  • 🔄 PHP-FPM zainstalowany i zoptymalizowany
  • 🔒 Podstawowe zabezpieczenia wdrożone
  • 📈 Konfiguracja wydajności zoptymalizowana
  • 🔬 Konfiguracja przetestowana i działająca

🚀 Potrzebujesz profesjonalnego hostingu z obsługą Nginx i PHP?

Sprawdź ofertę hostingu VPS w IQHost

Dzięki naszym serwerom VPS możesz cieszyć się pełną kontrolą i wysoką wydajnością bez konieczności samodzielnej konfiguracji. Oferujemy pre-instalowane środowiska ze zoptymalizowaną konfiguracją Nginx + PHP!

Czy ten artykuł był pomocny?

Wróć do listy wpisów

Twoja strona WordPress działa wolno?

Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!

Sprawdź ofertę hostingu
30-dniowa gwarancja zwrotu pieniędzy