我有2个API和一个在Docker容器中工作的前端。它们都可以通过docker-compose创建,并且我有一个Nginx反向代理,它应该应使用其主机名(即api-1.my-project.localhost
)路由到它们。实际上,我已经完成了该过程,但是像今天早晨一样,每隔一段时间,使用这些主机名访问它时,我就会得到“不存在的域”或“我们找不到该站点”。
我不认为docker-compose.yml
这么重要,但是我在这里包括了它:
version: "3.2"
services:
api-1:
# Runs on port 5000
image: my-companies-docker-registry.api-1
api-2:
# Runs on port 5000
image: my-companies-docker-registry.api-2
main-front-end:
# Runs on port 3000
image: my-companies-docker-registry.main-front-end
my-project:
image: nginx
depends_on:
- api-1
- api-2
- main-front-end
ports:
- 80:80
volumes:
- type: bind
read_only: true
source: ./nginx
target: /etc/nginx
我的nginx配置看起来像这样:
events {}
http {
# Api 1
upstream api-1{
server api-1:5000;
}
server {
listen 80;
server_name api-1.my-project.localhost;
location / {
proxy_pass http://api-1;
}
}
# Api 2
upstream api-2 {
server api-2:5000;
}
server {
listen 80;
server_name api-2.my-project.localhost;
location / {
proxy_pass http://api-2;
}
}
# Main Front end
upstream main-front-end {
server main-front-end:3000;
}
server {
listen 80 default_server deferred;
server_name my-project.localhost www.my-project.localhost;
location / {
proxy_pass http://main-front-end;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
}
这样做的目的是使我可以使用http://my-project.localhost
访问网站,并使用api-1.my-project.localhost
和api-2.my-project.localhost
访问API。通过访问listen 80 default_server deferred
获得http://localhost
的同时,我可以访问nginx,这使我可以看到我的前端站点。因此docker-compose
已正确绑定端口。
在过去的某个时候,我已经能够使用my-project.localhost
后缀访问这些站点,但是现在情况不再如此。 This site建议为每个站点添加一个主机条目,我以前不记得这样做,因为有很多站点,这会花费一段时间,但是有可能我这样做了,现在将它们删除了。我也知道Nginx不是docker,所以我不知道这些主机名是如何提取并添加到我的计算机主机解析过程中的。
这怎么办?以前而不是现在呢?以及如何在不进行手动主机文件更改的情况下使设置生效?