osnosn

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

体积很小的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, HostCustom: br0 都行。
    不知道区别,就选 Bridge 吧。
    • 使用 unraid 的 IP 访问这个 webserver。
      http://[unraid的ipv4]:3380/
      https://[unraid的ipv4]:33443/
  • 如果你需要 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。
    • 使用 docker 的 IP 访问这个 webserver。
      http://[docker的ipv4或ipv6]:3380/
      https://[docker的ipv4或ipv6]:33443/
  • 最后,
    把对应的IP (unraid 或 docker 的 IP),
    对应的端口 (3380 或 33443),
    在你的路由器上,ipv4映射出去,ipv6转发出去,就行了。
    参考【设置openwrt路由器的防火墙_允许从外网访问_ipv6服务_ipv4端口映射
  • 为了方便朋友访问,你可以再配置一个ddns。

效果

  • 比如你存了个文件 abc.rarisos/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

  • 找到这个nginx的docker,点击 Console 打开终端命令行。
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


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

posted on 2021-04-01 12:41  osnosn  阅读(1318)  评论(0编辑  收藏  举报