Introducing ZYNOO General Purpose & CPU Optimized Servers   Learn More >

Jak skonfigurować serwer proxy odwrotny Nginx w Ubuntu

Serwer proxy odwrotny Nginx odbiera żądania od odwiedzających witrynę i przekazuje je do innego serwera lub aplikacji. Często używa się go, aby udostępnić pod nazwą domeny aplikacje działające na portach takich jak 3000, bez wystawiania ich wewnętrznych portów na działanie internetu.

W tym poradniku skonfigurujesz Nginx w Ubuntu tak, aby przekazywał żądania do lokalnej aplikacji. Podłączysz też domenę i włączysz HTTPS.

Czym jest serwer proxy odwrotny Nginx?

Serwer proxy odwrotny pośredniczy między odwiedzającymi a aplikacją backendową.

Zamiast łączyć się bezpośrednio z aplikacją działającą na porcie 3000, odwiedzający łączą się z Nginx przez standardowe porty HTTP lub HTTPS.

Nginx przekazuje żądanie do aplikacji i zwraca jej odpowiedź.

Przepływ żądań wygląda następująco:

Odwiedzający → Nginx → Aplikacja backendowa

Takie rozwiązanie jest często stosowane w przypadku aplikacji internetowych opartych na Node.js, Pythonie i innych technologiach. Może też obsługiwać terminację TLS, równoważenie obciążenia i scentralizowaną obsługę żądań.

Potrzebujesz VPS do konfiguracji Nginx?
Wdrażaj aplikacje z dostępem do konta root i elastycznymi zasobami serwera.
Sprawdź plany VPS →

Wymagania wstępne

Przed rozpoczęciem przygotuj:

  • Serwer z Ubuntu 24.04 LTS i dostępem do sudo.
  • Dostęp do serwera przez SSH.
  • Domenę wskazującą na publiczny adres IP serwera.
  • Aplikację backendową nasłuchującą na lokalnym porcie.

W tym przykładzie użyjemy portu 3000.

Jeśli dopiero zaczynasz korzystać z SSH, przed kontynuowaniem przeczytaj nasz poradnik dla początkujących dotyczący poleceń SSH.

Jak skonfigurować serwer proxy odwrotny Nginx

Krok 1: Zainstaluj Nginx w Ubuntu

Połącz się z serwerem z Ubuntu przez SSH.

Zaktualizuj indeks pakietów i zainstaluj Nginx:

sudo apt update
sudo apt install nginx -y

Sprawdź, czy Nginx działa:

sudo systemctl status nginx

Powinien pojawić się status active (running).

Jeśli Nginx nie został uruchomiony, wykonaj:

sudo systemctl enable --now nginx

Możesz też otworzyć publiczny adres IP serwera w przeglądarce. Jeśli dostęp przez HTTP jest dozwolony, powinna wyświetlić się domyślna strona powitalna Nginx.

Jeśli używasz UFW, zezwól na ruch HTTP i HTTPS:

sudo ufw allow 'Nginx Full'

Sprawdź również reguły zapory skonfigurowane u dostawcy hostingu. Nie wyłączaj zapory tylko po to, aby udostępnić Nginx.

Krok 2: Uruchom testową aplikację backendową

Przed skonfigurowaniem serwera proxy odwrotnego potrzebujemy aplikacji, do której Nginx będzie przekazywał żądania.

Na potrzeby prostego testu utwórz katalog tymczasowy:

mkdir -p ~/nginx-proxy-test
cd ~/nginx-proxy-test

Utwórz prostą stronę HTML:

echo '<h1>Nginx Reverse Proxy Works!</h1>' > index.html

Teraz uruchom wbudowany serwer HTTP Pythona:

python3 -m http.server 3000 --bind 127.0.0.1

Serwer udostępni stronę testową na porcie 3000, dostępnym wyłącznie przez lokalny adres pętli zwrotnej.

Pozostaw ten terminal uruchomiony i otwórz drugą sesję SSH.

Sprawdź, czy aplikacja odpowiada:

curl http://127.0.0.1:3000

Powinien pojawić się wynik:

<h1>Nginx Reverse Proxy Works!</h1>

Ten serwer Pythona służy wyłącznie do demonstracji. W przypadku aplikacji produkcyjnej użyj zalecanego dla niej serwera aplikacji oraz odpowiedniej konfiguracji zarządzania usługą.

Krok 3: Utwórz konfigurację serwera proxy odwrotnego Nginx

Utwórz nowy blok serwera Nginx:

sudo nano /etc/nginx/sites-available/app.example.com

Zastąp app.example.com swoją domeną.

Dodaj następującą konfigurację:

server {
    listen 80;
    server_name app.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;

        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;
    }
}

Zapisz plik.

Objaśnienie konfiguracji

  • listen 80 przyjmuje żądania HTTP.
  • server_name określa domenę, którą ma obsługiwać Nginx.
  • proxy_pass przekazuje żądania do aplikacji na porcie 3000.
  • proxy_set_header przekazuje aplikacji backendowej przydatne informacje o pierwotnym żądaniu.

Aplikacja backendowa musi rozumieć przekazywane nagłówki i bezpiecznie je obsługiwać. Konfiguruj aplikacje tak, aby ufały tym nagłówkom, tylko jeśli żądania docierają przez zaufany serwer proxy.

Krok 4: Włącz i przetestuj konfigurację

Włącz nowy blok serwera:

sudo ln -s /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/

Jeśli dowiązanie już istnieje, nie twórz go ponownie.

Sprawdź konfigurację pod kątem błędów:

sudo nginx -t

Jeśli test zakończy się pomyślnie, przeładuj Nginx:

sudo systemctl reload nginx

