Proyek: Reverse Proxy Multi-Service
Satu pintu nginx di depan dua service Python yang identik — pola dasar microservice: klien hanya mengenal satu alamat, routing path memutuskan service mana yang melayani, dan service backend tidak pernah mempublikasikan portnya ke luar jaringan Compose.
Topologi #
text
klien ──> proxy (nginx, port 8080 host)
├── /a/* ──> service-a:8080 (biru) ┐ hanya di dalam
└── /b/* ──> service-b:8080 (hijau) ┘ jaringan ComposeStruktur Berkas #
| Berkas | Peran |
|---|---|
compose.yaml | Service proxy, service-a, service-b |
nginx/nginx.conf | Konfigurasi utama nginx: upstream + routing path |
services/service-a/Dockerfile | Image service-a (python:3.12-alpine) |
services/service-a/server.py | HTTP server backend |
services/service-b/Dockerfile | Image service-b (identik, beda ENV) |
services/service-b/server.py | HTTP server backend (byte-identik) |
README.md | Dokumen ini |
Menjalankan #
bash
docker compose up -d --buildMenguji Routing #
bash
curl -s http://localhost:8080/ # indeks routing dari nginx
curl -s http://localhost:8080/a/halo # dijawab service-a
curl -s http://localhost:8080/b/halo # dijawab service-b
curl -s -i http://localhost:8080/c/halo # 404: tidak ada lokasi /c/Perhatikan field path pada respons: /a/halo tiba di backend sebagai
/halo — prefix dibuang oleh trailing slash pada proxy_pass.
Menguji Kegagalan Parsial #
Hentikan satu service; proxy dan service lainnya tetap hidup:
bash
docker compose stop service-b
curl -s -i http://localhost:8080/a/halo # tetap 200 dari service-a
curl -s -i http://localhost:8080/b/halo # 502 Bad Gateway dari nginx
docker compose start service-b # pulih otomatis
curl -s http://localhost:8080/b/halo # kembali 200Membersihkan #
bash
docker compose down