别再吹动静分离了,我折腾一宿白干
昨晚又没睡好。群里几个老哥天天发文章,说什么动静分离一上,服务器负载直接降一半。我看着自己那台破1核2G的小鸡,心动了。动手。
结果折腾一宿,压根没用。今天就得把这坑说清楚。
先说他们怎么吹的。什么Nginx配个location,把静态资源扔到子域名去,图片css全走cdn,然后主站只处理php。听起来完美吧?我照着抄。改的那个配置文件在 /usr/local/nginx/conf/vhost/xxx.conf,加了俩location块,一个匹配 .js|.css|.png,另一个location ~ \.php$ 转发到php-fpm的9000端口。重载:nginx -s reload。看着没报错,心里美滋滋。
然后我拿ab压了一下。并发50,请求一个首页。你猜怎么着?502 Bad Gateway。日志里满屏的 connect() failed (111: Connection refused)。我以为是php-fpm没起,systemctl restart php-fpm,还是不行。
后来查了半天,发现是我自己在server块里脑子抽了,把静态资源的root路径指到了 /www/wwwroot/static/,但那个目录下其实是个软链,权限还是700。nginx跑的是www用户,读不了。根本不是动静分离的事,是我自己路径写错了。

那好,修好之后接着压。静态分离了呀,图片确实走的另一个域名。但首页该慢还是慢,数据库查询该多还是多。为什么?因为我那个破程序,首页本身就查了8次数据库,跟静态资源有个毛关系。你分不分离,它都得等MySQL返回。那帮人吹的“省资源”,实际上就是把几KB的图片流量挪走了,对CPU和数据库IO一点帮助没有。
说白了,大部分中小站长的瓶颈就两个:一是php代码写得烂,二是MySQL没加索引。你搞什么动静分离、反向代理、redis缓存,都是治标不治本。我昨天在 /etc/my.cnf 里调了innodb_buffer_pool_size,从默认的128M加到512M,重启mysql。生效了,比那破分离管用十倍。
还有那帮人说用Nginx做缓存,proxy_cache_path那一套。我试过,缓存目录设在 /var/cache/nginx/proxy_temp,结果磁盘IO直接打满。小破站根本扛不住频繁读写。最后我把缓存全关了,改成在PHP里用apcu缓存几个查询结果,反而稳了。
所以别听人瞎吹。什么架构升级、性能优化,你先看错误日志,看慢查询日志。慢查询开了没?slow_query_log = 1 加了吗?没有的话,先加这个。加完再谈别的。
我算是明白了,站长群里面,十个吹牛逼的,九个没压过测。剩下那个压了,但只压了静态页。你让他压动态页,他立马装死。行了不说了,我去补觉。今天要是再有人跟我提动静分离,我直接拉黑。
- 上一篇: 手把手教你白嫖甲骨文服务器,一年省下三千块
- 下一篇: 花200块魔改老VPS,白嫖CDN还倒赚一笔











鄂公网安备42011602001234号