去掉 php-fpm 烦人的 “FastCGI sent in stderr: "Primary script unknown"” 错误

陪她去流浪 桃子 编辑 阅读次数:15603

对 nginx 的使用不熟悉,使用了以下方式来把 php 脚本转交给 php-fpm 处理:

1
2
3
4
5
6
location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

但这样有一个问题,就是在当 php 脚本文件不存在时会导致 php-fpm 生成一条错误到 nginx 的日志中,内容如下:

FastCGI sent in stderr: "Primary script unknown"

总有叼民想害朕。老是有人尝试猜测我博客的后台(我博客开源的啊!!),经常尝试各种登录程序,比如『/wp-admin/wp-login.php』等等等等。文件根本不存在,所以导致一堆的『FastCGI sent in stderr: "Primary script unknown"』错误,烦死了。

可用以下办法解决:

1
2
3
4
5
6
7
location ~ \.php$ {
        try_files      $uri =404;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

注意到加入了一行try_files $uri =404;,由于 try_files 阶段(phase)先于 fastcgi_pass 执行,所以可以在把处理转交给 fpm 之前进行文件不存在的处理。

参考

标签:nginx · php · FPM

文章评论 6 发表评论 登出
  1. IT不倒翁 https://blog.itbdw.com
    妙!我也遇到这个问题了,之前一直不处理,直接忽略,但是真的很烦人。。 我限制了下仅允许访问入口文件,相比起来,你的牛啊! https://blog.itbdw.com/nginx-php-error-primary-script-unknown-reason-and-solution/
    1. 桃子
      哈哈,你的看起来好复杂呢[笑哭]
      1. IT不倒翁 https://blog.cowlevel.net
        是。。。不过我 nginx 和 php-fpm 都是独立服务器的,所以,你这个在我那里用不了,不白折腾了(苦笑)。 另外你这个还能发邮件呢,真高级。。。 你的博客程序有个问题,评论过一次了,再评论还要再填写一遍。。。没有给缓存起来
        1. 桃子
          好吧,我都是瞎搞,还没弄过独立服务器[尴尬]。 保存不了评论者的信息?那估计是出问题了,我有写此逻辑的。 可否麻烦告知一下是什么浏览器及其版本?谢谢啦。
          1. IT不倒翁 https://blog.cowlevel.net
            我现在打开又默认填充上了。 其实,浏览器、版本、ip 啥的,你都可以直接收集。。。。。。。。。
            1. 桃子
              多谢。之前有的,后来觉得没什么用一样,就去掉了[笑哭]。 并没有怎么测试兼容性,只是一个瞎折腾的业余的前端开发。
    还没有用户发表过评论,我要发表评论
    编辑评论