2026年过半,服务器这块的坑,我算是一个一个踩过来了。6月17号这天复盘,想写点真正有用的。不是那种复制粘贴的教程,是这半年来,在几台破烂VPS上折腾出的真实体感。关键词就五个:nginx做文件服务器、服务器安装数据库、cf进不去服务器、web服务器日志怎么看、应用程序服务器安装。
为什么我坚持用Nginx当文件服务器,而不是一味上S3
云存储成本其实不低。上个月发现S3的出站流量账单有点肉疼,我回头看了一眼那台闲置的2核4G服务器,觉得这配置拿来当文件服务器有点浪费,但确实能省一笔。
Nginx做文件服务器,核心就两行配置。但网上那些文章总爱加一堆花里胡哨的防盗链、限速,其实对个人或小团队,最关键的是那两点:
- 根目录指向要严谨:
root /data/files;这行跟alias的区别,以前我搞混过一次,导致目录遍历漏洞没防住,页面直接暴露了上级目录,吓得连夜改权限。 - 索引文件关掉才安全:
autoindex off;是默认值,但有些人为了调试打开了,上线后忘了关,等于把家底亮给搜索引擎。上周我检查一个客户的站,发现图片全被爬了,就是因为这个。
值得一提的是,2026年Nginx实现文件服务器,配合Cloudflare的缓存,对热门文件能省掉90%的源站带宽。一个朋友用这招把每月100刀流量费压到了20刀,代价是偶尔缓存不一致,但他觉得值。
服务器安装数据库,MySQL 8.0还是MariaDB 11.4?
这个话题每年都有新争论。我的偏见是:新项目尽量避开MySQL 8.0的某些bug。今年我经历了两次MySQL 8.0在Ubuntu 24.04上的OOM崩溃,换成MariaDB之后安稳很多。
服务器安装数据库,别再像十年前那样下载源码编译了。时代变了,直接上Docker或者包管理器。关键是要盯住两点:
- 内存占用控制:对于1G内存的小鸡,默认配置的innodb_buffer_pool_size就是杀手。一定要手动调低到128M或256M,否则跑两天swap就爆了。
- 字符集统一:2026年了还出现乱码问题,说出去丢人。安装后第一件事,确认
utf8mb4已经是全球默认。
我踩过的坑是:服务器安装数据库之后,忘了开防火墙端口,导致应用连不上。排查了俩小时,结果是iptables在重启后恢复了默认策略。这个教训让我现在安装数据库后,三分钟内必跑一次端口连通性测试脚本。
连CF进不去服务器?先检查这三点
Cloudflare(CF)确实是好东西,但有时候就成了拦路虎。尤其是当你SSH连服务器时,看到"Connection timed out",而网页却正常,第一反应别怪机房,先查CF。
cf进不去服务器的场景,99%是这三种情况:
- 开启了CF的Proxy模式(橙色云朵):CF默认会代理HTTP/HTTPS流量,但SSH等非Web流量会被拦截。解决方案很简单:在DNS记录里点一下灰色云朵,只走DNS。
- 防火墙规则太狠:CF的WAF有时候会把你的IP误伤。去Security - Events里查一下,看到自己IP被Challenge了,就乖乖加白名单。
- TLS版本问题:有些老SSH客户端不支持TLS 1.3,而CF强制要求。降级或升级客户端。
另外,上周我更新了服务器内核,结果重启后CF的IP段被新的iptables规则全封了。SSH完全进不去,最后是通过VNC控制台才救回来。这个教训是:每次系统大更新后,务必检查下防火墙策略是否覆盖了CF的IP列表。
Web服务器日志怎么看?别等出事才翻
我觉得有一个习惯很关键——每隔几天扫一眼access.log。这不是洁癖,是养成应急敏感度。web服务器日志怎么看,我分享的不是命令,是思路:
- 先看异常集中时段:用
tail -500 access.log | awk '{print $4}' | cut -d: -f2 | sort | uniq -c | sort -rn,一眼看出哪个小时流量异常。如果某个小时流量翻了三倍,大概率是被攻击或爬虫失控。 - 重点关注404和500:
grep ' 404 ' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10,找到被频繁请求的不存在路径。这要么是目录爆破,要么是恶意扫描。 - 别忽略error.log:很多运维只看access.log,但核心问题都在error.log里。上周我一个用户反馈页面加载慢,一看error.log全是PHP-FPM进程数不够的警告——dynamic改成ondemand后,问题直接消失。
个人习惯:写一个cron脚本,每天凌晨把nginx错误日志里出现超过5次的错误类型发邮件给我。这样第二天醒来就能知道自己服务器昨晚经历了什么。
应用程序服务器安装,别再迷信单一方案
应用程序服务器安装,我试过Tomcat、uWSGI、Gunicorn、PM2。2026年6月的今天,我的观点是:没有银弹,各有各的适用场景。
- Java项目:Spring Boot自带Tomcat,但你要是想单独部署,用Tomcat 10以上版本,注意Servlet API的命名空间变化。我见过有人把Tomcat 9的配置照搬到10上,结果项目跑不起来。
- Python项目:Gunicorn还是稳,配合Nginx反向代理,性能瓶颈永远在应用本身的SQL查询上。uWSGI太重量级,除非你特别喜欢它的配置语法。
- Node.js项目:PM2的cluster模式能压榨多核CPU,但要注意日志轮转。默认的
pm2 log不轮转,一个月就能把磁盘撑爆。
安装应用程序服务器时,最容易被忽略的一步是:设置正确的系统用户。别用root跑应用,现在2026年了,任何正规运维规范都要求专用用户。我习惯创建一个appuser,权限严格控制到项目目录和日志文件。上周帮朋友修复一台被挖矿的服务器,罪魁祸首就是他当初为了省事用了root跑Node应用。
另外,应用程序服务器安装后,别忘了检查SELinux或AppArmor的状态。很多诡异的"Permission denied"错误都是因为强制访问控制把监听端口给封了。运行setenforce 0只是临时方案,正确的做法是用audit2allow生成规则。
这半年的经验告诉我,服务器管理其实就是一个不断填坑的过程。每一个坑,只要形成了解决模板,下次就快很多。而2026年6月的今天,我最大的收获是:别追求花哨的工具,把Nginx、数据库、日志这些基本功练扎实,比什么自动化编排都管用。