Teraz otwórz:

http://app.example.com

Jeśli rekordy DNS wskazują właściwy serwer, a testowa aplikacja backendowa nadal działa, powinien pojawić się komunikat:

Serwer proxy odwrotny Nginx działa!

Jeśli zamiast tego pojawi się domyślna strona Nginx, sprawdź rekordy DNS domeny i konfigurację server_name.

Krok 5: Włącz HTTPS za pomocą Let’s Encrypt

W przypadku publicznej witryny użyj HTTPS, zamiast pozostawiać ruch niezaszyfrowany.

Najpierw upewnij się, że domena wskazuje właściwy serwer i że przychodzący ruch na porcie 80 jest dozwolony. Jest to ważne dla standardowego procesu weryfikacji certyfikatu przez HTTP.

Zainstaluj Certbot oficjalną metodą opartą na Snap:

sudo snap install --classic certbot

Jeśli polecenie certbot nie jest jeszcze dostępne, utwórz do niego dowiązanie:

sudo ln -s /snap/bin/certbot /usr/local/bin/certbot

Następnie wystąp o certyfikat:

sudo certbot --nginx -d app.example.com

Postępuj zgodnie z wyświetlanymi instrukcjami. Certbot może uzyskać certyfikat i skonfigurować Nginx tak, aby obsługiwał Twoją domenę przez HTTPS.

Następnie przetestuj odnawianie certyfikatu:

sudo certbot renew --dry-run

Otwórz:

https://app.example.com

Twoja aplikacja testowa powinna teraz ładować się przez szyfrowane połączenie.

Krok 6: Sprawdź serwer proxy odwrotny

Sprawdź odpowiedź przez HTTPS:

curl -I https://app.example.com

W przypadku przykładowej aplikacji backendowej w Pythonie odpowiedź HTTP 200 OK oznacza, że żądanie pomyślnie dotarło do aplikacji.

Możesz też sprawdzić, które procesy nasłuchują na serwerze:

sudo ss -ltnp

Nginx powinien nasłuchiwać na skonfigurowanych publicznych portach HTTP i HTTPS, a przykładowa aplikacja backendowa — na 127.0.0.1:3000.

Pamiętaj, że tymczasowy serwer Pythona zatrzyma się po zakończeniu jego sesji terminala. Aplikacje produkcyjne powinny działać pod nadzorem menedżera procesów, takiego jak systemd.

Typowe problemy z serwerem proxy odwrotnym Nginx

502 Bad Gateway

Zwykle oznacza to, że Nginx nie otrzymał prawidłowej odpowiedzi od aplikacji backendowej.

Sprawdź, czy aplikacja działa i czy port w proxy_pass jest prawidłowy.

504 Gateway Timeout

Błąd 504 występuje, gdy brama nie otrzyma wymaganej odpowiedzi od usługi backendowej w odpowiednim czasie.

Zanim zwiększysz limity czasu, sprawdź przyczyny powolnego przetwarzania żądań przez aplikację oraz wydajność jej backendu.

Domena się nie ładuje

Sprawdź, czy rekord A domeny wskazuje właściwy publiczny adres IP, odpowiednie porty są otwarte w zaporze, a blok serwera Nginx odpowiada żądanej nazwie hosta.

Często zadawane pytania

Czym jest proxy_pass w Nginx?

proxy_pass wskazuje Nginx, dokąd ma przekazywać żądania, na przykład do aplikacji HTTP działającej pod adresem 127.0.0.1:3000.

Czy serwer proxy odwrotny Nginx może obsługiwać wiele aplikacji?

Tak. Możesz skonfigurować osobne domeny, subdomeny lub ścieżki URL, aby przekazywać żądania do różnych aplikacji backendowych.

Czy serwer proxy odwrotny Nginx wymaga domeny?

Nie. Serwer proxy odwrotny można testować przy użyciu adresu IP lub lokalnie. Domena ułatwia jednak publiczne udostępnianie aplikacji i uzyskanie standardowego certyfikatu HTTPS.

Czy serwer proxy odwrotny Nginx jest bezpłatny?

Tak. Nginx o otwartym kodzie źródłowym obsługuje funkcję serwera proxy odwrotnego bez konieczności posiadania licencji komercyjnej.

Podsumowanie

Serwer proxy odwrotny Nginx w Ubuntu jest już skonfigurowany: przekazuje żądania do lokalnej aplikacji i obsługuje HTTPS.

Tę samą podstawową konfigurację można dostosować do aplikacji opartych na Node.js, Pythonie i innych technologiach wykorzystujących HTTP, zmieniając adres aplikacji backendowej w proxy_pass.

Przed wdrożeniem tego rozwiązania w środowisku produkcyjnym upewnij się, że aplikacja uruchamia się automatycznie, działa z odpowiednimi uprawnieniami oraz jest objęta wystarczającym monitoringiem i zabezpieczeniami.

Table of Content

Błąd 502 Bad Gateway w Nginx zwykle oznacza, że Nginx nie otrzymał prawidłowej odpowiedzi z

Błąd 504 Gateway Timeout występuje, gdy serwer działający jako brama lub serwer proxy nie otrzyma

Serwer MCP to program, który umożliwia aplikacjom AI łączenie się z zewnętrznymi narzędziami, usługami i

Build your next project with ZYNOO

From your first website to demanding applications, choose the resources and control you need.

Shared Hosting

Start your blog or business website with cPanel, LiteSpeed and CloudLinux.

VPS Hosting

Grow your websites and applications with NVMe storage, KVM virtualization and full root access.

Dedicated Servers

Power demanding projects with your own physical server, dedicated resources and control over your environment.

Przewijanie do góry