两台NGINX服务器能否串联实现通过域名路径访问容器内APP1
方案可行性结论
该双层NGINX串联的方案完全可落地,不需要调整整体架构,仅需对两台NGINX的配置做少量适配即可实现需求。
具体配置调整步骤
1. 物理机NGINX1配置修改
你需要在原有NGINX1的server块中新增匹配/app1的路由规则,将请求转发到容器暴露的NGINX2端口。假设你的docker-compose将NGINX2的80端口映射到了宿主机的8080端口(也可直接填写NGINX2容器的内部IP),示例配置如下:
server { listen 80; # 将server_name调整为你实际使用的域名 server_name mydomain.com; access_log logs/nginx_client_loc-access.log; error_log logs/nginx_client_loc-error.log; # 新增的app1转发规则 location /app1 { # 注意如果NGINX2中匹配的路径是大写/APP1,需要加重写规则统一路径大小写 rewrite ^/app1(.*)$ /APP1$1 break; # 此处端口替换为你实际映射的NGINX2的宿主机端口,也可直接写容器IP+80端口 proxy_pass http://127.0.0.1:8080; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 原有loki等其他规则保留 location /loki{ proxy_pass http://172.29.161.227:3100; } # 其余原有配置保持不变 }
2. 容器内NGINX2配置调整
当前你的NGINX2配置已经匹配/APP1路径并转发到内部APP1服务,仅需确认两个点即可:
- 确保
/APP1的路径大小写和NGINX1转发过来的路径一致,如果不想用重写规则,可直接将NGINX2的location改为location /app1 - 确保docker-compose中NGINX2和APP1服务处于同一个自定义网络,docker内置DNS
127.0.0.11可以正常解析到APP1服务的内部IP
验证步骤
配置修改完成后,依次重载两台NGINX的配置:
- 物理机NGINX执行
nginx -s reload - 容器内NGINX执行
docker exec -it <nginx2容器名> nginx -s reload
之后直接访问mydomain.com/app1即可正常访问到容器内的APP1服务。
内容的提问来源于stack exchange,提问作者Carex
相关产品推荐
相关产品推荐

