 Autor: [Miłka Teroy](/autorzy/milka-teroy) Analityk rynku hostingowego · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  LEMP Stack — Nginx + MySQL + PHP-FPM na Ubuntu

# LEMP Stack — Nginx + MySQL + PHP-FPM na Ubuntu

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Hosting

LEMP Stack to nowoczesna alternatywa dla klasycznego LAMP: Nginx zamiast Apache, z wydajnym PHP-FPM jako osobnym procesem. Dzięki asynchronicznej architekturze Nginx obsługuje tysiące równoczesnych połączeń przy minimalnym zużyciu RAM. To preferowany wybór dla nowych projektów, API i aplikacji o dużym ruchu. Ten przewodnik przeprowadzi Cię przez pełną instalację na Ubuntu 22.04/24.04 — od czystego serwera do działającego stacku.

## Krok 1: Instalacja Nginx

apt update
apt install -y nginx

# Sprawdzenie statusu
systemctl status nginx

# Firewall — otwórz port 80 i 443
ufw allow 'Nginx Full'
ufw status

# Test — otwórz http://IP\_TWOJEGO\_VPS
# Powinnaś zobaczyć stronę "Welcome to nginx!"

# Sprawdzenie wersji
nginx -v

## Krok 2: Instalacja MySQL / MariaDB

\# MySQL
apt install -y mysql-server

# Lub MariaDB (drop-in replacement, często szybsza)
# apt install -y mariadb-server

# Zabezpieczenie
mysql\_secure\_installation

# Utwórz bazę i użytkownika
mysql -u root -p

CREATE DATABASE moja\_aplikacja CHARACTER SET utf8mb4 COLLATE utf8mb4\_unicode\_ci;
CREATE USER 'app\_user'@'localhost' IDENTIFIED BY 'silne-haslo';
GRANT ALL PRIVILEGES ON moja\_aplikacja.\* TO 'app\_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

## Krok 3: Instalacja PHP-FPM

\# PHP 8.2 FPM i najpopularniejsze moduły
apt install -y php8.2-fpm php8.2-cli php8.2-mysql \\
    php8.2-curl php8.2-gd php8.2-mbstring \\
    php8.2-xml php8.2-zip php8.2-intl php8.2-bcmath

# Sprawdzenie wersji
php --version

# Status PHP-FPM
systemctl status php8.2-fpm

# Sprawdź socket — będzie potrzebny w konfiguracji Nginx
ls -la /run/php/php8.2-fpm.sock

## Krok 4: Nginx server block z PHP-FPM

Utwórz plik konfiguracyjny w `/etc/nginx/sites-available/`. Kluczowy element to blok `location ~ \.php$` z `fastcgi_pass` do socketu PHP-FPM:

\# /etc/nginx/sites-available/moja-domena.pl

server {
    listen 80;
    listen \[::\]:80;
    server\_name moja-domena.pl www.moja-domena.pl;
    root /var/www/moja-domena.pl/public;
    index index.php index.html;

    # Standardowe logowanie
    access\_log /var/log/nginx/moja-domena-access.log;
    error\_log /var/log/nginx/moja-domena-error.log;

    # Pliki statyczne — bez PHP-FPM
    location ~\* \\.(jpg|jpeg|png|gif|ico|css|js|woff2)$ {
        expires 30d;
        add\_header Cache-Control "public, immutable";
    }

    # Główny routing (try\_files — wymagany przez WordPress i inne CMS)
    location / {
        try\_files $uri $uri/ /index.php?$query\_string;
    }

    # PHP-FPM przez socket Unix
    location ~ \\.php$ {
        # Bezpieczeństwo: nie wykonuj PHP w uploadach
        try\_files $uri =404;
        fastcgi\_split\_path\_info ^(.+\\.php)(/.+)$;

        # Socket PHP-FPM
        fastcgi\_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi\_index index.php;

        # Parametry FastCGI
        include fastcgi\_params;
        fastcgi\_param SCRIPT\_FILENAME $document\_root$fastcgi\_script\_name;
        fastcgi\_param PATH\_INFO $fastcgi\_path\_info;
    }

    # Ukryj pliki .htaccess i .env
    location ~ /\\. {
        deny all;
    }
}

\# Utwórz katalog i ustaw uprawnienia
mkdir -p /var/www/moja-domena.pl/public
chown -R www-data:www-data /var/www/moja-domena.pl

# Aktywacja strony
ln -s /etc/nginx/sites-available/moja-domena.pl /etc/nginx/sites-enabled/

# Wyłącz domyślny site (opcjonalne)
rm /etc/nginx/sites-enabled/default

# TEST KONFIGURACJI (zawsze przed reload!)
nginx -t

# Przeładowanie Nginx (bez przerwy w ruchu)
systemctl reload nginx

## Testowanie PHP-FPM

\# Utwórz plik testowy
echo "<?php phpinfo(); ?>" > /var/www/moja-domena.pl/public/info.php

# Otwórz http://moja-domena.pl/info.php
# Szukaj: "Server API" = FPM/FastCGI — potwierdza działanie PHP-FPM

# PO TEŚCIE USUŃ PLIK!
rm /var/www/moja-domena.pl/public/info.php

## Optymalizacja Nginx — worker\_processes i keepalive

