Nginx反代Docker内部服务(以Wekan为例)

服务器上有很多 Docker 容器,它们没有设置端口映射,而是通过统一的前端 Nginx 程序反代。这样做的好处是在外部可以访问内部 Docker 服务,又不用浪费宝贵的外部端口。
原理
每个Docker
容器都有自己的主机名和 内部 IP,即使不设置外部端口映射,在内部分配的 IP 上也会有对应的端口监听。举例来说,我的主机上Wekan
容器基本信息如下:
container_name:wekan-app
ip:172.19.0.xxx
Network:network_group1(bridge)
操作另一个容器加入network_group1
网络组,在该容器内 ping Wekan 容器名:
之后尝试访问该容器的服务:
此时两个容器间可以互相通信。
操作
1.容器互通
首先准备一个 Nginx 容器,掠过不表。
之后将Nginx
容器加入到Wekan
容器的网络组中。使用Protainer
的话这一步非常简单,只需要选择对应的网络并点击Join network
即可:
为了验证容器间是否可以通信,可以手动 ping 一下 wekan 容器。
2.修改 Wekan 配置
编辑 Wekan 配置,将ROOT_URL
修改为外部使用的访问地址,例如 mywekan.test.com
。
3.修改 Nginx 配置
修改 Nginx 配置是为了增加访问地址监听及反代转发。
由于 Wekan 使用了websocket
通信,因此在配置文件中需要增加Upgrade
等字段:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name mywekan.test.com;
#access_log /dev/null;
#access_log /var/log/nginx/nginx.localhost.access.log main;
error_log /var/log/nginx/mywekan.test.com.error.log warn;
location / {
proxy_pass http://wekan-app:8080;
index index.html index.htm;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-For $remote_addr;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
}
其他字段按需添加即可。
完成后,重启 Nginx 容器,访问mywekan.test.com
即可看到效果。
你好,能写一篇将docker部署的wekan迁移到另一台服务器的文章吗?
我目前遇到了这个问题,安装官方文档一直没有成功!
先谢谢啦!