Nginx配置白屏血泪史:rewrite规则里的斜杠竟然这么要命

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
站长杂谈 66 浏览 21 回复

昨天给客户部署新站时遇到个邪门问题:配置完伪静态后,首页直接白屏,连500错误都不给。折腾两小时才发现是rewrite规则里少了个斜杠,记录下这个价值2000块的教训。

环境是LNMP+ThinkPHP6,伪静态规则照搬官方文档: location / { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 last; } } 看起来没问题对吧?但实际访问时死活不解析,关键点在于规则末尾的斜杠。实测发现必须写成rewrite ^(.*)$ /index.php?s=$1/ last;才能生效,特别是当路由带参数时。

更坑的是这种错误: 1. 不会触发Nginx错误日志 2. Chrome开发者工具显示200状态码 3. 服务器返回空响应体 排查时先后排除了PHP-FPM进程挂掉、文件权限问题、路由配置错误,最后用curl -v才发现请求根本没进PHP解释器。

总结三个排查姿势: 1. 先看access_log:确认请求是否真的打到后端 2. 禁用所有rewrite:用rewrite_log on;输出调试 3. 手动拼接URL:在浏览器直接访问/index.php?s=/测试路由

现在终于理解为什么老鸟都说"Nginx的斜杠能逼疯强迫症",这玩意在proxy_pass、alias、rewrite里全是不同的语义,下次再碰到白屏问题,我决定先给所有可能缺斜杠的地方都怼上/再说...

评论21
回复 · 21
孙超宁
孙超宁 新手暖弦漫旋 · #20 ·
感谢分享!
Iris
Iris 初级 · #19 ·
同求,期待更新
知夏45
知夏45 新手清瑶问鼎 · #18 ·
感谢分享!
GraceSong
GraceSong 新手麟宫绮梦 · #17 ·
感谢分享!
懒懒的星星
懒懒的星星 初级星灿心语 · #16 ·
学到了,顶一下
徐静
徐静 新手星灿心语 · #15 ·
支持了~
安然77
安然77 初级圣羽星庭 · #14 ·
已解决,谢谢楼主
EdenLin
EdenLin 初级 · #13 ·
写得很清楚,收藏了
懒懒的汽水
懒懒的汽水 初级 · #12 ·
已解决,谢谢楼主
安静的橙子
安静的橙子 初级赏金猎人 · #11 ·
已解决,谢谢楼主
BlakeMoon
BlakeMoon 初级 · #10 ·
感谢分享!
郭平
郭平 新手赏金猎人 · #9 ·
学到了,顶一下
FinnLeaf
FinnLeaf 初级星灿心语 · #8 ·
支持了~
刘磊
刘磊 初级 · #7 ·
同求,期待更新
Joel
Joel 新手清瑶问鼎 · #6 ·
写得很清楚,收藏了
小小的月亮
小小的月亮 新手赤羽栖云 · #5 ·
写得很清楚,收藏了
何华悦
何华悦 初级 · #4 ·
写得很清楚,收藏了
OpenField
OpenField 初级流金绮梦 · #3 ·
已解决,谢谢楼主
SkyWalker
SkyWalker 初级璃海华章 · #2 ·
感谢分享!
孙婷勇
孙婷勇 新手赏金猎人 · #1 ·
支持了~
1 2
微信客服 微信客服 QQ官方交流群 QQ官方交流群