记录一些常用的函数和瞎折腾的过程……

通过nginx容器反向代理访问另一个filebrowser容器

提醒:本文最后更新于 1270 天前,文中所描述的信息可能已发生改变,请谨慎使用。

使用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直接进行访问了。