出于开发目的,我需要在 Docker 中启动一些用 Asp.net core WebApi 编写的应用程序。
撰写:
version: '3.7'
services:
nginx:
image: nginx:stable-alpine
ports:
- "127.0.0.1:81:80"
- "127.0.0.1:443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
restart: unless-stopped
container_name: nginx
extra_hosts:
- "host.docker.internal:host-gateway"
代理本身的配置位于./nginx/conf.d/test.conf路径下的文件中,填写如下:
server {
listen 127.0.0.1:80;
location /foo/ {
proxy_pass http://host.docker.internal:1002;
}
}
那些。我希望当我访问http://localhost:81/foo/swagger时可以看到我的服务的 swagger(位于 http://localhost:1002/swagger)。然而,相反,在 nginx 日志中我看到错误消息:
[error] 29#29: *1 open() "/usr/share/nginx/html/foo/swagger" failed (2: No such file or directory), client: 192.168.240.1, server: _, request: "GET /foo/swagger HTTP/1.1", host: "localhost"
但是,如果您不使用 /foo 前缀,而是仅使用重定向到根“/”,那么一切都会正常工作,并且我会看到大摇大摆的效果。告诉我设置有什么问题吗?
更新:
我尝试通过内部docker网络转发proxy_pass(在第一个comp文件中,创建一个网络并为正在运行的网络分配一个名称,在nginx中,连接到该网络并通过nginx代理内部网络。)最后,结果是相同的,如果您不使用 /foo 前缀并将其配置为 root,则一切正常。我正在寻求建议/想法。