先总结下这个问题出现的提示
- 访问php页面显示file not found
- 查看error.log日志文件提示"Primary script unknown" while reading response header from upstream"
搜了好多材料,觉得最有用的是这几篇,
一、写nginx配置文件
nginx+php的配置与原理 见: https://blog.csdn.net/dengjiexian123/article/details/53358452
Nginx+Php-fpm运行原理详解 https://segmentfault.com/a/1190000007322358
PHP-FPM 介绍https://segmentfault.com/a/1190000019510849
看了之后知道配置的原理了,于是在/etc/nginx/conf.d/ 下新建了一个php.conf的文件夹,内容如下:
server {
listen 80; #监听80端口,接收http请求
server_name www.example.com; #就是网站地址
root /usr/share/nginx/html; # 准备存放代码工程的路径
#路由到网站根目录www.example.com时候的处理。确保输入www.example.com时,不用输入/index.php就就可以访问到index.php文件,而不是index.html文件
location / {
index index.php; #跳转到www.example.com/index.php
autoindex on;
}
#当请求网站下php文件的时候,反向代理到php-fpm,这一段的目的是解析php文件,将php文件反向代理到php-fpm处理。
location ~ \.php$ {
root /usr/share/nginx/html;//一开始自己这里写的是/html,以为前面已经设置过root了,这里直接写html就行,但后来发现不行,还是提示找不到,最后写上完整地址就可以了
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; //一开始这部分是SCRIPT_FILENAME /scripts$fastcgi_script_name;
//找了很多地方发现要吧scripts改成document_root
}
}
建立该文件后,用nginx -t,测试nginx配置文件,没问题后用nginx -s reload重载配置文件
可是发现问题还没解决。
二、设置php-fpm用户权限
于是继续网上搜解决办法,发现可能是php-fpm权限问题,具体见这些文章:
Linux下搭建nginx+php环境的file not found问题反省https://www.jianshu.com/p/f92c2e53746d
以及
配置LNMP环境出现错误:Primary script unknown" while reading response header from upstreamhttps://blog.csdn.net/qq_27754983/article/details/68195727
得出结论,应该是php-fpm的的用户及用户组要调整。
php-fpm的主配置文件在 /etc/php-fpm.conf,该文件最后一句是include=/etc/php-fpm.d/*.conf,进入/etc/php-fpm.d文件夹
发现只有www.conf文件,打开该文件查看发现原user及group都是apache,将其调整为nobdoy,及任可用户都可以。
在重新加载该配置文件就行了,但由于php-fpm不能通过systemctl以及service来reload配置文件,只能通过向其进程传递信号的方式使其重新加载配置文件
具体可以参考:
php-fpm的重启方法https://blog.csdn.net/liuchen1314/article/details/79387684
方法是,首先找到php-fpm主进程id
然后输入
就可以了,再在浏览器访问www.example.com是就正常了。