Ich benutze jwilder/nginx-proxy, um einen Reverse-Proxy zu machen. Ich versuche, http://localhost:8000/api
zu einem bestimmten PHP-Dienst umzuleiten.Mit JWilder Nginx-Proxy, wie eine Unterverzeichnis-URL zu einem bestimmten Container proxypass?
Die Verzeichnisstruktur:
.
+-- docker-compose.yml
+-- nginx
+-- nodejs
| +-- index.js
| +-- …
+-- php
| +-- api
Docker-compose.yml:
version: "3.1"
services:
nginx-proxy:
image: jwilder/nginx-proxy:alpine
ports:
- "8000:80"
volumes:
- ./php:/srv/www
- /var/run/docker.sock:/tmp/docker.sock:ro
nodejs:
image: node:alpine
environment:
- NODE_ENV=production
- VIRTUAL_HOST=localhost
- VIRTUAL_PORT=8080
expose:
- "8080"
working_dir: /home/app
restart: always
volumes:
- ./nodejs:/home/app
command: ["node", "index.js"]
php:
image: php:apache
environment:
- VIRTUAL_HOST=localhost
volumes:
- ./php:/var/www/html
Dies funktioniert gut für die nodejs
Service.
Jetzt möchte ich Anrufe an http://localhost:8000/api
zum php
Dienst umleiten. Ich stelle mir vor, dass ich in die nginx conf
etwas wie hinzufügen:
server {
location /api {
proxy_pass http://php:80/api;
proxy_set_header Host $host;
}
}
This feature is not built into the lib. Also, wie kann ich das erreichen?
Könnten Sie bitte ein Beispiel zeigen, wie/wo ich den benutzerdefinierten Header einstellen könnte, bitte? –
@francoisromain Siehe mein Update – Robert
Danke. Durch das Ändern von DNS wird die portable Logik von Docker entfernt. Das Ändern von Headern in jeder Anforderung ist ebenfalls nicht leicht. Letztendlich verkompliziert jwilder/nginx-proxys im Vergleich zu der einfachen nginx-Konfiguration in meiner vorherigen Frage wirklich ... Ich muss darüber nachdenken –