如何解决Nginx docker 容器的 Nginx proxy_pass 问题尝试获取 html
我已经实现了几个微服务、一个 Web 前端和一个 REST 后端服务器,我想通过反向代理“连接它们”以避免那些讨厌的 CORS 问题。
重要的是,这是我第一次使用 Nginx,当然,将其用作反向代理。因此,我认为使用官方的 nginx 镜像会对我有很大帮助。
我的 Dockerfile 有以下内容:
FROM nginx:1.19.7
COPY configuration files etc ...
而我的(针对问题进行了简化)docker-compose,看起来像这样:
version: "3.3"
services:
web_server:
build: ./frontend
container_name: web_server_container
ports:
- "5000:5000"
reverse_proxy:
build: ./proxy
container_name: nginx_reverse_proxy
ports:
- 8080:80
links:
- web_server
web_server
包含在端口 5000 中提供 html 文件的 Flask 网络服务器。在 /
中,它提供索引。
根据这个服务定义,我使用“docker-compose up --build”来启动它们。
我已进入正在运行的 reverse_proxy
容器,并更改了 nginx.conf
,添加了以下内容:
server {
listen 80 default_server;
server_name localhost;
access_log /var/log/nginx/proxy.log;
error_log /var/log/nginx/proxy_error.log;
location / {
proxy_pass http://web_server_container:5000/;
}
}
此后,我使用 nginx -t
(和 nginx -T
)和 service nginx reload
(并重新启动和 nginx -s reload ...以及网络上所说的所有内容检查配置以确保新配置已加载)。
我的问题是,当我从浏览器访问 http://localhost:8080/ 时,它转到“欢迎使用 nginx”页面,而不是“/”中的页面web_server_container。但是,从容器内部,如果我使用 curl http://webserver_container:5000
,它会正确地将我重定向到前端“/”中的页面。
另外,如果我将配置更改为:
server {
listen 80 default_server;
server_name localhost;
access_log /var/log/nginx/proxy.log;
error_log /var/log/nginx/proxy_error.log;
location /web {
proxy_pass http://web_server_container:5000/;
}
}
我希望,如果我在浏览器中访问 http://localhost:8080/web,它会将我重定向到 Web 服务器容器,但事实并非如此。但是,我可以毫无问题地从 http://localhost:5000 获取内容。此外,docker-compose 输出显示:
nginx_reverse_proxy | 2021/03/01 16:52:56 [error] 25#25: *64 open() "/usr/share/nginx/html/web" failed (2: No such file or directory),client: 172.19.0.1,server: localhost,request: "GET /web HTTP/1.1",host: "localhost:8080"
nginx_reverse_proxy | 2021/03/01 16:53:32 [error] 25#25: *66 open() "/usr/share/nginx/html/web" failed (2: No such file or directory),host: "localhost:8080"
因此,它看起来不是重定向,而是试图显示“web.html”。这很奇怪,因为正在执行“服务器”块(我知道这是因为日志名称的变化反映在实际文件中)。
在这两种情况下,日志都是空的,这也很奇怪(可能与构建映像的方式有关)。
我也尝试过 this answer,但没有成功。
有人知道会发生什么吗?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。