如何用Nginx配置同域名下不同路径对应多个Docker容器化应用
Nginx路径反向代理配置方案
前置准备
- 确认3个Docker容器的端口映射规则:启动容器时绑定本地回环地址端口,避免直接对外暴露,参考启动命令如下:
one应用容器:docker run -d -p 127.0.0.1:4001:容器内部服务端口 --name app-one 你的one应用镜像
同理将two应用绑定本地4002端口、three应用绑定本地4003端口,确认直接访问127.0.0.1:4001、127.0.0.1:4002、127.0.0.1:4003可正常打开对应应用。
修改Nginx配置
找到当前在用的Nginx站点配置文件,一般路径为/etc/nginx/sites-available/自定义站点配置名或/etc/nginx/conf.d/default.conf,在已有的server块中补充三个路径的反向代理规则即可,完整参考配置如下:
server { listen 80; server_name example.com; # 原有根路径落地页配置,直接保留即可 location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # example.com/one 对应应用配置 location /one { # 替换为你one应用容器映射的本地端口 proxy_pass http://127.0.0.1:4001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 如果是Vue等前端单页应用(使用history路由模式),需新增下方重写规则去掉路径前缀;Spring后端应用无需添加 # rewrite ^/one/(.*)$ /$1 break; } # example.com/two 对应应用配置 location /two { # 替换为你two应用容器映射的本地端口 proxy_pass http://127.0.0.1:4002; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 根据应用类型按需添加rewrite规则 } # example.com/three 对应应用配置 location /three { # 替换为你three应用容器映射的本地端口 proxy_pass http://127.0.0.1:4003; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 根据应用类型按需添加rewrite规则 } }
应用侧适配(必做,否则会出现静态资源/接口404问题)
- Vue类前端应用:修改打包配置的publicPath为对应路径前缀,示例vue.config.js配置:
对应two、three应用分别修改为module.exports = { publicPath: '/one/' }/two/、/three/即可 - Spring类后端应用:在application配置文件中添加上下文路径配置,示例yaml配置:
对应two、three应用分别修改为server: servlet: context-path: /one/two、/three即可
配置生效
- 执行
nginx -t校验配置语法是否正确,返回success提示说明配置无误 - 执行
systemctl reload nginx重载Nginx配置,无需重启服务即可生效
内容的提问来源于stack exchange,提问作者Gandalf
相关产品推荐
相关产品推荐

