资讯专栏INFORMATION COLUMN

不一样的nginx报错"Primary script unknown"

simpleapples / 1138人阅读

摘要:昨天晚上忘记对开发环境做了什么改动,导致今天来了在进行接口调试的时候提示这个大多数情况下来说是一个很简单的问题配置里面的错误。然而我检查了我的配置,发现并没有什么问题。

昨天晚上忘记对开发环境做了什么改动,导致今天来了在进行接口调试的时候nginx提示"Primary script unknown",这个大多数情况下来说是一个很简单的问题:nginx配置里面的script_filename错误。然而我检查了我的nginx配置,发现并没有什么问题。

location ~ .php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass 127.0.0.1:9000;
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        try_files $uri =404;
    }

同时,我也对这个配置进行了验证,在http模块的access日志格式配置里面加入请求文件名,并在sever模块里面使用这个配置

log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
                  "$status $body_bytes_sent "$http_referer" "
                  ""$http_user_agent" "$http_x_forwarded_for" $document_uri $request_filename";
access_log  "logs/frontapi.access.log" main;

下面是打印的日志,经过验证,这个配置确实是没有问题的。

127.0.0.1 - - [18/Mar/2019:12:40:40 +0800] "GET /v1/product/search?category=2 HTTP/1.1" 404 27 "-" "PostmanRuntime/7.6.1" "-" /index.php /Users/xubandit/Documents/www/mmt/mmt-mall-php/frontapi/web/index.php
^C
xubanditdeMacBook-Pro:logs xubandit$ ll /Users/xubandit/Documents/www/mmt/mmt-mall-php/frontapi/web/index.php
-rwxr-xr-x  1 xubandit  staff  570  3  9 16:39 /Users/xubandit/Documents/www/mmt/mmt-mall-php/frontapi/web/index.php

然后又查了php代码,发现请求根本就没有到php代码这边来,也就是说问题出在了php-fpm,然后就想怎么对php-fpm进行调试,查看了php-fpm的日志,发现日志里面只记录了php-fpm master进程的信息,子进程里面进行php处理的内容是没有日志的。

只能进行进程调试了,然而发现macos下面并没有strace这个工具,好在有个替代品dtruss

xubanditdeMacBook-Pro:php-fpm.d xubandit$ sudo dtruss  -p 13735
dtrace: system integrity protection is on, some features will not be available

SYSCALL(args)          = return
poll(0x7FFEE3A437B0, 0x1, 0x1388)         = 1 0
getrusage(0x0, 0x7FFEE3A43670, 0x0)         = 0 0
getrusage(0xFFFFFFFFFFFFFFFF, 0x7FFEE3A43670, 0x0)         = 0 0
dtrace: error on enabled probe ID 2174 (ID 159: syscall::read:return): invalid kernel access in action #12 at DIF offset 68
dtrace: error on enabled probe ID 2174 (ID 159: syscall::read:return): invalid kernel access in action #12 at DIF offset 68
dtrace: error on enabled probe ID 2174 (ID 159: syscall::read:return): invalid kernel access in action #12 at DIF offset 68
dtrace: error on enabled probe ID 2174 (ID 159: syscall::read:return): invalid kernel access in action #12 at DIF offset 68
dtrace: error on enabled probe ID 2174 (ID 159: syscall::read:return): invalid kernel access in action #12 at DIF offset 68
lstat64("/Users/xubandit/Documents/www/mmt/mmt-mall-php/frontapi/web/index.php", 0x7FFEE3A52E30, 0x0)         = -1 Err#13
stat64("/Users/xubandit/Documents/www/mmt/mmt-mall-php/frontapi/web", 0x7FFEE3A53980, 0x0)         = -1 Err#13
stat64("/Users/xubandit/Documents/www/mmt/mmt-mall-php/frontapi", 0x7FFEE3A53980, 0x0)         = -1 Err#13
stat64("/Users/xubandit/Documents/www/mmt/mmt-mall-php", 0x7FFEE3A53980, 0x0)         = -1 Err#13
stat64("/Users/xubandit/Documents/www/mmt", 0x7FFEE3A53980, 0x0)         = -1 Err#13
stat64("/Users/xubandit/Documents/www", 0x7FFEE3A53980, 0x0)         = -1 Err#13
stat64("/Users/xubandit/Documents", 0x7FFEE3A53980, 0x0)         = 0 0
stat64("/Users/xubandit", 0x7FFEE3A53980, 0x0)         = 0 0
stat64("/Users", 0x7FFEE3A53980, 0x0)         = 0 0
stat64("", 0x7FFEE3A53980, 0x0)         = -1 Err#2

通过调试发现php-fpm是正常接收到了文件这个参数,只是访问的时候报错了。然后检查配置文件发现php-fpm是nobody:nobody用户运行的,文件的owner是xubandit:staff,访问权限有问题,由于是我本地电脑,所以就把php-fpm运行的用户改成了xubandit:staff。问题到这里就解决了

tips:为了strace方便,我把php-fpm配置进行了修改,让php-fpm只fork出一个子进程处理所有的请求

pm.max_children = 1
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 1

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40381.html

相关文章

  • 记一次NginxPrimary script unknown报错解决

    摘要:报错在的中遭到定义脚本文件的地方修改成如下方式代表当前请求在指令中指定的值上面配置中的就是针对目录下的文件进行解析。 报错: [error] 12691#0: *6 FastCGI sent in stderr: Primary script unknown while reading response header from upstream, client: 192.168.168...

    graf 评论0 收藏0
  • 剖析Vue3中侦听器watch使用教程

      上一节我们简单的介绍了一下vue3 项目中的计算属性,这一节我们继续 vue3 的基础知识讲解。  这一节我们来说 vue3 的侦听器。  学过 vue2 的小伙伴们肯定学习过侦听器,主要是用来监听页面数据或者是路由的变化,来执行相应的操作,在 vue3里面呢,也有侦听器的用法,功能基本一样,换汤不换药的东西。 侦听器是常用的 Vue API 之一,它用于监听一个数据并在数据变动时做一些自定义...

    3403771864 评论0 收藏0
  • "/alidata/server/nginx/logs/nginx.pid" f

    摘要:基于阿里云,版本是先废话下进程分为进程和进程,开始运行后我们可以通过查看他的的在之后会把它的进程写到文件中。之后就会把此掉,随之这个文件也会被删除。此时你文件得到的一串数字和上述中的数据是一致的。 基于阿里云,版本是 CentOS release 5.8 (Final) 先废话下,Nginx进程分为master进程和worker进程,nginx开始运行后我们可以通过 ps aux|ge...

    QiuyueZhong 评论0 收藏0
  • nginx: [emerg] unknown "connection_upgrade&qu

    摘要:什么是传统的通讯模式是客户端发起请求,服务端接收请求并作出响应。而协议复用了的握手通道,具体指的是,客户端通过请求与服务端协商升级协议。第二步,交换数据,客户端与服务端可以使用协议进行双向通讯。 问题 showImg(https://segmentfault.com/img/bVbqF3z?w=704&h=66);一天更新完主分支后启动nginx,结果报错:nginx: [emerg]...

    gecko23 评论0 收藏0

发表评论

0条评论

simpleapples

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<