apache - 反向代理 NGINX 前端以重定向 Dockerized Apache
问题描述
我来自这个。我是网络服务器的新手。我正在设置一个服务器(example.de),为多个 dockerized 应用程序提供服务。其中一个(app3)在 Apache 服务器后面运行(容器内的端口 80 映射到 8484)。我想使用 NGINX docker 容器将 url example.de/app3 重定向到 example.de:8484。其他两个应用程序也将被重定向到 example.de/app?。当我请求 url example.de:8484 它工作正常。但是,当我使用 example.de/app3 时,只会出现“It works”网页。
docker-compose 文件类似于:
version: '3'
services:
app3:
build:
context: app3
container_name: app3
app3_apache:
build:
context: app3/apache
container_name: app3_apache
ports:
- "8484:80"
volumes:
- vol_app3:/vol/app3
depends_on:
- app3
links:
- app3
nginx-proxy:
container_name: nginx
build:
context: nginx/
ports:
- "80:80"
depends_on:
- app3_apache
links:
- app3_apache
volumes:
- vol_nginx:/etc/nginx/conf.d
volumes:
vol_app3:
driver_opts:
type: none
device: /vol/app3
o: bind
vol_nginx:
driver_opts:
type: none
device: /vol/nginx
o: bind
NGINX default.conf 文件如下所示:
server {
listen 80;
listen [::]:80;
server_name example.de;
location /app3 {
proxy_pass http://app3_apache:80;
}
}
附加信息:它创建并运行容器。APACHE 容器中的网页在 NGINX 容器中使用 xxx.xxx.xxx.xxx:80 而不是 app3_apache:80 提供<h1>Bad Request (400)</h1>
。
我可以从 NGINX 容器访问 app3_apache 容器:
traceroute app3_apache
traceroute to app3_apache (xxx.xxx.xxx.xxx), 30 hops max, 60 byte packets
1 app3_apache.server_default (xxx.xxx.xxx.xxx) 0.351 ms 0.054 ms 0.035 ms
解决方案
您应该创建一个 docker 网络来链接容器。您可以在此处查看文档:https ://docs.docker.com/network/bridge/
创建网络后,您必须更改 nginx proxy_pass 的配置以指出 Web 服务器应用程序的内部 IP。
例如,我设置此网络配置以连接 3 个具有固定 IP 地址的容器。
version: '2'
services:
zabbix-server4:
container_name: zabbix-server4
image: zabbix/zabbix-server-mysql:alpine-4.0.5
networks:
zbx_net:
aliases:
- zabbix-server4
ipv4_address: 172.16.238.5
zabbix-web4:
container_name: zabbix-web4
image: zabbix/zabbix-web-nginx-mysql:alpine-4.0.5
ports:
- 127.0.0.1:11011:80
links:
- zabbix-server4
environment:
- ZBX_SERVER_HOST=172.16.238.5
networks:
zbx_net:
aliases:
- zabbix-web4
ipv4_address: 172.16.238.10
zabbix-agent4:
container_name: zabbix-agent4
image: zabbix/zabbix-agent:alpine-4.0.5
links:
- zabbix-server4
environment:
- ZBX_SERVER_HOST=172.16.238.5
networks:
zbx_net:
aliases:
- zabbix-agent4
ipv4_address: 172.16.238.15
networks:
zbx_net:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
gateway: 172.16.238.1
在您的情况下,您可以设置一个新网络并将新网络的 IP 分配给 nginx 和 web 容器,然后在 nginx proxy_pass 配置中,您应该放置 web 服务器的 IP。例如:
version: '3'
services:
app3:
build:
context: app3
container_name: app3
app3_apache:
build:
context: app3/apache
container_name: app3_apache
ports:
- "8484:80"
volumes:
- vol_app3:/vol/app3
depends_on:
- app3
links:
- app3
networks:
my_net:
aliases:
- zabbix-agent4
ipv4_address: 172.16.11.10
nginx-proxy:
container_name: nginx
build:
context: nginx/
ports:
- "80:80"
depends_on:
- app3_apache
links:
- app3_apache
volumes:
- vol_nginx:/etc/nginx/conf.d
networks:
my_net:
aliases:
- zabbix-agent4
ipv4_address: 172.16.11.20
volumes:
vol_app3:
driver_opts:
type: none
device: /vol/app3
o: bind
vol_nginx:
driver_opts:
type: none
device: /vol/nginx
o: bind
networks:
my_net:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "false"
ipam:
driver: default
config:
- subnet: 172.16.11.0/24
gateway: 172.16.11.1
并且代理通行证应该设置为
location /app3 {
proxy_pass http://172.16.11.10:80;
}
为了防止出现这个问题,我在主机上运行 nginx,而不是在容器中,然后我使用相同的方法在容器中拆分流量。在主机中安装 nginx 可以避免这种配置开销。
推荐阅读
- haskell - 寻找“自由定理”
- laravel - 如何在mysql和laravel中查询json对象数组
- android - Linphone SDK 不构建 android
- angular - 角度材质滑动切换捕捉状态
- java - 使用 Maven 获取 Eclipse 项目的依赖关系文档
- postgresql - 使用多列索引的 Postgres 聚类
- azure - 在 VM Window 10 上玩游戏,但出现 dx11 功能级别 10.0 请求问题
- python - itertools.product() 的减法等价物
- amazon-web-services - 从 AWS Beanstalk 访问 AWS Elasticsearch
- ios - 导航栏和状态栏颜色/不可见的 iOS