PHP Primary script unknown 终极解决方法
相信很多配置php环境的都遇到过这个恼人的问题:
- 浏览器访问php文件,返回来 File not found
- 查看/var/log/nginx/error.log ,有 “Primary script unknown”,类似如下:
// :: [error] #: * FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream,
client: 1.2.3.4, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.example.com"
原因只有两个,一个是php-fpm找不到php文件,一个是php-fpm没有权限读取和执行文件。
1. 找不到文件问题
nginx 的站点配置文件php段要这样:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:
location ~ \.php$ {
#root 路径配置必须要有,而且必须要写对(别笑,真的能写错)
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php; #SCRIPT_FILENAME用$document_root,而不是具体路径
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
2. 权限问题
也是坑最多的。
1) 进程用户
nginx.conf 里的 user 配置要跟 php-fpm.d/www.conf 一致,比如都用 nginx,或者自定义用户 phpuser(再来句废话,这个用户需要提前建好)。
nginx.conf :
user phpuser;
worker_processes auto;
php-fpm.d/www.conf :
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = phpuser
group = phpuser
nginx 和 php-fpm 进程/监听信息:
root 0.0 0.1 ? Ss 1月02 : php-fpm: master process (/usr/local/etc/php-fpm.conf)
phpuser 0.0 0.1 ? S 1月02 : php-fpm: pool www
phpuser 0.0 0.1 ? S 1月02 : php-fpm: pool www
root 0.0 0.0 ? Ss : : nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
phpuser 0.0 0.7 ? S : : nginx: worker process
phpuser 0.0 0.7 ? S : : nginx: worker process
tcp 127.0.0.1: 0.0.0.0:* LISTEN /php-fpm: mast
tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx: master
tcp6 ::: :::* LISTEN /nginx: master
如果修改了 nginx 运行用户还必须要改些目录权限:
chown -R phpuser:phpuser /var/log/nginx
chown -R phpuser:phpuser /var/cache/nginx
chown -R phpuser:phpuser /usr/share/nginx/html
还有/etc/logrotate.d/nginx,create 640 nginx adm 这行要改:
create phpuser adm
2) 目录和文件权限
php文件不必非得设为 777,让人怪担心的,只要是nginx和php-fpm运行用户可读写执行即可,一般可以770 。
php文件目录和文件样例:
drwxrwx--- phpuser phpuser .0K -- : /usr/share/nginx/html
-rwxrwx--- phpuser phpuser -- : /usr/share/nginx/html/phpinfo.php
这里有个深坑,对于使用其他目录放置php文件的很可能中招,就是 /path/to/phpfiles 的每一层目录都要允许 phpuser 访问,缺一层就会 Permission denied。
本例,/usr/share/nginx/html 之上的每一层目录,所有者都是root,都有 o+rx ,即所有人都有读取和执行权限(读取和执行权限是目录访问的根本),因此 phpuser 可以访问到 html 目录。
drwxr-xr-x. root root -- : /usr
drwxr-xr-x. root root .0K -- : /usr/share/
drwxr-xr-x root root -- : /usr/share/nginx/
drwxrwx--- phpuser phpuser .0K -- : /usr/share/nginx/html/
测试方法:
sudo -u phpuser ls -l /usr/share/nginx/html/
3) SELINUX
nginx/apache 网页文件的 selinux 上下文,如果更换目录需要配上。(在Cenots7+php7.3上测试,没有 selinux 上下文时,静态文件404,而php文件反倒没有遇到问题,没有深究)
# ll -dZ /usr/share/nginx/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html
配置 selinux 上下文:
chcon -R -t httpd_sys_content_t /path/to/phpfiles
或者干脆关闭selinux(需要重启服务器)
/etc/selinux/config :
SELINUX=disabled
3. 最后
echo "<p align='center'>Good Luck :)</p><?php phpinfo(); ?>" > /usr/share/nginx/html/phpinfo.php
PHP Primary script unknown 终极解决方法的更多相关文章
- [PHP] 安装PHP报错“Primary script unknown”的解决方法
当安装完最新版的nginx和最新版的PHP以后,使用niginx默认配置文件中的PHP配置会有错误访问指定目录下的php文件时,显示File not found.错误.查看nginx的错误日志显示 9 ...
- Nginx-Primary script unknown的报错的解决方法
配置nginx时一直报错:file not found 错误日志: [error] 12691#0: *6 FastCGI sent in stderr: "Primary script u ...
- nginx FastCGI错误Primary script unknown解决办法
在centos上成功编译安装nginx 1.4.php 5.4并成功启动nginx和php-fpm后,访问php提示"File not found.",同时在错误日志中看到: 复制 ...
- 解决nginx FastCGI sent in stderr: “Primary script unknown”
今天重启了mac,突然发现本地的 lnmp 服务不能用了,什么请求都返回了: FastCGI sent in stderr: "Primary script unknown" 这个 ...
- 【nginx】 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
2013/10/22 20:05:49 [error] 12691#0: *6 FastCGI sent in stderr: "Primary script unknown" w ...
- FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream,
在对nginx添加fastCGI的支持后,然后进行php页面验证,发现页面识别不到,不清楚什么情况,随后google了下,原来是Nginx内置变量问题惹的祸. 1.平台介绍: 1 2 3 4 5 6 ...
- Nginx+PHP配置错误,日志:[error] 24324#0: *31 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
一.问题现象 1.安装nginx.php.php-fpm后,浏览器访问php报错,“File not found”: 二.问题排查 1.检查nginx.php-fpm服务是否正常启动,均正常启动: 2 ...
- nginx+php-fpm 报错Primary script unknown
报错信息(nginx日志): // :: [crit] #: * stat() : Permission denied), client: 172.21.205.25, server: localho ...
- Win8.1 Metro应用无法联网终极解决方法
Win8.1 Metro应用无法联网终极解决方法: 一.删除注册表中:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WinSock2\Par ...
随机推荐
- JsonToHtml
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Codeforces Round #175 (Div. 2) A~D 题解
A.Slightly Decreasing Permutations Permutation p is an ordered set of integers p1, p2, ..., pn, c ...
- AForge.net 录像拍照功能实现 转
AForge.net 使用之录像拍照功能实现 最近使用aforge.NET拍照录像功能实现 记录一下以便以后好学习,哈哈,直接上代码 连接摄像头设备,这里需要引入 AForge.Video; AFor ...
- springboot整合shading_jdbc实现读写分离
之前是通过XML方式来配置数据源,读写分离策略,分库分表策略等,之前有朋友也问过我,有没有Spring Boot的方式来配置,既然已经用Spring Boot还用XML来配置感觉有点不协调. 其实吧我 ...
- N1 Armbian 安装 Domoticz
前言 N1 中安装 Domoticz 的方法与这篇类似,MQTT 服务器改用 mosquitto,更轻量级. 步骤 安装 Domoticz,只选择 HTTP 8080 端口 curl -sSL ins ...
- 009 Android Fragment动态用法(实现动态菜单栏)设置控件为满屏状态
·1.MainActivity采用线性布局 2.在app--->res--->layout,右击new--->xml---->layout xml FILE <1> ...
- Java 简单的RPC 实现
借用了网上某大神的例子.... 目录结构是这样的... RpcFramework 主要是两个方法.一个是暴露服务,一个为引用服务.暴露服务的主要作用是声明一个接口的实现类.可以通过socket 远程调 ...
- perl中一些模块的ubuntu中依赖包
GD 先更新系统中的依赖包: sudo apt-get update sudo apt-get upgrade 进入 cpan> install GD 会提示没有安装libgd模块. 所以,先需 ...
- SQL批量提交修改业务
把你需要批量提交修改的东西在内存中修改完毕 然后执行以下代码 SqlConnection conn = new SqlConnection(ConnectionString);SqlDataAdapt ...
- dedecms 中变量函数
{dede:global.cfg_cmsurl/} 是网站根目录{dede:global.cfg_cmsurl/} 是当前目录{dede:global.cfg_templets_skin/} 当前模板 ...