我在 docker-compose.yml 中设置了一个由 3 个容器组成的网络。 2 个容器是 Web 应用程序,第三个容器是反向代理。所有 3 个容器都运行 nginx。 这是反向代理的 nginx.conf:
events {}
http {
server {
listen 8090;
server_name localhost;
location / {
proxy_pass http://myappui:8080;
}
location /admin/ {
proxy_pass http://myappadmin:8081/;
# this works proxy_pass http://microsoft.com/;
}
}
}
问题在于位置 /admin/ 的 proxy_pass 以某种方式将调用路由到第一个容器作为 http://myappui:8080/admin,而不是传递到第二个容器作为 http://myappadmin:8081/。如果对于位置 /admin/,我将 myappadmin:8081 替换为 microsoft.com,则它可以正常工作,并且呼叫将正确路由到 microsoft.com。
如果我使用自动分配的主机端口调用第二个容器 myappadmin,它将正确打开 myappadmin 应用程序。
这是我的 docker-compose:
version: '3.4'
services:
myappui:
build:
dockerfile: ./Docker/Dockerfile.ui
tty: true
container_name: myappui
ports:
- "8080"
networks:
- webnet
myappadmin:
build:
dockerfile: ./Docker/Dockerfile.admin
tty: true
container_name: myappadmin
ports:
- "8081"
networks:
- webnet
nginx:
image: nginx:latest
tty: true
container_name: myappreverseproxy
ports:
- "8090:8090"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
networks:
- webnet
networks:
webnet :
driver: bridge
问题原来与在子文件夹中运行管理应用程序有关。这是在 Blazor Web assembly 应用程序中设置正确的应用程序路径的问题。反向代理没有问题。