nginx-demo/RAPORT.md
2025-11-11 13:50:58 +01:00

3.8 KiB

Konfiguracja reverse proxy na Linuxie z użyciem Nginx

Cel


1. Stworzenie prostych aplikacji webowych

Jako że nie jest to główna część projektu, a jedynie jego element to aplikacje są bardzo proste

Java

.NET Core

Do tej demonstracji została użyta wersja dotnet 8.0. Aplikacja składa się z dwóch części:

  • dotnet.csproj zawierającej ustawienia projektu
  • Program.cs zawiejącej kody który zostanie wykonany i uruchomi prosty serwer HTTP

Docker

Obydwie aplikacje uruchomione są w dockerze, rozwiązanie to ma kilka zalet

  • pozwala na łatwą reprodukcją środowiska na innej maszynie. Na przykład na innym komputerze, lub na maszynie wirtualnej w laboratorium
  • ułatwia późniejszą konfigurację z Nginx (nie trzeba konfigurować oddzielnych adresów ani portów, dla kilku równoległych aplikacji)
  • ułatwia uruchomienie całego środowiska (całość można uruchomić jedną komendą)

Każda aplikacja ma przygotowany plik Dockerfile, który jest wykorzystywany przez dockera do stworzenia kontera na podstawie kodu źródłowego. Na potrzeby projektu plik Dockerfile jest mocno uproszczony i w zasadzie tylko uruchamia polecenie dotnet run dla c#, oraz .... dla java.


2. Stworzenie prostej sieci konterów z aplikacjami

Ponieważ do uruchomienia aplikacji używamy dockera, najprostszym sposobem na utworzenie wspólnej podsieci dla aplikacji i nginx jest użycie docker compose.

Docker compose jest narzędziem do definiowania i uruchamianiania wilokontenerowej aplikacji w dockerze.

  • Normalnie w dockerze, uruchamia się kontener komendą dotnet run, ale gdy aplikacja potrzebuje kilku kontenerów (jak serwer, reverse proxy, ...) zarządzanie nimi staje się skomplikowane.
  • Docker compose pozwala zdefiniować wszystkie kontenery i jak one oddziałają ze sobą w jednym pliku i uruchomienie wszystkiego jedną komendą

3. Stworzenie instancji reverse proxy

Dodanie kontera

Utworzenie instancji dotnet przy użyciu dockera jest bardzo proste, wystarczy użyć poniższą komendę

docker run -v ./nginx/html:/usr/share/nginx/html:ro -p 80:80 nginx

Polecenie docker run uruchamia dany kontener, w tym przypadku docker run nginx uruchamia konter o nazwie nginx. Ponieważ na maszynie lokalnej nie ma kontenera o takiej nazwie, docker szuka tego kontenera w repozytorium hub.docker.com

Jednak sam kontener z serwerem niewiele nam daje, potrzebujemy jeszcze powiedzieć mu co ma serwować, i gdzie ma to serwować. W tym celu potrzemujemy kolejne dwie opcje do komendy

  • -v ./nginx/html:/usr/share/nginx/html:ro tworzy link między lokalnym folderem, a folderem w kontenerze
    • -v mówi dockerowi że chcemy zamontować jakiś folder/volume
    • ./nginx/html to lokalizacja na systemie hosta
    • /usr/share/nginx/html to lokalizacja na systemie kontenera
    • ro mówi dockerowi że folder jest w trybie tylko do odczytu
  • -p 80:80 piekierowuje port z kontenera do hosta
    • pierwsza wartość to numer portu hosta
    • druga wartość to numer portu kontenera

Podobnie wygląda konfiguracja kontenera w docker docker compsose

  • image to nazwa kontenera który chcemy uruchomić
  • volumes to odpowiednik -v
  • ports to odpowiednik -p

dokumentacja kontenera

Konfiguracja reverse proxy


4. Przekierowanie zapytań do odpowiednich aplikacji w zależności od nagłówków HTTP

Konfiguracja reverse proxy


5. Load Balancing

Utworzenie kopii kontenerów z aplikacjami

W ramach prezentacji działania reverse proxy kilka instancji tej samej aplikacja zostanie uruchomione na tej samej maszynie, w ramach podsieci dockera można o nich myśleć jako osobne maszyny wirtualne o osobnych adresach ip

Konfiguracja reverse proxy


6. Rate Limiting

Konfiguracja reverse proxy