Nginx to jeden z najpopularniejszych serwerów WWW i reverse proxy, ceniony za wydajność, elastyczność i prostotę konfiguracji. Choć jego podstawowe ustawienia są stosunkowo łatwe do opanowania, istnieje wiele zaawansowanych funkcji i trików, które mogą znacząco poprawić działanie aplikacji, zwiększyć bezpieczeństwo czy ułatwić zarządzanie ruchem. Niezależnie od tego, czy jesteś początkującym użytkownikiem, czy doświadczonym administratorem, znajdziesz tu coś dla siebie!
Instalacja:
dnf install nginx
Przydatne info: jeżeli jest to domyślna konfigracja, plik konfiguracji znajduje się w:
/etc/nginx/nginx.conf
Domyślna strona:
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
Tu:
/usr/share/nginx/html
Każdą zmianę konfiguracji warto zrestartować.
Sprawdzenie, gdzie znajduje się plik konfiguracyjny
nginx -V 2>&1 | grep „configure arguments”
Sprawdzenie poprawności konfiguracji przed restartem
sudo nginx -t
Jeśli konfiguracja jest poprawna, zobaczysz:
nginx: configuration file /etc/nginx/nginx.conf test is successful
Uruchomienie Nginx
sudo systemctl start nginx
Zatrzymanie Nginx
sudo systemctl stop nginx
Ponowne wczytanie konfiguracji (bez przerywania działania serwera)
sudo systemctl reload nginx
Restart Nginx po zmianach
sudo systemctl restart nginx
Sprawdzenie statusu Nginx
sudo systemctl status nginx
Włączenie Nginx przy starcie systemu
sudo systemctl enable nginx
Ważne – FIREWAL
Dodanie reguł dla ruchu HTTP (port 80) i HTTPS (port 443)
sudo firewall-cmd –permanent –add-service=http
sudo firewall-cmd –permanent –add-service=https
Zastosowanie zmian i ponowne załadowanie zapory
sudo firewall-cmd –reload
Jeśli z jakiegoś powodu nie chcesz dodawać usług http i https, możesz odblokować porty ręcznie:
sudo firewall-cmd –permanent –add-port=80/tcp
sudo firewall-cmd –permanent –add-port=443/tcp
sudo firewall-cmd –reload
Jak sprawdzić, czy porty są otwarte:
sudo firewall-cmd –list-services
sudo ss -tulnp | grep ’:80|:443′
Zapisy na webinar z Proxmoxa!
Zapraszamy na wyjątkowy webinar poświęcony wirtualizacji serwerów i sieci z wykorzystaniem Proxmox. Podczas spotkania wyjaśnimy, czym jest wirtualizacja i jak działa, a także pokażemy, jak rozpocząć swoją przygodę z tą technologią.
Warsztaty odbędą się 10 lutego o 13:00! Nie przegap!
Zapisy na: https://asdevops.pl/warsztaty/
1. Blokowanie adresów IP i krajów
Nginx umożliwia blokowanie adresów IP lub całych zakresów, co jest przydatne do ochrony przed atakami lub ograniczania dostępu. Przykład blokowania adresów IP:
Edytuj plik konfiguracyjny Nginx
sudo nano /etc/nginx/nginx.conf
Dodaj w sekcji server:
server {
deny 192.168.1.1;
deny 203.0.113.0/24;
allow all;
location / {
root /var/www/html;
}
}
Blokowanie według kraju (wymaga modułu GeoIP). Zainstaluj bazę GeoIP:
sudo dnf install geoip geoip-devel
Lista krajów:
https://github.com/AndiDittrich/GeoIP-Country-Lists/blob/master/GeoLite2/GeoLite2-Country-CSV_20150407/GeoLite2-Country-Locations-en.csv
Skonfiguruj GeoIP w Nginx.
Edytuj plik konfiguracyjny Nginx: sudo nano /etc/nginx/nginx.conf
Dodaj w sekcji http:
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server {
location / {
if ($geoip_country_code = "CN") {
return 403;
}
}
}
}
Zapisz zmiany i restartuj Nginx
sudo nginx -t
Wprowadzenie zmian:
nginx -s reload
lub:
sudo systemctl restart nginx
2. Cache statycznych plików
Nginx może buforować statyczne pliki w pamięci, aby przyspieszyć ich dostarczanie.
Edytuj plik konfiguracyjny Nginx
sudo nano /etc/nginx/nginx.conf
Przykład konfiguracji:
server {
location /static/ {
root /var/www/html;
expires max;
add_header Cache-Control "public, must-revalidate";
}
}
Nginx może pełnić rolę serwera cache, co przyspiesza dostarczanie statycznych i dynamicznych treści. Cache można włączyć za pomocą dyrektywy proxy_cache.. Przykład konfiguracji dla odwrotnego proxy:
Edytuj plik konfiguracyjny Nginx i dodajemy poniższe fragmenty w sekcji http i server
sudo nano /etc/nginx/nginx.conf
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
server {
location / {
proxy_cache my_cache;
proxy_pass http://backend;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
add_header X-Cache-Status $upstream_cache_status;
}
}
}
Tu uwaga: Musimy mieć zdefiniowany DNS do obsługi. Np. podany http://backend w przykładzie
Wyjaśnienie:X-Cache-Status
pozwala sprawdzić, czy odpowiedź pochodzi z cache, czy została pobrana z serwera.proxy_cache_valid
określa czas przechowywania odpowiedzi w cache w zależności od kodu statusu HTTP.
Zapisz zmiany i restartuj Nginx
sudo nginx -t
sudo systemctl restart nginx
3. Automatyczne kompresowanie treści (gzip i brotli)
Nginx może dynamicznie kompresować odpowiedzi HTTP, zmniejszając ich rozmiar i przyspieszając ładowanie stron. Oprócz klasycznego gzip można włączyć brotli (wymaga dodatkowego modułu) dla lepszej wydajności:
https://docs.nginx.com/nginx/admin-guide/dynamic-modules/brotli/
Edytuj plik konfiguracyjny Nginx
sudo nano /etc/nginx/nginx.conf
http {
gzip on;
gzip_types text/plain application/json;
# Brotli
brotli on;
brotli_comp_level 6;
brotli_types text/html application/javascript;
}
Zapisz zmiany i restartuj Nginx
sudo nginx -t
sudo systemctl restart nginx
4. Limitowanie ruchu za pomocą limit_req
Nginx umożliwia ochronę serwera przed nadmiernym ruchem lub atakami DDoS za pomocą limitowania żądań. Można ustawić limit na podstawie adresu IP:
Edytuj plik konfiguracyjny Nginx
sudo nano /etc/nginx/nginx.conf
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server {
location / {
limit_req zone=one burst=10 nodelay;
}
}
}
5. Monitorowanie logów w czasie rzeczywistym
Za pomocą tail Możesz śledzić logi w czasie rzeczywistym w terminalu:
tail -f /var/log/nginx/access.log
Statystyki z modułem stub_status
Nginx ma wbudowany moduł stub_status, który dostarcza podstawowe statystyki serwera w czasie rzeczywistym:
server {
location /nginx_status {
stub_status;
allow 127.0.0.1; # Tylko lokalny dostęp
deny all;
}
}
Odwiedź URL, aby zobaczyć statystyki: curl http://ADRES-SERWERA/nginx_status
Wyjaśnienie:
Active connections
– liczba aktywnych połączeń.accepts
– liczba zaakceptowanych połączeń.handled
– liczba obsłużonych połączeń.requests
– liczba przetworzonych żądań.Reading
,Writing
,Waiting
– szczegóły dotyczące bieżącego przetwarzania żądań.