Własny serwer Debian/Ubuntu – cz.23: Nginx reverse proxy
Ostatnia aktualizacja: 23 października 2025, 12:03
W kolejnym tutorialu z cyklu Własny Serwer postanowiłem zainstalować Nginx jako odwrotne proxy.
Nginx to serwer WWW (HTTP) oraz serwer proxy dla HTTP i IMAP/POP3 stworzony przez Igora Sysojewa, a rozwijany i wspierany przez założoną przez niego firmę, Nginx, Inc. Zaprojektowany z myślą o wysokiej dostępności i silnie obciążonych serwisach z naciskiem na skalowalność i niską zajętość zasobów. Wydawany jest na licencji BSD.
Proxy jest zwykle używane w celu rozłożenia obciążenia na kilka serwerów, płynnego wyświetlania treści z różnych witryn internetowych lub przekazywania żądań przetwarzania do serwerów aplikacji za pośrednictwem protokołów innych niż HTTP.
W tym tutorialu zainstalujemy Nginx jako reverse proxy, który będzie działał przed serwerem www Apache w celu jego odciążenia. Takie rozwiązanie wpływa na poprawę wydajności i szybkości serwera www.
Nginx reverse proxy wymaga zainstalowania:
1. Serwer www Apache -> cz.1: wlasny-serwer-cz-1-serwer-www
2. Certyfikat TSL/SSL (nie jest niezbędny, lecz wysoce zalecany – większość stron w sieci działa w oparciu o protokół HTTPS) -> cz.3: wlasny-serwer-cz-3-certyfikat-tsl-ssl
Instalacja
apt update
apt install nginx
Sprawdzenie statusu nginx:
systemctl status nginx
Jeśli status jest nieaktywny:
systemctl enable nginx
Jeśli status wskazuje, że nie jest uruchomiony:
systemctl start nginx
Konfiguracja Nginx
Zrób kopię istniejącego pliku konfiguracyjnego:
cd /etc/nginx/sites-available/
mv default default.bak
Utwórz nowy plik konfiguracyjny, np.:
nano /etc/nginx/sites-available/default
#####1 linuxiarze.pl #####
server {
listen 80;
server_name linuxiarze.pl www.linuxiarze.pl;
root /var/www/linuxiarze.pl/public_html;
index index.php index.html index.htm;
location /
{
proxy_pass http://111.222.33.44:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ssl_server_name on;
proxy_ssl_name $host;
}
}
Dodaj również poniższą konfigurację, jeśli używasz protokołu HTTPS (szyfrowany):
server {
listen 443 ssl http2;
server_name linuxiarze.pl www.linuxiarze.pl;
root /var/www/linuxiarze.pl/private_html;
index index.php index.html index.htm;
ssl_certificate /etc/letsencrypt/live/linuxiarze.pl/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/linuxiarze.pl/privkey.pem;
location /
{
proxy_pass https://111.222.22.44:44380;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ssl_server_name on;
proxy_ssl_name $host;
}
}
gdzie:
– IP serwer 111.222.33.44 zmień na IP swojego serwera
– ssl_certificate został wygenerowany przez Lets Encrypt
Zapisz plik konfiguracyjny Nginx i przeładuj usługę:
systemctl restart nginx
Jeśli używasz zapory ufw, dodaj nową regułę:
ufw allow 'Nginx Full'
i przeładuj ufw:
systemctl restart ufw
Konfiguracja Apache
Do tej pory Apache przyjmował połączenia HTTP na porcie 80 oraz HTTPS na porcie 443.
Od tej pory robi to Nginx, więc trzeba ustawić Apache na odbieranie połączeń od Nginx.
nano /etc/apache2/ports.conf
i zmień:
Listen 80
na:
Listen 8080
oraz:
Listen 443
na:
Listen 44380
Teraz zmień konfigurację Apache dla domeny:
nano /etc/apache2/sistes-available/000-default.conf
zmieniając port z:
VirtualHost *:80
na:
VirtualHost *:8080
Jeśli używasz protokołu HTTPS, zmień również port w pliku:
nano /etc/apache2/sistes-available/default-ssl.conf
zmieniając port z:
VirtualHost *:443
na:
VirtualHost *:44380
Po zapisaniu nowej konfiguracji Apache zrestartuj usługę:
systemctl restart apache2
Od tej pory Nginx będzie przyjmował na siebie wszystkie połączenia HTTP/HTTPS i przekazywał je do Apache.
Więcej informacji o Nginx uzyskasz wpisując:
man nginx
nginx --help

