之前在mac上使用自带的apache、php配置过,都是百度东拼西凑弄,都没记录。这次修改成nginx环境,写个笔记记录一下,方便以后自己查看,也希望能借花献佛,帮助他人。内容都是网上拼凑的,感谢网络上各位无私奉献的大神们。
安装xcode-select
在通过brew安装某些应用时需要使用到此程序进行编译(用词如果不准确还请大家谅解),所以为了避免安装失败,建议先安装;
xcode-select --install
复制代码
安装homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
复制代码
[系统会在/usl/local/*这个目录下,添加一系列文件]
以上信息来源:
安装nginx及配置
命令如下
brew install nginx
复制代码
测试修改是否成功
sudo nginx -t
复制代码
启动
sudo nginx
复制代码
重启
sudo nginx -s reload
复制代码
安装好nginx后直接运行nginx -s reload
会出现如下错误:
解决办法: 运行启动命令
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
复制代码
配置主机
修改本地hosts文件
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,新homebrew安装php的命令如下:
先安装php扩展
brew tap homebrew/homebrew-php
复制代码
在安装php
brew install [email protected]
复制代码
采用brew安装时,无需使用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
复制代码
编辑/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/[email protected]/版本号/bin
php-fpm目录 /usr/local/Cellar/[email protected]/版本号/sbin
配置目录 /usr/local/etc/php/7.1
复制代码
mac系统自带了php,安装目录位置
php /usr/bin/php
php-fpm /user/sbin/php-fpm
复制代码
需要把系统自带的php更换为通过brew install php安装的版本,
方法一:(操作相对简单)
brew link --force [email protected]
复制代码
使用这个方法时,结果出现了下面的提示
应该是权限问题,网上找了下解决方法$ sudo mkdir /usr/local/sbin
$ sudo chown -R whoami:admin /usr/local/sbin
$ brew link php71
复制代码
记得把whoami换成自己当前登陆的用户名,运行后终于不报错了。真的泪奔啊!~~
然后按照提示运行如下命令;
echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/[email protected]/sbin:$PATH"' >> ~/.bash_profile
复制代码
方法二:操作相对复杂
要么把这两个目录删除,或重命名,否则无法使用brew 安装的php,后面redis使用了软链的方式,重新关联了php,结果出现了php -v 和phpinfo()版本不一致的情况;
cd /usr/local/bin
ln -s ../Cellar/[email protected]/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
创建自动启动文件
"1.0" encoding="UTF-8"?>
"-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
"1.0">
Label
org.phpfpm
RunAtLoad
<true/>
Program
/usr/local/sbin/php-fpm
复制代码
其中php-fpm的路径,可以通过whereis php-fpm
,find / -name php-fpm
,which 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安装
brew install redis
复制代码
安装目录
/usr/local/bin
复制代码
检查版本
redis-server -v
redis-cli -v
复制代码
后台运行redis
brew services start redis
复制代码
php安装redis的扩展
采用pecl命令进行安装; pecl命令,在使用brew 安装php时,已经为我们安装上了,这里我们直接使用即可。
我们先进入php的bin目录看下命令是否存在,对应路径如下: cd /usr/local/Celler/[email protected]/7.1.26
这里的7.1.26为我通过brew install [email protected]安装的php具体版本号,大家可以通过ls命令查看文件夹下是否存在pecl命令
mac系统是自带了php的,大家可以通过php -v检查当前的php 版本是否与自己安装的一致,或者也可以在 cd /usr/local/bin
目录,使用 ls -al
查看
如若为指向brew 安装后的目录,可以使用如下命令,重新进行软关联;
cd /usr/local/bin
ln -s ../Cellar/[email protected]/7.1.26/bin/php php
ln -s ../Cellar/[email protected]/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服务
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',
],
],
复制代码
即可修复;