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

  • 数据库备份脚本只会 dump 一把梭?这份定时备份方案能救命
    问过不少站长:有备份吗?答有,拷过一份。再问什么时候拷的?去年。这种备份等于没有。数据库备份要做到三条:自动化、异地存、定期演练恢复。三条都不难,一个脚本加一条cron全搞定。先说dump命令怎么写才对。默认参数导出的文件恢复时容易出问题,这几个参数建议照抄:mysqldump-uroot-p'密码
    2026-08-28 14:48
  • 一台数据库扛不住了?MySQL 主从复制搭建实录,附跳坑指南
    站点流量上来后,读写全压在一台MySQL上,页面越来越慢,更闹心的是没备份没冗余,机器一挂全站完蛋。主从复制是数据库水平扩展的第一步:主库写、从库读,顺便从库就是一台热备。原理不难,就是主库把变更写进binlog,从库拉回来重放。第一步,主库开binlog并建复制账号:#主库my.cnf[mysql
    2026-08-28 14:40
  • 页面白屏不报错?把 PHP 的错误日志配明白,排错效率翻倍
    线上环境出于安全把错误显示关了,这是对的——报错信息暴露路径给攻击者等于送情报。但代价是出了问题页面上啥都没有,只剩白屏。正确姿势是:页面上不显示,错误全部落日志。;php.ini生产环境错误处理四件套display_errors=Off;页面不显示错误log_errors=On;错误写日志erro
    2026-08-28 14:17
  • 定时任务还在页面里套 include?cron + PHP CLI 才是正路
    见过不少老站的处理方式:写个task.php,靠别人挂个监控或者用JS定时刷来触发,更狠的是每次有人访问首页顺带跑一遍统计。这些歪招的共同问题是不可控——没人访问就不跑,被搜索引擎高频抓取就狂跑。定时任务就该交给系统的cron。PHP从命令行跑有个专属的SAPI叫CLI,和网页那套php-fpm是两
    2026-08-28 14:03
  • PHP-FPM 进程池参数怎么算?内存除法题,算错就 502
    后台传个30MB的视频或者8MB的主题包,进度条走到一半报错,或者干脆显示上传成功但文件不存在。这类问题的根源九成是PHP的上传限制,而且牵一发动全身——不是改一个参数就完事,得三个一起改。;php.ini上传相关三件套upload_max_filesize=64M;单个文件最大体积post_max
    2026-08-28 14:00
  • HTTPS 证书过期了网站被浏览器拦截?Certbot 自动续期一次配好
    去年有个数据:Let'sEncrypt的统计显示,相当一部分证书不是被主动吊销的,而是站长忘了续期,硬生生过期。Chrome和Firefox对过期证书的态度是直接红色警告页,用户看到这个页面基本就走了,对流量和搜索排名都是实打实的伤害。Let'sEncrypt证书免费但有效期只有90天,靠手动续肯定
    2026-08-28 11:33
  • 服务器磁盘天天告警?八成是日志没轮转,logrotate 十分钟配好
    有个经典事故:网站跑了半年突然全挂,查半天发现是磁盘满了,罪魁祸首是access.log涨到了80GB。日志不管理,等于给服务器埋了个定时炸弹。Linux自带的logrotate就是干这个的,大多数发行版装完就有,不用额外装任何东西。logrotate的思路很简单:按你定的周期把当前日志改名存档,压
    2026-08-28 11:28
  • 网站突然 502:别急着重启,顺着这条链路查五分钟定位
    半夜收到监控告警,打开网站一片502BadGateway。很多人的第一反应是重启服务器,运气好恢复了,运气不好过一小时又来。502的本质就一句话:Nginx活着,但后面的PHP-FPM或者上游服务没应答或拒绝连接。顺着这条链路查,比乱重启快得多。第一步看PHP-FPM进程在不在。psaux|grep
    2026-08-28 11:25
  • 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
  • 表越删越慢?OPTIMIZE TABLE回收空间实录
    日志表每天删几十万行,文件却一点没变小,查询还越来越慢。这不是玄学,是InnoDB的机制:删除的数据只是打标记,空间留在文件里复用,但反复增删后数据页变得稀碎,扫描效率下降。碎到一定程度就得整理。先看碎片率再动手,information_schema里直接查。SELECTtable_name,ROU
    2026-08-27 17:15
  • 从访问日志揪出SQL注入尝试:特征码就藏在URL里
    多数站长以为自己的站没人盯上,实际上随便一台公网服务器每天都被自动扫描器过一遍。有没有人试过SQL注入,access.log里写得明明白白,只是你没去看。注入尝试的特征很固定:URL或参数里出现单引号的编码%27、unionselect、and1=1这类探测语句、sleep(或benchmark(这
    2026-08-27 17:12
  • 网站突然连不上数据库?SHOW PROCESSLIST排查实录
    页面集体报数据库连接失败,重启MySQL能救急,但过几小时又犯。这种病根基本是连接堆积:请求速度超过消化速度,连接数堆到max_connections上限,新连接全被拒。排查工具就是一条SQL。SHOWPROCESSLIST;--输出关键列:Id、User、Host、db、Command、Time、
    2026-08-27 15:58
  • MySQL索引为什么不生效:六个写法让EXPLAIN当场现形
    明明建了索引,查询还是全表扫描,几百万行的表一查十几秒。索引失效多数不是索引的问题,是SQL写法的问题。别猜,EXPLAIN一下,type列是不是ALL、key列是不是NULL,一目了然。EXPLAINSELECT*FROMordersWHEREDATE(create_time)='2026-08-
    2026-08-27 15:22
  • 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
  • 网站数据自动备份:一个脚本+一个计划任务搞定
    网站备份是出事之后最后悔没做的东西。很多人服务器被黑后才发现数据库没备份,几年的内容一夜归零。其实一个shell脚本加一个定时任务就能解决。下面这个脚本同时备份MySQL数据库和网站源码,按日期命名,保留最近7天。Linux服务器直接放到/root/backup.sh,Windows可以改成Powe
    2026-08-25 18:06
  • Nginx开启Brotli压缩:流量省20%的正确姿势
    Gzip大家都不陌生,但Brotli的压缩率通常还能再高15%到25%。现在主流浏览器都支持Brotli,Nginx加上这个模块后,文本类资源能省下不少带宽和CDN费用。Nginx官方主线版不自带Brotli,需要加载Google维护的ngx_brotli动态模块。编译过的发行版一般把模块文件放在/
    2026-08-25 18:05
  • MySQL慢查询定位三板斧:慢日志+EXPLAIN+索引
    网站卡顿不一定是代码慢,很可能是数据库在硬扛。MySQL慢查询日志是最直接的突破口,先把执行时间长的SQL抓出来,再一条条用EXPLAIN看执行计划,最后加索引或者改写法。开启慢日志很简单,在my.cnf里加三行,重启MySQL即可。注意long_query_time单位是秒,线上可以先设1秒,抓到
    2026-08-25 16:19
  • SQL注入没商量:用PDO预处理一劳永逸
    SQL注入这个老问题之所以还能排到OWASP前十,根本原因是太多站长图省事直接拼SQL字符串。用户输入一旦混进查询语句,什么账号密码、订单数据、后台权限都能被拖出来。PDO预处理语句把SQL结构和数据彻底分开:SQL模板里用占位符,真实数据通过bindParam绑定。数据库把模板编译一次,之后只接收
    2026-08-25 15:12

信息推荐