mac 自带php-fpm开启报错概括

在mac上尝试安装nginx+php7+mysql,遇到了很多的坑,总结方法以下:
首先在启动了nginx(brew安装)php

$ sudo nginxhtml

运行php文件报错,查看nginx错误日志:mysql

2020/07/06 01:46:32 [notice] 852#0: signal process started
2020/07/10 19:05:40 [error] 4075#0: *1 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1:8080"nginx

这是由于没有启动php-fpm致使的(本来觉得只有未启动php-fpm的时候才会报这个错,其实否则,详见下文),可是在启动php-fpm时遇到以下报错:sql

$ php-fpm
[07-Jul-2020 18:12:16] WARNING: Nothing matches the include pattern '/private/etc/php-fpm.d/*.conf' from /private/etc/php-fpm.conf at line 126.
[07-Jul-2020 18:12:16] ERROR: failed to open error_log (/usr/local/var/log/php-fpm.log): Permission denied (13)
[07-Jul-2020 18:12:16] ERROR: failed to post process the configuration
[07-Jul-2020 18:12:16] ERROR: FPM initialization failedapache

根据第一个warning得知,应该是 /private/etc/php-fpm.d 目录下缺乏一个后缀为.conf的文件,打开目录能够看到:服务器

php-fpm.dphp7

$ ls
www.conf.defaultsocket

复制文件到/private/etc/php-fpm.d下:ide

$ cp www.conf.default www.conf

再次启动php-fpm,竟然又报错了:

$ php-fpm
[07-Jul-2020 20:33:09] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
[07-Jul-2020 20:33:09] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
[07-Jul-2020 20:33:09] ERROR: Unable to create the PID file (/usr/var/run/php-fpm.pid).: No such file or directory (2)
[07-Jul-2020 20:33:09] ERROR: FPM initialization failed

前两行notice是帐号权限不足(能够忽略,或者用root帐号启动便可),后面这个也是默认的路径不存在,没法建立PID文件,找到/private/etc/php-fpm.conf文件,将pid = /run/php-fpm.pid改为本身的路径,我直接修改为了绝对路径:

pid = /usr/local/var/run/php-fpm.pid

再次启动,再次报错:

$ php-fpm

[07-Jul-2020 00:09:47] ERROR: unable to bind listening socket for address '127.0.0.1:9000': Address already in use (48)
[07-Jul-2020 00:09:47] ERROR: FPM initialization failed

错误显而易见了,9000端口被占用了。这种状况大多数是因为软件冲突、或者默认端口设置不正确致使的,此时须要查看究竟哪一个进程占用了端口,用命令 lsof -i:端口号 查看具体端口占用状况:(如下代码只作命令示例)

$ lsof -i:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php-fpm 1111 lucius 7u IPv4 0xaec77521d4cee5d5 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 1112 lucius 0u IPv4 0xaec77521d4cee5d5 0t0 TCP localhost:cslistener (LISTEN)
php-fpm 1113 lucius 0u IPv4 0xaec77521d4cee5d5 0t0 TCP localhost:cslistener (LISTEN)

结束占用端口的进程: killall 进程名
虽然不建议用这种方法来解决冲突问题,但某些状况下仍是能够直接结束掉占用进程的。
到如今为止,看起来都没有什么问题了,接着运行php文件,发现竟然仍是有错。。。(此时心里已经快崩溃了)
接着查看nginx错误日志:

07/Jul/2020 12:30:14 [error] 1258#0: *29 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:80/index.php", host: "localhost:8080"

报错信息和一开始判断php-fpm未启动时的错误一致,起初我仍是坚信是个人php-fpm启动有问题,可是直到再次检查nginx.conf时才意识到问题所在。你们请看下图:

58 # proxy the PHP scripts to Apache listening on 127.0.0.1:80
59 location ~ .php$ {
60 proxy_pass http://127.0.0.1;
61 }
62
63 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
64
65 location ~ .php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
70 include fastcgi_params;
71 }

59行~61行的备注写的清清楚楚明明白白,这个配置在apache服务器上才须要启用,而nginx的配置在65~71行,这两个配置同时解开注释的话,那确定是要冲突的啊,是我一开始配置nginx时错误的解开了两个。。。因此注掉59~61就能够了。

相关文章
相关标签/搜索