the*_*tic 6 nginx containers elastic-beanstalk docker
我在 Amazon Elastic Beanstalk 上有一个多容器 docker 环境,其中包含以下Dockerrun.aws.json
文件:
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"name": "web",
"memoryReservation": 256,
"image": "my/nginx/repo/image",
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
"links": [
"api"
],
"essential": true
},
{
"name": "api",
"memoryReservation": 256,
"image": "my-api/repo",
"essential": true,
"portMappings": [
{
"hostPort": 3000,
"containerPort": 80
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
最终,我希望由 nginx 服务的节点应用程序将请求解析为来自链接容器的命名地址,因此在我的web
图像(节点应用程序)中,我想向http://api/some/resource
nginx发出请求并让 nginx 将其解析为 api 容器。
现在,由于 docker 由于指定的链接为 api 容器添加了一个主机条目,我希望 nginx 服务器从主机etc/hosts
文件中解析地址,但是正如我发现的那样,nginx 使用它自己的解析器。在稍微研究了这个问题之后,我发现在非 Elastic Beanstalk 多容器解决方案和用户定义的网络中,解析器将由 docker on 提供127.0.0.11
,但是因为目前无法在Dockerrun.aws.json
,我一直在寻找不同的解决方案。该links
可在容器内得到解决,ping
荷兰国际集团API不工作,但是,Nginx的它自己的事情出现了。
我也读过dnsmasq
,但是,我想在不安装此软件包的情况下运行它,我什至可以在这里选择吗?
无法强制 nginx 使用 /etc/hosts 中的条目。
但是,您可以在 nginx 配置中使用映射 { } 来告诉 nginx 如何将主机名转换为 IP。您需要一个脚本将 /etc/hosts 转换为可在地图中使用的格式,即hostname ip
vs ip hostname
。
这是一个示例地图:
map $container_hostname $container_ip {
default 127.0.0.1;
containerA X.X.X.X;
containerB Y.Y.Y.Y;
}
Run Code Online (Sandbox Code Playgroud)
稍后在配置文件中您可以执行以下操作:
server_name ~^(www\.)?(?<container_hostname>.+)$;
location / {
proxy_pass http://$container_ip:80;
}
Run Code Online (Sandbox Code Playgroud)
nginx 将匹配请求server_name
并将其存储在 $container_hostname 中:
http://nginx.org/en/docs/http/server_names.html#regex_names
然后它会在map中查找主机名,获取相应的IP并将其传递给proxy_pass。
有关地图的更多信息:http://nginx.org/en/docs/http/ngx_http_map_module.html
归档时间: |
|
查看次数: |
1394 次 |
最近记录: |