解决Nginx启动错误:nginx.pid文件缺失及开机自动启动配置方法
安装nginx并配置

命令如下
brew install nginx
测试修改是否成功
sudo nginx -t
启动
sudo nginx
重新启动
sudo nginx -s reload
安装NGINX后,运行nginx -s重新加载将导致以下错误:
此错误的原因是没有nginx.pid文件。根据在线找到的信息,当NGINX启动时,将在目录/usr/local/var/run/run//directory/usr/usr/usr/local/var/run/run/中创建一个名为nginx.pid的文件。执行nginx -s停止时,将删除此文件。然后,当您执行nginx -s重新加载以重新启动时,它将首先删除然后创建。此处错误的原因是该文件不存在,也无法删除。
解决方案:运行启动命令
sudo nginx
自动启动
方法1
确认存在Homebrew.mxcl.nginx.plist文件
ln -sfv /usr/local/opt/nginx/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist
方法2:
sudo brew services start nginx
配置主机
修改本地主机文件
sudo vim /etc/hosts
添加一个127.0.0.1 Localhost指针,然后在浏览器中输入LocalHost:8080以访问它。以下图像出现在最初已成功配置的NGINX表面上。
NGINX的初始端口为8080;
修改Nginx的端口
vim /usr/local/etc/nginx/nginx.conf
只需将8080的听众修改为80; server_name是主机域名,这是Localhost。您可以在 /etc /hosts中添加本地IP域名指针,然后在NGINX中添加域名,并且可以通过输入域名地址通过浏览器访问它;
nginx.conf文件配置
cd /usr/local/etc/nginx
vim nginx.conf
修改后的nginx.conf代码如下
user root owner;
worker_processes 4;
error_log /usr/local/var/log/nginx/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
pid /usr/local/var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /usr/local/var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
include servers/*;
include vhosts/*;
}
nginx.conf有一个备份文件,文件名nginx.conf.default
是否存在是否存在,需要预先确认access_log,error_log和PID的相应文件位置;否则,nginx将报告错误,并且无法启动;
修改nginx.conf,保存和退出后,您可以运行
sudo nginx -t
执行测试以检查错误;
这意味着配置成功;
配置虚拟主机
cd /usr/local/etc/nginx
mkdir vhosts
cd vhosts
vim www.test.com.conf
虚拟主机代码如下
server {
#监听端口
listen 80;
#虚拟主机域名
server_name www.test.com;
#网站根目录
root /Users/aaa/wroot/test;
#定义路径下默认访问的文件名
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
#打开目录浏览功能,可以列出整个目录
#autoindex on;
}
access_log /usr/local/var/log/www.test.com-access.log main;
error_log /usr/local/var/log/www.test.com-error.log error;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
独立运行的辅助列的分析
过去,我使用Apache来解析辅助列,只需要在相应的目录中添加.htaccess文件并在文件中配置规则。 nginx不支持.htaccess。因此,将其直接配置在相应的主机文件中
location /a {
index index.php index.html;
try_files $uri $uri/ /a/index.php?query_string;
}
安装PHP
我的Mac使用PHP7.1安装。在新型自制的新型自制中安装PHP的命令如下:
首先安装PHP扩展
brew tap homebrew/homebrew-php
安装PHP
brew install php@7.1
安装酿造时,您无需使用sudo命令或通过sudo输入超级管理员模式。现在,使用第二个命令安装时,将自动安装一些基于PHP的扩展;
安装PHP并配置主机后,通过浏览器使用PHP代码访问页面文件时将出现以下错误;
根据搜索日志,发现这是PHP-FPM配置问题。
#0: *70 kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: www.test.com, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "www.test.com"
此错误是由未启动PHP-FPM引起的,但是如果您在命令终端中输入PHP-FPM以启动PHP-FPM,则以下错误也将出现
我们首先以以下方式配置PHP-FPM,以解决错误;
配置PHP-FPM
修改文件
sudo cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
edit/private/etc/php-fpm.conf文件
如图所示,修改错误日志的存储路径,请先在此路径下实现该文件;
输入php-fpm.d目录
cd /private/etc/php-fpm.d
sudo cp www.conf.default www.conf
cd ..
sudo vim php-fpm.conf
设置PID文件的位置,这是我在此处放置的绝对路径。
修改完成后,请记住启动PHP-FPM命令终端并直接运行。
此时,NGINX可以正常解析PHP文件,并且502错误已消失。
发现页面上Phpinfo()生产的版本与PHP -V和PHP -FPM -V的版本不一致。检查信息后,我发现
通过Brew安装PHP后,相应的PHP和PHP-FPM存储目录如下:
php目录 /usr/local/Cellar/php@7.1/版本号/bin
php-fpm目录 /usr/local/Cellar/php@7.1/版本号/sbin
配置目录 /usr/local/etc/php/7.1
Mac系统带有PHP,安装目录位置
php /usr/bin/php
php-fpm /user/sbin/php-fpm
您需要使用通过Brew Install PHP安装的版本来替换系统随附的PHP。
方法1 :(该操作相对简单)
brew link --force php@7.1
使用此方法时,出现以下提示
这应该是一个许可问题,我在网上找到了一个解决方案
$ sudo mkdir /usr/local/sbin
$ sudo chown -R whoami:admin /usr/local/sbin
$ brew link php71
请记住,用您当前登录的用户名替换Whoami,最后运行后没有错误。真的哭了起来! ~~
然后按照提示运行以下命令;
echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.bash_profile
方法2:操作相对复杂
删除或重命名这两个目录,否则您无法使用已安装的Brew Spand PHP。 REDIS使用软链方法来重新定位PHP,其结果是PHP -V和PHPINFO()版本不一致。
cd /usr/local/bin
ln -s ../Cellar/php@7.1/7.1.26/bin/php php
通常,在Brew安装PHP之后,它将自动在/usr/local/bin目录中与PHP建立软连接。 PHP-FPM要求我们手动将其关联;
ln -s /usr/local/Cellar/php\@7.1/7.1.26/sbin/php-fpm /usr/local/bin/php-fpm
创建软连接后,分别关闭终端,重新输入并运行PHP -V和PHP -FPM -V,以查看版本是否一致。
重新启动php-fpm和nginx; (我直接重新启动计算机)
自动在启动上启动PHP-FPM
创建一个自动启动文件
Label
org.phpfpm
RunAtLoad
Program
/usr/local/sbin/php-fpm
可以通过php-fpm的位置查看php-fpm的路径,查找 / -Name php-fpm,php-fpm。确保确保相应目录中的版本与PHP -FPM -V版本一致;
配置自动启动
sudo chown messia:wheel ~/Library/LaunchAgents/org.php.php-fpm.plist
sudo chmod +x ~/Library/LaunchAgents/org.php.php-fpm.plist
launchctl load -w ~/Library/LaunchAgents/org.php.php-fpm.plist
检查初创公司是否成功
launchctl list | grep php
复制代码
安装Redis和PHP相应的REDIS扩展
使用啤酒安装
brew install redis
安装目录
/usr/local/bin
检查版本
redis-server -v
redis-cli -v
在后台运行redis
brew services start redis
PHP安装了Redis的扩展
使用PECL命令安装;使用Brew安装PHP时,PECL命令已为我们安装,因此我们可以在此处直接使用它。
让我们首先输入php bin目录,以查看命令是否存在。相应的路径如下:cd/usr/local/celler/php@7.1/7.1.1.26这里7.1.26是我通过brew install php@7.1我安装的PHP的特定版本通过LS命令的文件夹
MAC系统带有PHP。您可以检查当前的PHP版本是否与您通过PHP -V安装的安装是否一致,也可以使用LS -AL在CD/USR/LOCAL/BIN/BIN目录中查看它是一致的
如果是在Brew安装后的目录,则可以使用以下命令来重新启动关联;
cd /usr/local/bin
ln -s ../Cellar/php@7.1/7.1.26/bin/php php
ln -s ../Cellar/php@7.1/7.1.26/bin/pecl pecl
重新启动关联后,请记住退出客户端终端,然后输入并运行PHP -V以查看版本号。修改PECL下载目录和高速缓存目录的权限,否则可能会失败;
sudo chown -R 自己账号:分组 目录
sudo chown -R messia:wheel /private/tmp/pear/
安装Redis的扩展依赖关系
pecl install igbinary
现在您可以安装redis,命令如下:
pecl install redis
安静地等待安装完成并确认是否成功安装了该模块;
php -m|grep r
如图所示
在php.ini文件中确认
确定SO文件的位置
查看文件
REDIS安装现已完成
开始重新服务
redis-server
自动启动redis命令
brew services start redis
检查Redis是否成功开始
ps -ef | grep -E 'php|nginx|redis'
安装mysql
只需使用以下命令安装mySQL即可;
brew install mysql
设置MySQL密码,先决条件是首先启动MySQL,否则将报告错误。但是,本地开发环境没有配置密码。
sudo mysql_secure_installation
MySQL启动命令
sudo mysql.server start
启动mysql
sudo brew services start mysql
重新启动
brew services restart mysql
phpmyadmin相关配置
config.sample.inc.php 另存文 config.inc.php
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
解决方案:似乎8.0必须需要密码;修改my.cnf
cd /usr/local/etc
vim my.cnf
新增一行
default_authentication_plugin = mysql_native_password
登录到数据库并修改密码
mysql -u root -p
mysql>use mysql;
ALTER USER root@'localhost' IDENTIFIED WITH mysql_native_password BY '您的密码';
mysql>FLUSH PRIVILEGES;
Laravel链接数据库错误处理
SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode'
can't be set to the value of 'NO_AUTO_CREATE_USER'
修改Database.php
'mysql' => [
'modes' => [
'ONLY_FULL_GROUP_BY',
'STRICT_TRANS_TABLES',
'NO_ZERO_IN_DATE',
'NO_ZERO_DATE',
'ERROR_FOR_DIVISION_BY_ZERO',
'NO_ENGINE_SUBSTITUTION',
],
],
可以修复;