当前位置:首页 >  站长 >  建站经验 >  文章列表

  • LIMIT 100000,20慢到超时?MySQL深分页的三种解法
    后台导出、爬虫采集、或者用户把列表翻到几千页——只要LIMIT的偏移量上了十万,查询就会肉眼可见地卡。很多人以为是数据太多撑不住,其实是MySQL的工作方式太老实:LIMIT100000,20的意思是把前100020行都取出来,扔掉前100000行,只返回20行。偏移量越大,白干的活越多。先复现确认
    2026-08-31 09:09
  • 千万级大表加索引不敢动?Online DDL和pt-online-schema-change实测
    大表加索引是站长的经典恐惧:ALTERTABLE一执行,表被锁住,网站瞬间打不开,KILL掉还要回滚几小时。以前确实是这样,MySQL5.6之后OnlineDDL成熟了,加索引这类操作可以在线做,执行期间允许并发读写。但“可以在线”不等于“随便什么时候都行”,坑还是有的。OnlineDDL的原理:操
    2026-08-31 09:07
  • 读多写少的站,主从复制加读写分离,一台变三台
    资讯类、内容站的流量特点很一致:读请求是写请求的几十上百倍。一台MySQL扛不住时,主从复制把读压力分给从库,主库专心写,是最省钱的扩容路径——不用换机器、不用改表结构,加从库就行。前提是主从复制先搭好(这个之前写过:主库开binlog、建同步账号,从库CHANGEMASTERTO)。复制跑通后,剩
    2026-08-31 09:04
  • 容器删了数据就没了?Docker卷的备份恢复,别等出事才想起来
    用Docker跑MySQL的站长,最该问自己的一个问题:数据库文件现在能被备份脚本摸到吗?数据在卷(volume)里,如果卷是匿名卷、或者备份脚本只tar了网站目录,那数据库其实处于裸奔状态,容器一坏就只能恢复到上次手动导出的时点。先搞清楚自己的数据在哪。Docker存数据两种方式:bindmoun
    2026-08-31 09:00
  • docker pull龟速还磁盘报警?镜像加速和空间清理一次讲清
    Docker用久了两大顽疾:拉镜像慢得像挂了,以及/var/lib/docker目录悄悄吃掉几十G直到磁盘写满、整站报错。这两件事都有标准解法,十分钟配完。先说拉取慢。DockerHub在国内直连基本不可用,需要配镜像加速器。各家云厂商都提供免费加速地址,阿里云的控制台里有一串专属地址,填到daem
    2026-08-30 18:40
  • 容器启动顺序乱成一锅粥?Compose依赖、健康检查和一键启停
    站稍微复杂一点,容器就不止三个:Web、PHP、MySQL、Redis,再加个定时任务的容器。用dockerrun一个个敲,重启顺序错一次就一堆报错——PHP比MySQL先起来,连接失败直接崩。Compose的价值就是把这套依赖关系写进配置,一键按正确顺序拉起。关键是depends_on加健康检查。
    2026-08-30 18:34
  • 环境配一次崩一次?Docker一条命令拉起LNMP,搬家不再从零开始
    传统装LNMP的痛,装过的都懂:PHP版本、扩展依赖、MySQL配置,换台服务器全部重来一遍,中途各种版本冲突。Docker把整套环境固化成配置文件,机器挂了,新机器上dockercomposeup一条命令,几分钟恢复原样。核心概念就三个:镜像(环境模板)、容器(跑起来的实例)、卷(挂出来的数据目录
    2026-08-30 16:26
  • Redis重启数据全丢?RDB和AOF持久化怎么选,别拍脑袋
    Redis快是真快,代价是数据在内存里,进程一崩、机器一断电,没落盘的数据就没了。站长场景里最疼的两种:一是拿Redis存Session,重启一次全员掉线重登;二是拿它存计数器和队列,重启后数字归零、任务丢失。持久化配置平时没人看,出事才知道疼。Redis给两种持久化方案。RDB是定时快照,每隔一段
    2026-08-30 10:24
  • 网站加了两台服务器用户就掉线?PHP Session存Redis,十分钟搞定多机共享
    单机跑得好好的站,一上负载均衡就出怪事:用户登录着,刷新一下变成未登录;购物车里的东西随机消失。十有八九是Session的问题——Session默认存在本机文件里,用户第一次请求落在A机,Session写在A机,第二次请求被分到B机,B机根本没这个Session,可不就掉线了。解决思路就一句话:Se
    2026-08-29 18:58
  • Redis缓存穿透打垮数据库?空值缓存加布隆过滤器双保险
    缓存穿透的典型场景:有人拿脚本扫你的站,每次请求一个根本不存在的ID,比如/goods.php?id=99999999。Redis里查不到,请求全落到MySQL,而MySQL也查不到,什么都不缓存。下一波请求还是这个流程,数据库白挨打,缓存形同虚设。跟缓存击穿(某个热key过期)不一样,穿透的点是“
    2026-08-29 18:52
  • 手机端图片占了八成流量?srcset 响应式图片让每个设备只下载该下的那张
    打开手机流量一看,一个页面干了3MB,图片占了八成。罪魁祸首通常是同一张2000px宽的大图,PC和手机都在原样下载——手机屏幕400px宽,下载的像素是实际需要的几十倍,流量和渲染性能全浪费了。srcset就是解决这个问题的原生方案,不用任何JS。先准备好同一张图的多个尺寸版本,然后一行代码让浏览
    2026-08-29 18:48
  • 网站挂了三小时才知道?Uptime Kuma 自建监控,挂了秒级通知
    最伤站长的不是故障本身,是故障三小时后才被用户告知。自建一套监控是性价比最高的运维投入,开源的UptimeKuma一个人五分钟就能跑起来,界面像UptimeRobot,但数据全在自己手里,监控频率也不受免费版限制。用Docker部署最省心:dockerrun-d--restart=always\-p
    2026-08-28 15:35
  • 页面白屏不报错?把 PHP 的错误日志配明白,排错效率翻倍
    线上环境出于安全把错误显示关了,这是对的——报错信息暴露路径给攻击者等于送情报。但代价是出了问题页面上啥都没有,只剩白屏。正确姿势是:页面上不显示,错误全部落日志。;php.ini生产环境错误处理四件套display_errors=Off;页面不显示错误log_errors=On;错误写日志erro
    2026-08-28 14:17
  • HTTPS 证书过期了网站被浏览器拦截?Certbot 自动续期一次配好
    去年有个数据:Let'sEncrypt的统计显示,相当一部分证书不是被主动吊销的,而是站长忘了续期,硬生生过期。Chrome和Firefox对过期证书的态度是直接红色警告页,用户看到这个页面基本就走了,对流量和搜索排名都是实打实的伤害。Let'sEncrypt证书免费但有效期只有90天,靠手动续肯定
    2026-08-28 11:33
  • Nginx location 匹配规则没搞懂,改配置全靠猜?一张优先级表讲透
    很多站长第一次给网站加规则就翻车:明明写了location/admin/的限制,访问/admin/login.php却没生效;或者想给图片加缓存头,结果整个站都被匹配走了。问题不在Nginx,在于location的匹配顺序跟你想象的完全不一样。先记住一个反直觉的点:location不是从上到下按顺序
    2026-08-28 11:11
  • 让本地大模型帮你读日志:Ollama排错实操
    凌晨告警,几百行报错堆栈,肉眼读又慢又容易漏。云上大模型处理日志有隐私顾虑——服务器路径、IP、业务数据全发出去不放心。本地方案是Ollama跑开源模型,数据不出机器,日志随便贴。安装一条命令,拉个7B级别模型就能干活,16G内存的机器带得动。#Windows下载安装包后验证ollama--vers
    2026-08-28 11:07
  • 图片还在用JPG直出?WebP平均省三成流量
    页面加载慢,八成是图重。同样一张照片,WebP比JPG小三成左右,比PNG小得多,画质肉眼几乎无差。主流浏览器全支持好几年了,图片格式升级是性价比排前几的优化。转换用cwebp命令行,批量处理写进脚本。质量参数75到85是甜点区,再高体积涨得快、画质几乎看不出变化。#单张转换,质量80#Window
    2026-08-28 10:56
  • 上了HTTPS只是及格线:混合内容一招定位
    证书装好了,地址栏有锁了,但浏览器控制台飘着一排黄字:mixedcontent。页面是HTTPS的,里面的图片、脚本、接口请求还是HTTP明文,等于防盗门装好了窗户开着——中间人照样能篡改这些资源,往你页面里塞东西。定位不用肉眼翻代码,F12控制台每条警告都带着资源URL,按图索骥即可。批量排查用命
    2026-08-28 10:45
  • robots.txt别乱写:放行了不该放的,拦住了该来的
    网站收录异常,先翻robots.txt。这个文件权力很大:写错了百度和Google就不抓你的页面,而你未必知道。见过把整站Disallow的,见过把后台路径全列出来的,两种都是事故。User-agent:*Disallow:/admin/Disallow:/tmp/Disallow:/*.pdf$S
  • 从访问日志揪出SQL注入尝试:特征码就藏在URL里
    多数站长以为自己的站没人盯上,实际上随便一台公网服务器每天都被自动扫描器过一遍。有没有人试过SQL注入,access.log里写得明明白白,只是你没去看。注入尝试的特征很固定:URL或参数里出现单引号的编码%27、unionselect、and1=1这类探测语句、sleep(或benchmark(这
    2026-08-27 17:12
  • disable_functions:把PHP危险函数关进笼子
    服务器被传了WebShell,攻击者在里面一句system('whoami')就拿到执行权限。事后清马属于亡羊补牢,事前把危险函数直接禁掉才是断根。PHP的disable_functions就是干这个的。;php.ini[.....]disable_functions=exec,passthru,s
  • Composer卡成PPT:一行命令切换国内镜像源
    装个依赖等十分钟,最后还Timeout。packagist主源在国外,高峰期慢是常态,但Composer允许全局换镜像,国内几个公共镜像速度拉满。一行命令的事。#阿里云镜像composerconfig-grepos.packagistcomposerhttps://mirrors.aliyun.co
    2026-08-27 15:14
  • 还在用MD5存密码?password_hash五行代码完成升级
    翻出十年前的老系统,用户表里密码列全是32位MD5。MD5快,快到GPU每秒能算几十亿次,意味着拖库之后密码等于明文。这课补起来不贵,PHP自带的password_hash就是标准答案。它默认用bcrypt,自动生成盐、自动处理算法版本,验证时password_verify连计时攻击都防了。用法五行
    2026-08-27 11:52
  • Cache-Control 一次讲透:浏览器缓存配错等于白配
    测速工具天天提示利用浏览器缓存,你给全站加了个Expires7天,结果用户改了CSS半天不生效,一气之下又全关了。多数人对浏览器缓存的理解就卡在这:要么不敢用,要么用错。核心其实就一个头:Cache-Control。记住一个原则:带指纹的文件永久缓存,不带指纹的禁缓存。带指纹指文件名里带版本号或内容
    2026-08-27 09:46
  • Nginx proxy_cache:不买CDN,动态站也能提速一倍
    小站流量上来后最先想到的是上CDN,但要么收费要么有备案门槛。其实如果你的页面动态成分不高,Nginx自带的proxy_cache就能在服务器本地做一层缓存,动态请求打到后端的次数直接砍掉九成。思路是让Nginx把后端返回的内容按key缓存到磁盘,同一个URL在缓存有效期内只回源一次,其余全走本地文
    2026-08-27 09:36
  • Nginx 防盗链:三行规则保住你的图片带宽
    月底一看流量报表,消耗翻倍,查访问日志发现一堆陌生域名在直接引用你站上的图。别人家的页面加载你付钱买的带宽,这买卖不能做。防盗链Nginx原生支持,就是referer模块。原理一句话:浏览器请求图片时会带上Referer头标明来路,不是你允许的来路就直接拒掉或换图。核心就三行。location~*\
    2026-08-26 13:45
  • Nginx limit_req 限流:几行配置挡住大部分CC攻击
    服务器CPU莫名飙高,带宽跑满,看日志全是同一个IP一秒打来几十个请求——这不是业务火了,是被CC了。扛CC的第一道闸门不在代码里,在Nginx的限流模块里,配置成本几乎为零。limit_req的原理是漏桶:你设定一个速率,超速的请求直接返回503或延迟排队。先用limit_req_zone定义一个
  • Nginx upstream健康检查:后端挂了自动踢出局
    单台后端出问题时,如果Nginx还继续把请求发过去,用户看到的不是502就是超时。upstream配置里的max_fails和fail_timeout可以让Nginx自动把失败节点暂时下线,保证正常请求不受影响。这是被动健康检查,不需要商业模块。Nginx在指定时间内检测到多次失败,就把节点标记为不
    2026-08-25 18:30
  • 上传目录变后门温床:三招封死WebShell上传
    WebShell最常见的落地方式不是直接攻破服务器,而是通过上传功能把脚本文件传上去。图片上传、头像上传、附件上传,只要后缀没校验好,就可能变成木马的入口。第一招是校验文件头。不能只看扩展名,jpg/png都有固定文件头,用PHP的getimagesize或者Python的imghdr可以识别真伪。
    2026-08-25 18:08
  • Nginx开启Brotli压缩:流量省20%的正确姿势
    Gzip大家都不陌生,但Brotli的压缩率通常还能再高15%到25%。现在主流浏览器都支持Brotli,Nginx加上这个模块后,文本类资源能省下不少带宽和CDN费用。Nginx官方主线版不自带Brotli,需要加载Google维护的ngx_brotli动态模块。编译过的发行版一般把模块文件放在/
    2026-08-25 18:05

信息推荐