首先需要安装homebrew
, 不赘述了
php-fpm
php-fpm
是mac下自带的软件, 而且兼容不同的PHP版本, 不用额外安装, 但是fpm是需要配置的, 在/private/etc
下有个模板, 执行
cd /private/etc
cp php-fpm.conf.default php-fpm.conf
- 修改php-fpm.conf中的listen行, 将
listen = 127.0.0.1
改为listen = /tmp/php-fpm.sock
, 这样运行php-fpm后就会生成/tmp/php-fpm.sock
文件, nginx可以与这个socket文件交互了(当然也可以用默认的监听端口的方式, 但是指定socket的方式可以避免端口占用的问题, 我认为要放心一些) - 修改
error_log
项, 改为error_log = /usr/local/var/log/php-fpm.log
- 修改
pid
项, 改为pid = /usr/local/var/run/php-fpm.pid
, pid文件记录fpm的pid, 后续可以用cat /usr/local/var/run/php-fpm.pid
的方式获得pid sudo php-fpm
, 大功告成!
php
我安装了php56
, 后来又安装了php54
...brew install php56
即可
设置php56开机启动
ln -sfv /usr/local/opt/php56/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.php56.plist
在命令行中运行php时, 还需要指定shell环境下的php版本号, 导入环境变量, 在~/.zshrc
中添加一行export PATH="$(brew --prefix php56)/bin:$PATH"
, 重启zsh, 搞定!
问题解决
过程中碰到[crit] 2963#0: *138 connect() to unix:/tmp/php5-fpm.sock failed (13: Permission denied) while connecting to upstream
的问题, google到解决方案, 这是由于没有指定nginx的用户, nginx的用户没有权限访问fpm造成的
在/private/etc/php-fpm.conf
中找到listen
行, 在后面添加
listen.owner = nobody
listen.group = nobody
并且在/usr/local/etc/nginx/nginx.conf
中找到user
行, 默认的是被注释掉的, 取消注释, 这时的用户是nobody, 重启nginx和fpm, 问题得到解决
仍然存在的问题 && 收获
本来是为了装phpmyadmin才配的php环境, 现在还是没装好(╯‵□′)╯︵┻━┻ 始终报"Primary Script Unknown"的错误, 暂时不管它了, 换一个图形化工具管理MySQL好了, 还是做项目要紧...另外, 真的是对nginx配置非常不熟, 依然处于需要的时候各种google加复制粘贴, 有空一定要好好学习一下...
这次折腾发现了两个不错的链接nginx pitfalls和nginx配置分析, 后一篇给了几个不错的链接, 要好好消化下.
orz...