<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nginx on 友派博客</title><link>https://blog.uipad.com/zh-cn/tags/nginx/</link><description>Recent content in Nginx on 友派博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Wed, 18 Mar 2026 10:30:00 +0800</lastBuildDate><atom:link href="https://blog.uipad.com/zh-cn/tags/nginx/index.xml" rel="self" type="application/rss+xml"/><item><title>从 File Not Found 到一针见血：记一次 Nginx + Docker 路径映射的乌龙与 AI 降维打击</title><link>https://blog.uipad.com/zh-cn/post/2026-03/nginx-docker-wordpress-path-mismatch-fix/</link><pubDate>Wed, 18 Mar 2026 10:30:00 +0800</pubDate><guid>https://blog.uipad.com/zh-cn/post/2026-03/nginx-docker-wordpress-path-mismatch-fix/</guid><description>&lt;p&gt;今天为了折腾那套 WordPress 环境，真是差点把键盘给敲烂了。&lt;/p&gt;
&lt;p&gt;事情起因很简单：我用 &lt;code&gt;wordpress:6.9-php8.2-fpm&lt;/code&gt; 镜像搭了个环境，外面套了一层宿主机的 Nginx 做转发。本以为这种教科书级别的配置，闭着眼睛都能跑通，结果浏览器一刷新，屏幕上冷冰冰地躺着四个大字：&lt;strong&gt;“File not found.”&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;我反手就是一个 &lt;code&gt;cat&lt;/code&gt; 检查了宿主机的权限和文件内容，&lt;code&gt;www-data&lt;/code&gt; 用户读写正常，路径也对得上，Nginx 配置里的 &lt;code&gt;fastcgi_pass&lt;/code&gt; 更是直连容器端口。这种“文件明明在，但它死活说没有”的感觉，就像是你在兜里摸到了钥匙，但锁却告诉你门没关、只是你手感不对。&lt;/p&gt;
&lt;p&gt;这时候，我本着“能问 AI 绝不自己抠脑壳”的原则，先去问了下豆包。结果这哥们儿给我绕了一大圈：先是让我查 Linux 文件权限，接着让我改 Nginx 的 &lt;code&gt;user&lt;/code&gt;，最后甚至开始教我怎么重新安装 &lt;code&gt;php-ext-install&lt;/code&gt;。折腾了半天，权限改成了 777，镜像重构了好几次，问题依然稳如泰山。那一刻，我真想问问它：你是不是在跟我玩“运维消消乐”？&lt;/p&gt;
&lt;p&gt;抱着试一试的心态，我转头把同样的 Nginx 配置和报错丢给了 Gemini。&lt;/p&gt;
&lt;p&gt;结果 Gemini 连一句废话都没有，直接点出了那个被我忽略的“盲点”：&lt;strong&gt;路径隔离&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;我宿主机的 Web 根目录在 &lt;code&gt;/opt/wordpress/html&lt;/code&gt;，Nginx 的 &lt;code&gt;$document_root&lt;/code&gt; 也是这个。但我忘了，PHP-FPM 是住在 Docker 容器这个“样板间”里的，在它的世界观里，压根就没有 &lt;code&gt;/opt&lt;/code&gt; 这个路径。它只认官方镜像默认的 &lt;code&gt;/var/www/html&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;当 Nginx 傻乎乎地把 &lt;code&gt;/opt/wordpress/html/index.php&lt;/code&gt; 这个路径传给容器里的 FPM 时，FPM 当然只能回敬一句“File not found”。&lt;/p&gt;
&lt;p&gt;解决办法简单到想哭：只需要在 &lt;code&gt;fastcgi_param SCRIPT_FILENAME&lt;/code&gt; 那里，把 &lt;code&gt;$document_root&lt;/code&gt; 换成容器内部的绝对路径 &lt;code&gt;/var/www/html&lt;/code&gt; 就可以了。&lt;/p&gt;
&lt;p&gt;说实话，这次排障让我感触挺深的。现在的 AI 模型很多，但像 Gemini（哪怕只是 Flash 版本）这样能一眼看穿系统架构逻辑的真的不多。它不是在机械地检索关键词，而是真的理解了“宿主机-容器”这种双重空间下的路径映射逻辑。相比之下，那些只会复读权限指令的 AI，确实显得有些“人工智障”了。&lt;/p&gt;
&lt;p&gt;有时候，强大的模型并不在于它能写多长的代码，而在于它能多快定位到那一个让你抓狂的小变量。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;最后的小贴士：&lt;/strong&gt;
如果你也在搞 Nginx 转发 Docker FPM，记住：Nginx 是个传声筒，它说的话（路径），听众（容器）得能听懂才行。&lt;/p&gt;</description></item></channel></rss>