通过nginx容器反向代理访问另一个filebrowser容器
使用docker安装好容器后,是可以直接通过“http://ip:端口”或“http://域名:端口”的形式进行访问的应用的,但每次要输入一个端口号,感觉比较麻烦。
我在服务器上安装了filebrowser,它是一个很好的文件管理工具,但是我很反感通过ip+端口号或域名+端口号的形式来进行访问,此时应用nginx的反向代理是一个不错的方法。
假如我的服务器ip是223.6.6.6,使用docker安装了一个filebrowser应用,指定了端口映射为:-p 8082:80,那么我访问这个filebrowser默认就是http://223.6.6.6:8082;多了一串端口。
如果你手上有一个域名,可以通过反向代理来实现域名的直接访问,并可以配置ssl,提高安全性,具体方法如下:
1、用自己的域名做A记录到223.6.6.6,例如我把域名docker.psay.cn解析到223.6.6.6;
2、在docker中拉取nginx镜像并创建容器nginx,端口映射为:-p 80:80和-p 443:443;
3、在docker中拉取filebrowser镜像并创建容器,容器名为filebrowser,端口映射为:-p 8082:80;
4、修改nginx的配置文件,进行反向代理,我的配置启用了ssl,请上传域名证书到对应位置。我配置的nginx文件具体如下:
server {
listen 80;
server_name docker.psay.cn;
return 301 https://docker.psay.cn$request_uri;
}
server {
listen 443 ssl http2;
server_name docker.psay.cn;
ssl_certificate /etc/nginx/SSL/docker.cer;
ssl_certificate_key /etc/nginx/SSL/docker.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache builtin:1000 shared:SSL:10m;
# Allow large attachments
client_max_body_size 128M;
location / {
# 需要代理的容器ip或容器别名,我设置的容器别名是filebrowser,也可以直接这个容器的ip:172.18.0.2
# http端口默认是80,和filebrowser映射端口相同,所以没加端口,如果filebrowser映射的是其它端口,如8089,那就写:http://filebrowser:8089
proxy_pass http://filebrowser;
# 反向代理buffer
proxy_buffering off;
proxy_buffer_size 128k;
proxy_buffers 100 128k;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
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;
proxy_cache_bypass $http_upgrade;
}
access_log /var/log/nginx/docker.psay.cn.log;
}
4、重启nginx容器,此时就可以通过https://docker.psay.cn直接进行访问了。