nas搭建web服务器
把一台退役的服务旧笔记本装上NAS系统,再让它跑起Web服务,服务这事我干过三次。服务第一次用群晖DS218j,服务第二次是服务自组的TrueNAS,最近一次干脆在绿联DXP4800上折腾。服务结论很直接:NAS搭Web服务器完全可行,服务但别指望它能扛住日均上万访问量。服务家用场景、服务小型展示页、服务内部测试环境,服务这才是服务它的主场。
硬件层面不需要太讲究。服务我那台DS218j是服务ARM架构,CPU弱得可怜,服务512MB内存,跑个静态页面加PHP-FPM,响应速度居然能接受。关键在于你选什么Web服务器软件。Apache太沉,Nginx轻量得多,群晖套件中心里直接有Nginx,装完改改配置文件就能用。TrueNAS那边更自由,用Jail或者Docker跑Nginx,资源隔离做得更干净。
具体操作上,群晖用户最省事。Web Station套件一装,默认就给你配好了Apache+PHP+MariaDB。但我不喜欢它的默认配置——端口80被DSM管理界面占着,得改成8080或者别的。虚拟主机设置里,文档根目录指向/volume1/web,把HTML文件扔进去,浏览器输入NAS的IP加端口号,页面就出来了。听起来简单,实际第一次弄的时候,我卡在权限问题上:Web Station默认用户是http,而/volume1/web目录属主是admin,得手动chmod 755,不然403错误看到你烦。
自组TrueNAS或者用Docker方案,灵活性高出一截。我现在的做法是:Docker里跑Nginx容器,映射宿主机的/ mnt / pool / web目录到容器内的/usr/share/nginx/html,再挂一个自定义的nginx.conf。这样升级Nginx版本不影响数据,备份也方便。有个坑得提:Docker容器的用户ID要和宿主机目录权限匹配,否则Nginx读不了文件。我通常直接给容器root权限跑,家用内网无所谓,但你要是暴露到公网,千万别这么干。
动态内容怎么办?PHP是最常见的需求。群晖Web Station里勾选PHP 7.4或8.0,再装个phpMyAdmin,WordPress就能跑起来。我试过在DS218j上装WordPress,首页加载要3秒多,后台操作卡顿明显。换到绿联DXP4800(Intel N100,8GB内存)后,同样配置流畅得多。所以结论是:ARM NAS跑静态页没问题,动态站点最好上x86。
数据库方面,MariaDB在NAS上表现稳定,但别开太多连接。我见过有人把NAS当生产数据库用,结果IO瓶颈直接把系统拖垮。SQLite更适合轻量场景,比如个人博客或者小型Wiki,零配置,文件级备份,省心。
外网访问是另一个话题。群晖的QuickConnect能穿透内网,但速度慢,而且不支持自定义域名。我的方案是:路由器上做端口转发,把公网IP的8080端口映射到NAS的80端口,再配合DDNS(群晖自带或者用Cloudflare API)。HTTPS证书用Let's Encrypt,群晖套件里可以自动续期。注意:80和443端口很多运营商封了,家用宽带基本别想,所以外部端口只能用8080、8443这类。
性能调优有几个实用点。Nginx的worker_processes设成CPU核心数,worker_connections给1024足够。开启gzip压缩,静态资源体积能降60%以上。缓存方面,expires头设30天,浏览器缓存能省不少带宽。我还会把NAS的机械硬盘换成SSD做Web根目录,随机读写提升明显,尤其是PHP session文件多的时候。
安全别马虎。NAS的Web服务一旦暴露公网,扫描器几分钟内就会找上门。我吃过亏:一次忘了改默认的phpMyAdmin路径,第二天日志里全是暴力破解记录。现在固定做法是:改默认端口、禁用目录列表、限制IP访问后台、定期看Nginx的access.log。Fail2ban在群晖上装起来麻烦,但值得折腾。
最后说个真实案例。朋友开设计工作室,用群晖DS920+搭了个作品展示站,放内网给客户看。Nginx+静态HTML+图片,同时10个人访问毫无压力。后来他想加个留言板,上了WordPress,结果三个人同时提交表单就卡死。换成SQLite+轻量PHP框架后恢复正常。所以NAS跑Web,关键在匹配场景——别拿它当阿里云用。