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就能夠了。

相關文章
相關標籤/搜索