Mikrus
Dobry na tani lab, staging i mniejsze wdrożenia.
#Reklama · link partnerski
Zobacz kod rabatowy →Ostatnia aktualizacja: kwiecień 2026
/etc/nginx/sites-available/domena.pl, dodaj
blok server z server_name, root i przekazaniem PHP do FPM.
Aktywuj symlinkiem do sites-enabled/. Dodaj SSL przez certbot --nginx -d domena.pl. Test: nginx -t, przeładuj: systemctl reload nginx.
Utwórz plik: /etc/nginx/sites-available/domena.pl.conf
# HTTP — przekierowanie na HTTPS (po instalacji SSL przez Certbot)
server {
listen 80;
listen [::]:80;
server_name domena.pl www.domena.pl;
# Certbot doda tutaj blok ACME challenge automatycznie
return 301 https://$host$request_uri;
}
# HTTPS — główny virtual host
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name domena.pl www.domena.pl;
# === SSL (uzupełni Certbot) ===
ssl_certificate /etc/letsencrypt/live/domena.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domena.pl/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# === Pliki ===
root /var/www/domena.pl/public;
index index.php index.html;
# === Logi ===
access_log /var/log/nginx/domena.pl.access.log;
error_log /var/log/nginx/domena.pl.error.log warn;
# === PHP-FPM ===
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "upload_max_filesize=64M \n post_max_size=64M";
fastcgi_read_timeout 300;
}
# === Static files cache ===
location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff2|woff|ttf)$ {
expires 1y;
add_header Cache-Control "public, immutable";
log_not_found off;
access_log off;
}
# === Security headers ===
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;
location / {
try_files $uri $uri/ =404;
}
} # Aktywacja virtual host sudo ln -s /etc/nginx/sites-available/domena.pl.conf /etc/nginx/sites-enabled/ # Test konfiguracji (ZAWSZE przed przeładowaniem!) sudo nginx -t # Przeładowanie bez downtime sudo systemctl reload nginx # Instalacja SSL przez Certbot (zmodyfikuje konfigurację automatycznie) sudo certbot --nginx -d domena.pl -d www.domena.pl
WordPress wymaga specjalnej konfiguracji try_files dla permalinków i blokowania dostępu
do wrażliwych plików:
server {
# ... (ssl, server_name, root jak wyżej) ...
# WordPress: przekaż nieznalezione URL do index.php
location / {
try_files $uri $uri/ /index.php?$args;
}
# Zablokuj dostęp do .htaccess, .git, wp-config.php
location ~ /\. {
deny all;
return 404;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location = /wp-config.php {
deny all;
}
location ~* /xmlrpc.php {
deny all; # blokuj XML-RPC (częsty cel ataków brute-force)
}
# PHP-FPM
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Te ustawienia wstaw do bloku http {} w /etc/nginx/nginx.conf:
http {
# === GZIP ===
gzip on;
gzip_vary on;
gzip_min_length 1000;
gzip_comp_level 6;
gzip_types
text/plain text/css text/xml text/javascript
application/javascript application/json application/xml
application/rss+xml image/svg+xml;
# === TIMEOUTS ===
client_body_timeout 12;
client_header_timeout 12;
keepalive_timeout 15;
send_timeout 10;
client_max_body_size 64m;
# === RATE LIMITING (anty-DDoS) ===
# Limit 10 żądań/s per IP dla ogólnego ruchu
limit_req_zone $binary_remote_addr zone=general:10m rate=10r/s;
# Surowy limit dla wp-login.php (anty brute-force)
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s;
# W bloku server {} dodaj:
# limit_req zone=general burst=20 nodelay;
# location = /wp-login.php {
# limit_req zone=login burst=3;
# # ... fastcgi_pass ...
# }
} # Test konfiguracji sudo nginx -t # Sprawdzenie błędów w logach (ostatnie 50 linii) sudo tail -50 /var/log/nginx/error.log sudo tail -50 /var/log/nginx/domena.pl.error.log # Aktywne połączenia i status Nginx sudo systemctl status nginx sudo nginx -V # wersja + moduły kompilacji # Sprawdzenie czy port 443 nasłuchuje sudo ss -tlnp | grep nginx # Przeładowanie konfiguracji (zero downtime) sudo systemctl reload nginx # Pełny restart (przerywa aktywne połączenia — unikaj na produkcji) sudo systemctl restart nginx
Poniższe oferty mają sens, jeśli chcesz samodzielnie skonfigurować server blocki, SSL i PHP-FPM.