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:rotworzy link między lokalnym folderem, a folderem w kontenerze-vmówi dockerowi że chcemy zamontować jakiś folder/volume./nginx/htmlto lokalizacja na systemie hosta/usr/share/nginx/htmlto lokalizacja na systemie konteneraromówi dockerowi że folder jest w trybie tylko do odczytu
-p 80:80piekierowuje 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
imageto nazwa kontenera który chcemy uruchomićvolumesto odpowiednik-vportsto 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