Démontrez comment ajouter plusieurs services derrière le proxy inverse. Cela montre la véritable puissance de la configuration de proxy automatisée pour l'architecture de microservices.
Créez un deuxième service de test (API backend) :
mkdir ~/api-service && cd ~/api-service
Créez un service API simple :
// api.js
const express = require('express');
const app = express();
const PORT = 4000;
app.get('/health', (req, res) => {
res.json({ status: 'healthy', service: 'api', version: '1.0.0' });
});
app.get('/users', (req, res) => {
res.json({
users: [
{ id: 1, name: 'John Doe' },
{ id: 2, name: 'Jane Smith' }
]
});
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`API service running on port ${PORT}`);
});
Créez un Dockerfile pour le service API :
FROM node:18-alpine
WORKDIR /app
RUN npm init -y && npm install express
COPY api.js .
EXPOSE 4000
CMD ["node", "api.js"]
Construisez et déployez le service API :
docker build -t api-service .
docker run -d --name api-backend \
--network nginx-proxy_nginx-reverse-proxy \
-e VIRTUAL_HOST=api.yourdomain.com \
-e LETSENCRYPT_HOST=api.yourdomain.com \
-e VIRTUAL_PORT=4000 \
api-service
Testez les deux services via le proxy :
curl -H "Host: app.yourdomain.com" http://localhost/
curl -H "Host: api.yourdomain.com" http://localhost/health
Vérifiez que les certificats SSL ont été générés automatiquement :
docker exec nginx-proxy ls -la /etc/nginx/certs/ | grep -E "(app|api).yourdomain.com"
Avertissement : Chaque nouveau service doit être sur le même réseau Docker que le proxy. Les services sur des réseaux différents ne seront pas découverts automatiquement.