nginx下php无法访问报错Primary script unknown的解决方法

在用虚拟机搭建环境的时候,出现访问php文件无法获取到。总是报错Primary script unknown,但是静态文件是可以正常访问的。通过排查日志,检查个服务是否正常等方法终于找到解决的方法。

报错如下:

  1. FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream

详细报错如下:

  1. 2017/05/11 10:26:45 [error] 5475#5475: *1 FastCGI sent in stderr: “Primary script unknown” while reading response header from upstream, client: 192.168.1.194, server: demo.demo.com, request: “GET /index.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “localhost”

一、检查所需的服务是否都正常。

  1. service nginx status
  2. service phpfpm status
  3. netstat antp

此处常规的排错,就一笔带过。

二、修改nginx网站的配置。

默认的情况下文件地址在:/etc/nginx/conf.d/default.conf

默认配置:

  1. server {
  2.     listen       80;
  3.     server_name  localhost;
  4.     #charset koi8-r;
  5.     #access_log  /var/log/nginx/log/host.access.log  main;
  6.     location / {
  7.         root   /usr/share/nginx/html;
  8.         index  index.html index.htm;
  9.     }
  10.     #error_page  404              /404.html;
  11.     # redirect server error pages to the static page /50x.html
  12.     #
  13.     error_page   500 502 503 504  /50x.html;
  14.     location = /50x.html {
  15.         root   /usr/share/nginx/html;
  16.     }
  17.     # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  18.     #
  19.     #location ~ \.php$ {
  20.     #    proxy_pass   http://127.0.0.1;
  21.     #}
  22.     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  23.     #
  24.     #location ~ \.php$ {
  25.     #    root           html;
  26.     #    fastcgi_pass   127.0.0.1:9000;
  27.     #    fastcgi_index  index.php;
  28.     #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
  29.     #    include        fastcgi_params;
  30.     #}
  31.     # deny access to .htaccess files, if Apache’s document root
  32.     # concurs with nginx’s one
  33.     #
  34.     #location ~ /\.ht {
  35.     #    deny  all;
  36.     #}
  37. }

将其修改为:

  1. server {
  2.     listen       80;
  3.     server_name  localhost;
  4.     #charset koi8-r;
  5.     #access_log  /var/log/nginx/log/host.access.log  main;
  6.     location / {
  7.         root   /usr/share/nginx/html;
  8.         index  index.php index.html index.htm;
  9.     }
  10.     #error_page  404              /404.html;
  11.     # redirect server error pages to the static page /50x.html
  12.     #
  13.     error_page   500 502 503 504  /50x.html;
  14.     location = /50x.html {
  15.         root   /usr/share/nginx/html;
  16.     }
  17.     # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  18.     #
  19.     #location ~ \.php$ {
  20.     #    proxy_pass   http://127.0.0.1;
  21.     #}
  22.     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  23.     #
  24.     location ~ \.php$ {
  25.         root           /usr/share/nginx/html;
  26.         fastcgi_pass   127.0.0.1:9000;
  27.         fastcgi_index  index.php;
  28.         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
  29.         include        fastcgi_params;
  30.     }
  31.     # deny access to .htaccess files, if Apache’s document root
  32.     # concurs with nginx’s one
  33.     #
  34.     #location ~ /\.ht {
  35.     #    deny  all;
  36.     #}
  37. }

因为默认情况下,php服务都是注释掉的,我们将其打开(去掉前面#即可),然后修改rootfastcgi_param这两个配置项。配置的root参数是我们网站文件放置的路径。

配置设置完成后,记得重新启动服务。

service nginx restart

通过上面的排查和配置,就可以解决nginx下php无法访问报错Primary script unknown的问题。

点赞

发表评论