體積很小的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
- 在 unraid 的 APPS 中搜索
nginx
。能搜到兩款。
linuxserver 只有50多MB。另一款 Binhex 有200多MB,體積有點大。 - 安裝 linuxserver 的版,只有50多MB。
安裝時修改一下網站的端口,把80,443改為別的口,防止和已有的其他應用沖突。比如改為880,8443。
說明/描述什么的,自己看着修改。
其他的暫時默認,后續可以隨時更改。
配置 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)- 如果你的unraid的ipv6已經是eui64。
Network Type:
選擇Bridge
,Host
或Custom: br0
都行。
不知道區別,就選Bridge
吧。- 使用 unraid 的 IP 訪問這個 webserver。
http://[unraid的ipv4或ipv6]:3380/
https://[unraid的ipv4或ipv6]:33443/
- 使用 unraid 的 IP 訪問這個 webserver。
- 如果你的unraid的ipv6不是eui64。而你又不知道怎么設置。
那,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/
- 使用 docker 的 IP 訪問這個 webserver。
- 最后,
把對應的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
- 找到這個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做前端轉發,也很好。
其他docker
- 有一個nginx+php-fpm的替代,鏡像包更小(12MB),
docker: spiralscout/roadrunner , github: spiral/roadrunner - 純web: sebp/lighttpd 鏡像包4MB
- 純web: manunkind/tinyhttpd 鏡像包720KB