gpt4 book ai didi

docker - 如何通过代理访问Nginx Docker容器?

转载 作者:行者123 更新时间:2023-12-02 19:31:54 27 4
gpt4 key购买 nike

假设我有三个带有Nginx的Docker容器。它们的裸露端口分别映射到8080、8181和8282。我想在8080上配置将/ example01和/ example02代理到其他两个应用程序的服务器。这是我的配置文件:

server {

listen 80;
server_name localhost;

location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}

location /example01 {
proxy_pass http://localhost:8181/;
}

location /example02 {
proxy_pass http://localhost:8282/;
}
}

因此,如果我运行容器,则可以访问每个应用程序( http://localhost:8080http://localhost:8181http://localhost:8282)。

现在,我真的不明白为什么 http://localhost:8080/example01http://localhost:8080/example02无法正确重定向。相反,我收到502错误的网关错误。它与我的裸露端口和VIRTUAL_PORT有关吗?

提前致谢。

最佳答案

这是由于容器网络范围。这些容器的localhost分别位于每个容器内-而不是端口映射到的位置。而是:

$ ifconfig

在主机上找到本地IP地址并将流量代理到已映射端口的主机。

conf:
server {

listen 80;
server_name localhost;

location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}

location /example01 {
proxy_pass http://192.168.1.2:8181/;
}

location /example02 {
proxy_pass http://192.168.1.2:8282/;
}
}

其中 192.168.1.2是您自己的计算机本地IP地址。

另一种方法是链接那些容器,而不是通过本地主机代理-而是要在链接定义中提供的别名。如果您选择这种方法,我可以详细说明。

-使用链接方法进行编辑-

为了链接您的服务,您需要使用docker工具 docker-compose。假设您熟悉它的含义(底部的doc refs),则可以编写如下的撰写文件:
first-nginx:
build: first-nginx/
ports:
- 8080:80
links:
- second-nginx
- third-nginx

second-nginx:
build: second-nginx/
ports:
- 8081:80

third-nginx:
build: third-nginx/
ports:
- 8082:80

放在项目的根目录中,如下所示:
root
- first-nginx
+ nginx.conf
+ Dockerfile
+ some-other.files
- second-nginx
+ some.files
+ another-nginx.conf
+ Dockerfile
- third-nginx
+ some-nginx.conf
+ Dockerfile
+ docker-compose.yml

然后,您将配置“主要” nginx来利用创建的链接,如下所示:

conf:
server {

listen 80;

location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}

location /example01 {
proxy_pass http://second-nginx/;
}

location /example02 {
proxy_pass http://third-nginx/;
}
}

请务必询问是否不清楚。

links ref

compose ref

关于docker - 如何通过代理访问Nginx Docker容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50414496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com