\# /etc/nginx/nginx.conf — kluczowe parametry

user www-data;
worker\_processes auto;    # auto = tyle ile rdzeni CPU (zalecane)

events {
    worker\_connections 1024;   # połączeń per worker (domyślnie 512)
    use epoll;                  # Linux: epoll jest najwydajniejszy
    multi\_accept on;            # akceptuj wiele połączeń jednocześnie
}

http {
    sendfile on;
    tcp\_nopush on;
    tcp\_nodelay on;
    keepalive\_timeout 65;
    keepalive\_requests 1000;    # requesty na jedno połączenie keep-alive
    types\_hash\_max\_size 2048;

    # Buforowanie
    client\_body\_buffer\_size 128k;
    client\_max\_body\_size 64M;   # max rozmiar uploadu
    client\_header\_buffer\_size 1k;

    # Gzip kompresja
    gzip on;
    gzip\_comp\_level 6;
    gzip\_types text/plain text/css application/json application/javascript;
}

## Optymalizacja PHP-FPM pool

\# /etc/php/8.2/fpm/pool.d/www.conf — dostosuj do RAM serwera

\[www\]
user = www-data
group = www-data
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data

; Dynamiczne zarządzanie procesami
pm = dynamic
pm.max\_children = 20         ; max 20 procesów PHP
pm.start\_servers = 5         ; 5 na starcie
pm.min\_spare\_servers = 2     ; min 2 w gotowości
pm.max\_spare\_servers = 8     ; max 8 w gotowości
pm.max\_requests = 500        ; restart procesu po 500 requestach

; Status endpoint (monitorowanie)
pm.status\_path = /fpm-status

Reguła ogólna dla `pm.max_children`: dostępny RAM podziel przez zużycie jednego procesu PHP. Sprawdź: `ps aux | grep php-fpm | awk '{print $6}'` — wartości w KB. Typowy proces PHP z WordPress to 30-60 MB.

## Najczęstsze pytania

Co oznacza skrót LEMP? +

LEMP to akronim od: Linux (system operacyjny), Nginx (serwer HTTP — "E" od wymowy "engine-x"), MySQL lub MariaDB (baza danych) i PHP-FPM (interpreter PHP jako FastCGI process manager). To nowoczesna alternatywa dla LAMP Stack, oferująca lepszą wydajność przy dużym ruchu i niższe zużycie RAM dzięki asynchronicznej architekturze Nginx.

Dlaczego LEMP jest szybszy od LAMP? +

Nginx używa architektury event-driven (asynchronicznej) — jeden worker obsługuje tysiące połączeń jednocześnie przez system zdarzeń. Apache z mpm\_prefork tworzy nowy proces (kilkanaście MB RAM) na każde połączenie. Przy 100 równoczesnych użytkownikach Apache może zużywać kilkaset MB tylko na procesy, podczas gdy Nginx mieści się w kilkudziesięciu MB. Nginx szybciej serwuje też pliki statyczne (obrazy, CSS, JS) bezpośrednio z dysku.

Jak skonfigurować PHP-FPM z Nginx? +

W server block Nginx dodaj location ~ \\.php$ z fastcgi\_pass unix:/run/php/php8.2-fpm.sock (lub tcp: fastcgi\_pass 127.0.0.1:9000). Dołącz fastcgi\_params i ustaw SCRIPT\_FILENAME. PHP-FPM musi nasłuchiwać na tym samym sockecie/porcie. Zrestartuj oba: systemctl restart php8.2-fpm nginx. Testuj przez plik phpinfo() — jeśli pokazuje informacje PHP, FPM działa.

Jak testować konfigurację Nginx bez restartu? +

Użyj nginx -t — sprawdza składnię konfiguracji bez restartu usługi. Jeśli wynik to "syntax is ok" i "test is successful", możesz bezpiecznie przeładować: systemctl reload nginx (nie restart — reload nie przerywa aktywnych połączeń). Zawsze uruchamiaj nginx -t przed każdą zmianą w produkcji.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z dużym RAM — idealny do LEMP Stack z kilkoma aplikacjami PHP i dużym ruchem

VPS LEMP

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

CyberFolks

LiteSpeed hosting — wydajność zbliżona do Nginx + PHP-FPM bez konfiguracji VPS

LiteSpeed

[Aktywuj rabat →](/out/cyberfolks)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/cyberfolks)

LH.pl

Hosting z gotowym PHP-FPM — szybki PHP bez samodzielnej konfiguracji serwera

Managed PHP-FPM

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [LAMP Stack — Apache + MySQL + PHP na Ubuntu](/baza-wiedzy/lamp-stack-konfiguracja)
-   [PHP-FPM — konfiguracja i optymalizacja](/baza-wiedzy/php-fpm-konfiguracja-optymalizacja)
-   [Nginx — konfiguracja virtual hostów](/baza-wiedzy/nginx-vhost-konfiguracja)
-   [SSL Let's Encrypt — automatyzacja](/baza-wiedzy/ssl-lets-encrypt-automatyzacja)
-   [MySQL Slow Query Log — optymalizacja zapytań](/baza-wiedzy/mysql-slow-query-log)
-   [Wszystkie artykuły](/baza-wiedzy/)