Nginx – 5 przydatnych tricków w konfiguracji

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ń.

 

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/

 

 

 

Zapisy na warsztaty "Proxmox - Praktyczne Wprowadzenie do Wirtualizacji Serwerów"!

X