体积很小的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的路径,要找一个方便访问的路径映射。
配置环境
安装 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
, 并且设为"只读"。 - 以上几个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。
-
这时候,之前设置的 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出来。方便修改。
- 输入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" { }
- Restart,重启,sebp-lighttpd docker。
- 使用 docker 的 IPv6 访问这个 webserver。
http://[240?:??...??:51c]:8081/iso/
(可以访问了) - 修改路由器的防火墙配置。
参考【设置openwrt路由器的防火墙_允许从外网访问_ipv6服务_ipv4端口映射】- ipv4 端口映射,选取一个外网端口,映射到
192.168.1.22:8081
上。 - ipv6 转发规则,允许转发到 docker 的 ipv6 的 8081 口。
允许::????:????:????:51c/::ffff:ffff:ffff:ffff
的 8081/tcp 端口
- ipv4 端口映射,选取一个外网端口,映射到
- 为了方便朋友访问,你可以再配置一个 ipv4+ipv6 的 ddns。域名的ipv6指向docker的ipv6地址。
- 参考【Linux中获取本机的最新IPv6地址_更新ddns的脚本_获取openwrt的IP地址】中,"用openWRT中的ddns应用,为内网机器更新ipv6域名"的部分。
其他配置
- 参考【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.61mod_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的终端,
其他docker
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/16262198.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/.