osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

体积很小的lighttpd_docker_在unraid中的配置

转载注明来源: 本文链接 来自osnosn的博客,写于 2022-05-12.

当需要传个大文件给朋友的时候,可选办法挺多,但都依赖第三方。
比如,发邮件(大文件作为附件),用xx网盘传递,用qq离线文件,群文件,微信直接发送。

家里的宽带已经有公网ipv6了。如果你有公网ipv4更好。
现在多一个选择:把文件放家里,共享出去,让朋友方便的时候自己下载。
这也有许多方案,比如装个nextcloud之类的云盘。装个Linux自己配置一个webserver。

这里介绍一另个方案。使用docker,快速搭建一个webserver。web的路径指定为unraid的某一个共享文件夹。
你的 unraid 的 docker 中,有个体积很小的 lighttpd ,配置也很简单,安全性挺好。
(镜像包4.4MB,安装完占9.1MB。)

如果你用的不是unraid。但能装docker。此文也能参考。
只是web的路径,要找一个方便访问的路径映射。

配置环境

  • unraid 6.9.2。
  • SHARE 中有一个 isos 的共享目录。如果没有,就自己创建一个。
  • isos 目录中,有个子目录 iso, 如果没有,自己创建一个目录。

安装 docker 镜像 sebp/lighttpd

  • 在 unraid 的 APPS 中搜索 lighttpd。能搜到一款。
  • 点击 Install 安装。
    安装时修改一下网站的端口,比如 http端口 改为 8081,防止和已有的其他应用冲突。
    这个docker的lighttpd,其实没有配置https。这里设置一下,是为了以后使用。
    说明/描述什么的,自己看着修改。
  • config directory, 需要修改一下。否则 lighttpd 会找不到缺省配置文件。
    不需要删除,只需把 Container Path: 改为 /etc/lighttpd22 就行了。(改一个不存在的目录)。
  • 增加一个目录映射,把 /mnt/user/isos/iso 映射到 lighttpd-docker 中 /var/www/localhost/htdocs/iso , 并且设为"只读"。
    • Default Value: 也可以"留空"
  • 以上几个docker的设置,如果安装的时候,忘记设置。安装完成之后,再修改,也可以。效果一样,没有影响。
  • 安装,配置,完成。可以使用了。
    用浏览器访问 http://[你的unraid的IPv4]:8081/iso/ 就能看到,403 Forbidden
    用浏览器访问 http://[你的unraid的IPv4]:8081/iso/test.iso 就能把在 iso目录中的 test.iso 文件下载下来。
  • 如果你有公网IPv4的话,在你的路由器上,设置 IPv4 的端口映射。
    就可以从外网下载需要的文件了。
    参考【设置openwrt路由器的防火墙_允许从外网访问_ipv6服务_ipv4端口映射
  • 为了方便朋友访问,你可以再配置一个ipv4 的 ddns。域名的ipv4指向路由器的公网ipv4地址。
  • ipv6的直接访问lighttpd,暂时不行。
    如果你的内网有另一台机器,装有nginx,能被ipv6访问。那就在这台机器上,做一个反向代理即可。就不用配置lighttpd工作在ipv6上了。
    location /iso/ { proxy_pass http://[你的unraid的IPv4]:8081; }
    通过ipv4或ipv6访问装有nginx的那台机器,反代到lighttpd,实现访问/iso/目录。
    另起段落描述,见后面的内容

解决 IPv6 的直接访问

  • 在 docker 管理界面,找到这个 sebp-lighttpd ,编辑它。
    点击 右上角 的 BASIC VIEW 变为 ADVANCED VIEW

  • Network Type: 选择 Custom: br0
    指定一个内网的 IPv4 地址,比如 192.168.1.22。使用一个内网中,没有使用的IP,避开unraid,路由器的IP。
    高级视图编辑中,Extra Parameters:加入参数。增加在后面,原有的参数保留,不删除。多个参数之间,用空格隔开。
    --sysctl net.ipv6.conf.all.disable_ipv6=0 --sysctl net.ipv6.conf.eth0.use_tempaddr=2
    这样,这个docker就会获得一个内网的ipv6,和一个eui64的公网ipv6。

  • IPv4 就是你指定的 192.168.1.22
    还要把这个 IPv6 找出来。

  • 这时候,之前设置的 8081, 8082 端口,就无效了。lighttpd默认配置是用 80, 443。
    使用 docker 的 IP 访问这个 webserver。
    http://192.168.1.22:80/iso/
    http://[240?:??...??:51c]:80/iso/ (不能访问,lighttpd默认没开ipv6)
    lighttpd 默认的 https 没开。

  • 需要修改 lighttpd 的配置,让它工作在 ipv6 上。

让 lighttpd 工作在 ipv6,顺便换个工作端口,解决ipv6的外网访问时,运营商对端口的封禁

  • 首先,进入unraid的终端,把lighttpd的缺省配置文件copy出来。方便修改。
    • 这个image中没有用来恢复缺省配置文件的脚本。
    • linuxserver/nginx的那个image, 就有启动脚本,检查并恢复缺省配置文件。
  • 输入4个命令。
    docker cp -a sebp-lighttpd:/etc/lighttpd ./
    cp lighttpd/* /mnt/user/appdata/lighttpd/config/
    chown nobody.users /mnt/user/appdata/lighttpd/config/*
    rm -rf ./lighttpd/
  • 修改docker 的设置,把 config directory, 改回来。
    Container Path: 改回 /etc/lighttpd 就行了。
  • lighttpd 官网文档 IPv6-Config
    修改文件 /mnt/user/appdata/lighttpd/config/lighttpd.conf
    可以在 unraid 的终端中,使用 vim 编辑。
    (也可以在docker的终端中,用vi编辑/etc/lighttpd/lighttpd.conf 是同一个文件)。
    修改,或加入两行,
    server.port = 8081
    $SERVER["socket"] == "[::]:8081" { }

其他配置

  • 参考【lighttpd 官方文档
    lighttpd2 文档
  • 自己修改 unraid 中 /mnt/user/appdata/lighttpd/config/ligittpd.conf
    (也可以在docker的终端中,用vi编辑/etc/lighttpd/lighttpd.conf 是同一个文件)
  • 比如,
    • 配置lighttpd开启ssl,即开启https访问。
    • 配置 启用 gzip 压缩。
    • 配置 https 的 http/2.0。
    • basic auth 的页面认证。
    • 虚拟目录,alias目录。
    • 允许列出目录内容。
    • 似乎不能隐藏版本信息,除非修改源码。
  • 然后重启 lighttpd 的 docker。

lighttpd 工作在 nginx 后端

  • nginx 的配置
location /iso23/ {
   allow all;
   proxy_pass        http://192.168.1.22:8081;   # lighttpd所在的IP和端口
   proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header  Host $http_host;
   proxy_pass_header Authorization;
}
  • lighttpd.conf 中,mod_alias,mod_access,mod_auth,mod_accesslog,mod_extforward 检查这几项modules加载了。
    • 其中mod_extforward在 >= v1.4.61 没有顺序要求。
      在 < v1.4.61 mod_extforward要在mod_accesslog后面。
  • 配置例子:
server.port          = 8081
$SERVER["socket"] == "[::]:8081" { }   # 全局配置了,这里头就不用重复配置了
extforward.forwarder = ("192.168.1.10" => "trust")  # 获取用户的真实IP
alias.url += ("/iso23/" => "/other/目录/", )       # alias目录,虚拟目录
$HTTP["url"] =~ "^\/iso23\/"{
  dir-listing.activate      = "enable"            # 允许列出目录
  dir-listing.encoding = "utf-8"    # 解决中文文件名的显示问题
  accesslog.filename = "/var/www/localhost/htdocs/logs/iso23-access.log"
  server.errorlog = "/var/www/localhost/htdocs/logs/iso23-error.log"
  #用户认证
  auth.debug = 0
  auth.backend = "htpasswd"
  auth.backend.htpasswd.userfile = "/etc/lighttpd/iso23.htpasswd"
  auth.require = ( "" =>
                      ( "method" => "basic",
                        "realm" => "ios23",
                        "require" => "valid-user"
                      )
  )
}
  • 其中 iso23.htpasswd文件,要用 htpasswd 命令生成。
  • 如果 nginx 已经配置了 https的h2,已经启用了gzip。lighttpd就不用配置了。
  • 如果要让lighttpd显示的文件时间从UTC改为+0800。
    • 进入docker的终端,apk add --no-cache dzdata; cp /usr/share/zoneinfo/PRC /etc/localtime; echo PRC > /etc/timezone;
      此docker的大小,涨到 13.6MB。

其他docker


转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/16262198.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/
.

posted on 2022-05-12 22:41  osnosn  阅读(658)  评论(0编辑  收藏  举报