gpt4 book ai didi

docker - 将HTTP请求从Nginx映射到Docker

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

我有运行在Docker容器中的Web应用程序的不同版本。 Nginx正在我的主机上运行。
是否可以借助子域(例如v1.myapp.io,v2.myapp.io)访问我的Web应用程序的所需部署版本,而无需重新配置和重新启动Nginx?
我还想以相同的方式访问将来的版本吗?

谁能告诉我是否有办法实现?

请考虑我是Docker / nginx世界的新手。

提前致谢。

最佳答案

是的,尽管可以做到,但是仅使用docker很难实现。 kubernetes将使这一过程变得非常容易,并且像dns这样的所有东西都可以直接使用,提供服务映射。我将同时包括docker和kubernetes方法:

Docker方法:
初稿将如下所示,在nginx server_name中使用正则表达式,并使用模式设置docker容器名称。为不同的容器创建一个/ etc / hosts条目,例如:
172.16.0.1 v1.docker.container
172.16.0.2 v2.docker.container

Nginx服务器配置看起来像:

server {
listen 80;

server_name "~^(?<ns>[a-z]+.+)\.myapp\.io";

resolver 127.0.0.1:53 valid=30s;

# make sure $ns.docker.container is resolved to container IP
set $proxyserver "$ns.docker.container";

location / {
try_files $uri @clusterproxy;
}

location @clusterproxy {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-IP $clientip;
proxy_set_header X-Forwarded-For $clientip;
proxy_set_header X-Real-IP $clientip;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-FORWARDED-PROTO 80;
proxy_pass http://$proxyserver:80;
}
}

Kubernetes方法:
在 namespace 中为不同的版本创建不同的服务和部署。可以说命名空间是“app-namespace”。服务名称不言自明:
APP版本v1:v1-app-service
APP版本v2:v2-app-service

为了使Nginx更灵活,您可以将服务名称作为 namespace 添加到 $proxyserver
Nginx规则:
server {
listen 80;

server_name "~^(?<version>[a-z]+.+)\.myapp\.io";

# you can replace this with kubernetes dns server IP
resolver 127.0.0.1:53 valid=30s;

# make sure $ns.docker.container is resolved to container IP
set $proxyserver "$version.app-namespace.svc.kubernetes";

location / {
try_files $uri @clusterproxy;
}

location @clusterproxy {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-IP $clientip;
proxy_set_header X-Forwarded-For $clientip;
proxy_set_header X-Real-IP $clientip;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-FORWARDED-PROTO 80;
proxy_pass http://$proxyserver:80;
}
}

关于docker - 将HTTP请求从Nginx映射到Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56067251/

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