体积很小的nginx_php7.4_docker_在unraid中的配置
转载注明来源: 本文链接 来自osnosn的博客,写于 2021-04-01.
当需要传个大文件给朋友的时候,可选办法挺多,但都依赖第三方。
比如,发邮件(大文件作为附件),用xx网盘传递,用qq离线文件,群文件,微信直接发送。
家里的宽带已经有公网ipv6了。如果你有公网ipv4更好。
现在多一个选择:把文件放家里,共享出去,让朋友方便的时候自己下载。
这也有许多方案,比如装个nextcloud之类的云盘。装个Linux自己配置一个webserver。
这里介绍一个方案。使用docker,快速搭建一个webserver。web的路径指定为unraid的某一个共享文件夹。
你的 unraid 的 docker 中,有个体积很小的 nginx+php7.4 ,配置也很简单,安全性还行。
(镜像包56MB,安装完占169MB。)
如果你用的不是unraid。但能装docker。此文也能参考。
只是web的路径,要找一个方便访问的路径映射。
安装 docker 镜像 Linuxserver/nginx
参考【体积很小的lighttpd_docker_在unraid中的配置(图文)】
- 在 unraid 的 APPS 中搜索
nginx
。能搜到两款。
linuxserver 只有50多MB。另一款 Binhex 有200多MB,体积有点大。
- 安装 linuxserver 的版,只有50多MB。
安装时修改一下网站的端口,把80,443改为别的口,防止和已有的其他应用冲突。比如改为3380,33443。
说明/描述什么的,自己看着修改。
其他的暂时默认,后续可以随时更改。
配置 docker 镜像 Linuxserver/nginx
- 在 docker 管理界面,找到这个 Linuxserver/nginx ,编辑它。
- 在最下面添加一个路径映射,点击
+ Add another Path, Port, Variable, Label or Device
选择Config Type:
=Path
Name:
随意
Container Path:
容器内路径为/config/www/share
, (nginx的网站root为/config/www
)
Host Path:
容器外部实际路径为/mnt/user/isos/share
, (unraid共享文件夹为/mnt/user/isos
)
Default Value:
留空
Access Mode:
=Read Only
只读
Description:
随意
Host Port 1:
= 3380 (Container Port: 80)Host Port 2:
= 33443 (Container Port: 443)- 如果你不考虑使用 ipv6。
Network Type:
选择Bridge
,Host
或Custom: br0
都行。
不知道区别,就选Bridge
吧。- 使用 unraid 的 IP 访问这个 webserver。
http://[unraid的ipv4]:3380/
https://[unraid的ipv4]:33443/
- 使用 unraid 的 IP 访问这个 webserver。
- 如果你需要 ipv6 访问。
那,nginx 的 docker 的Network Type:
选择Custom: br0
。
高级视图编辑中,Extra Parameters:
加入参数
--sysctl net.ipv6.conf.all.disable_ipv6=0 --sysctl net.ipv6.conf.eth0.use_tempaddr=2
这样,这个docker就会获得一个内网的ipv6,和一个eui64的公网ipv6。
- 最后,
把对应的IP (unraid 或 docker 的 IP),
对应的端口 (3380 或 33443),
在你的路由器上,ipv4映射出去,ipv6转发出去,就行了。
参考【设置openwrt路由器的防火墙_允许从外网访问_ipv6服务_ipv4端口映射】 - 为了方便朋友访问,你可以再配置一个ddns。
效果
- 比如你存了个文件
abc.rar
在isos/share
,就可以通过
http://你的IP:端口1/share/abc.rar
下载到这个文件。
或https://你的IP:端口2/share/abc.rar
下载到这个文件。 - 你保存在 unraid 共享目录 isos/share 的文件,都可以通过这个docker提供的网站访问。并且支持php脚本。
- 安全性:最大隐患,就是支持php脚本文件。所以这个目录中,尽量不要放自己不知道的php文件。
如果你懂的话,直接修改nginx的配置,禁用php,就没问题了。 - 另外,这个网站还可以提供一个简单的密码保护。 通过给docker一个环境变量
FILE__PASSWORD
来设置。或者直接去修改nginx的配置文件。
给这个网站添加简单的账号保护 auth_basic
cd /config/nginx
htpasswd password.htpw myuser (回车后,输入密码)
vi site-confs/default
#在 location / { } 和 location ~ \.php$ { } 分别加入两行,
auth_basic "welcome my web";
auth_basic_user_file /config/nginx/password.htpw;
## 这是一个完整的例子的参考,没有全站设置账号。仅对share目录设置了账号保护。
server {
listen 80 default_server;
listen 443 ssl;
root /config/www;
index index.html index.htm index.php;
server_name _;
ssl_certificate /config/keys/cert.crt;
ssl_certificate_key /config/keys/cert.key;
client_max_body_size 0;
location /share {
auth_basic "my share";
auth_basic_user_file /config/nginx/password.htpw;
location ~ \.php(?:$|\/) { # 这个要写,否则php脚本没密码保护
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info if_not_empty;
include /etc/nginx/fastcgi_params;
}
}
location / {
try_files $uri $uri/ /index.html /index.php?$args =404;
}
location ~ \.php(?:$|\/) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# With php5-cgi alone:
fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_path_info if_not_empty;
include /etc/nginx/fastcgi_params;
}
}
- 输入
exit
关闭终端,重启restart
nginx的docker,即可。 - 这时候,访问这个网站,就需要输入账号密码了。
其他
- 再装个MySQL或者MariaDB的docker配合。用这个nginx建个网站,也是可以的。
我没这个需求,就不折腾了。 - 或者,再装个tomcat的docker,或者flask的docker。用这个nginx做前端转发,也很好。
- 如果这个nginx的docker在另一个nginx之后,为了能在access_log中看到真实IP。
修改:docker中的路径/config/nginx/nginx.conf
#自定义一个格式。其实就是在默认格式的最后,加上了http_x_forwarded_for
log_format combined_xForwarded
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#使用这个自定义格式
access_log /config/log/nginx/access.log combined_xForwarded;
其他docker
- 见【体积很小的lighttpd_docker_在unraid中的配置】
- 见【体积很小的vsftpd_pure-ftpd_docker_在unraid中的配置_支持TLS和ipv6】
- 有一个nginx+php-fpm的替代,镜像包更小(12MB),
docker: spiralscout/roadrunner , github: spiral/roadrunner - 仅web: sebp/lighttpd 1.4.61 像包4.4MB
仅web: gists/lighttpd 1.4.64 镜像包4.5MB - 仅web: kasmweb/nginx 1.10.0 镜像包11.6MB
仅web: bitnami/nginx 1.20.2 镜像包35MB
仅web: linuxserver/nginx 1.20.2 镜像包55.8MB
仅web: 官方/nginx 1.21.6 镜像包56MB - 仅web: hotio/caddy v2.5.1 镜像包42.7MB
仅web: jakewmeyer/caddy-docker v2.5.1 镜像包29MB
仅web: map3/caddy 0.619 镜像包9MB
仅web: stefanprodan/caddy 0.10.10 镜像包8MB
仅web: 官方/caddy 2.5.1 镜像包16MB - 仅web: manunkind/tinyhttpd v0.2-2 镜像包720KB
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/14605659.html 来自osnosn的博客.