VPS 迁移与性能压榨指南(Debian 13 + XanMod + 443 端口复用)
内容提要
记录将VPS从Ubuntu迁移至Debian 13并降配至512MB内存的优化过程:升级XanMod内核启用BBRv3,通过zswap、MGLRU、KSM缓解内存压力;用Nginx stream模块按SNI复用443端口,统一HTTPS、SSH与代理入口,仅开放80/443;配合UFW防火墙、Cloudflare DNS验证的泛域名证书及自动续期钩子,并给出Hysteria、TUIC、Filebrowser等配置模板。
延伸解读
降配至512MB内存的优化思路
作者将VPS从1GB内存降配至512MB,并运行备份代理和微信公众号后台。为缓解内存压力,启用了zswap内存压缩、MGLRU多代LRU和KSM内存页合并,并通过crontab的@reboot任务持久化这些参数。这些措施旨在减少OOM风险,但512MB仍属紧张,适合轻量级任务。
443端口复用与安全收益
利用Nginx stream模块的SNI预读功能,将HTTPS、SSH和代理服务统一到443端口,未知流量回退到SSH。这样防火墙只需开放80/443,减少了暴露端口和扫描噪音,同时SSH不再直接暴露在22端口,提升了安全性。配置中使用了reuseport和ssl_preread。
证书管理与自动续期
使用Let's Encrypt的DNS验证方式申请泛域名证书,通过Cloudflare插件自动续期。续期后通过post_hook重载Nginx并重启使用证书的容器,如Hysteria、TUIC等。这确保了证书更新后服务能及时加载新证书,避免中断。
应用配置模板的参考价值
文章提供了Hysteria v1/v2、TUIC v5和Filebrowser的Docker Compose及配置文件模板,包括端口映射、证书路径和认证设置。这些模板旨在为下次迁移提供具体参考,减少重复配置工作,但需根据实际域名和密码调整。
Q&A
为什么要把VPS从Ubuntu迁移到Debian 13并降配到512MB内存?
因为旧VPS(1GB内存)大部分时间闲置,博客已迁移到Cloudflare Pages,所以降配到512MB内存的套餐以节省成本。降配后VPS主要运行备份代理和半休眠的微信公众号后台。
在512MB内存的VPS上,如何通过内核调优来缓解内存压力?
升级到XanMod Edge内核(需x86-64-v3支持),并启用zswap、MGLRU和KSM。具体通过crontab @reboot设置:echo 7 > /sys/kernel/mm/lru_gen/enabled启用MGLRU,echo 1 > /sys/kernel/mm/ksm/run启用KSM,echo Y > /sys/module/zswap/parameters/shrinker_enabled启用zswap shrinker。同时使用lzo算法的zswap和1GB物理Swap文件作为后备。
如何用Nginx的stream模块实现443端口复用,让HTTPS、SSH和代理共享一个入口?
在Nginx的stream块中,使用ssl_preread根据SNI将流量路由到不同后端:api.ferstar.org转发到本地8444,fm.ferstar.org转发到本地8445,未知域名默认转发到本地22(SSH)。监听443端口并启用reuseport和ssl_preread。这样防火墙只需开放80/443,SSH不直接暴露,减少扫描噪音。
迁移后UFW防火墙应该如何配置?
使用UFW设置默认拒绝入站、允许出站,仅开放80/tcp、443/tcp、443/udp以及代理服务所需的18443:18445/udp。关闭入站22端口,SSH通过443的stream回退处理。
如何为泛域名证书配置自动续期,并在续期后重启相关服务?
使用Let's Encrypt的dns-cloudflare插件进行DNS验证,凭证文件为/root/certbot-creds.ini。在续期配置/etc/letsencrypt/renewal/ferstar.org.conf中添加post_hook:systemctl reload nginx && docker restart hysteria hysteria2 tuic-server,以在证书更新后重载Nginx并重启使用证书的容器。
文章提供了哪些应用的Docker配置模板?
提供了Hysteria v1、Hysteria v2、TUIC v5和Filebrowser的docker-compose.yml及配置文件模板,包括端口映射、证书路径、认证方式等具体设置。