100 lines
3.8 KiB
Markdown
100 lines
3.8 KiB
Markdown
# 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ę
|
||
|
||
```sh
|
||
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
|
||
|
||
- [[https://hub.docker.com/_/nginx]]
|
||
|
||
### 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
|