微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mac下安装nginx和php

一、前话:
1.1、环境选择:
重新在mac上配置PHP,原本mac上就自带有apach、PHP以及pgsql,如果图简单的话,直接用就可以了,不过在安装前我仔细思考了一下几个问题:
选apache还是Nginx:两个我了解的都比较少,相对而言我接触Nginx比较多,服务器用的也是Nginx,没办法谁叫Nginx负载高呢。为了更好的接触Nginx的环境,我决定还是统一下环境,方便今后使用,这是这次的主要关键;
安装PHP:Mac os自带PHP,好像是5.3.8,版本比较落后,不过这不碍事,因为以前我都是通过PHP-osx by Liip来管理PHP,所以不担心版本问题。不过PHP-osx by Liip好像没有fmp相关的配置,这样我我要和Nginx一起用的话就相对比较麻烦了,那我只能选择其他方案了
安装MysqL:这个就没有什么好疑问的了,目前我肯定不会去用pgsql,毕竟没接触过,需要有学习成本的,所以我在这篇纪录中把关于pgsql的部分都去掉了
1.2、那该如何安装:
既然我否定了系统自带的环境,那么就要通过别的方式去安装了,比如说手动编译。如果是手动编译的话,那么就会遇到下面几个问题:
编译费事,PHP依赖那么多程序,一个个安装,太累!
如果以后更新怎么办?灾难!!
不过好在mac下有自己的第三方管理程序:homebrew,而且相对而言我觉得他可能在某些方面更优越于linux下的apt-get、yum。如果通过homebrew来安装、管理运行环境的话,至少可以解决我几个问题:
安装问题,我不用繁琐的去安装依赖程序
升级问题,只需要brew update一次升级所有程序
版本问题,homebrew版本更新比较及时,而apt-get、yum来说,今年用的基本是几年前的稳定版本了
OK,下面的安装都是基于 homebrew,如果不熟悉或者还没安装有 homebrew 的话,可以查看这篇关于:Mac开发者利器-Homebrew介绍及安装。
二、安装Nginx
2.1、安装:
用 brew 一键安装 nignx:
1
brew install Nginx
如果需要安装其他 Nginx 的版本,可以 “brew edit Nginx” 打开修改 Nginx 的安装信息包 formula,认会用 vi 打开,在文件开头处修改 Nginx 相应版本的下载地址就行。
2.2、配置
brew 执行完后,Nginx 就安装好了。可以用以下指令对 Nginx 进行操作:
<div class="codetitle"><a style="CURSOR: pointer" data="88892" class="copybut" id="copybut88892" onclick="doCopy('code88892')"> 代码如下:

<div class="codebody" id="code88892">
#打开 Nginx
sudo Nginx

#重新加载|重启|停止|退出 Nginx
Nginx -s reload|reopen|stop|quit
打开 Nginx 后,认的访问端口 8080,如果要改为常用的 80 端口,则要修改 “/usr/local/etc/Nginx/Nginx.conf” 下监听(listen)端口值。
认的文件访问目录(root)是 “/usr/local/Cellar/Nginx/1.4.2/html”(这里的1.4.2是安装的Nginx的版本,文件夹名以安装的Nginx版本为准)。
2.3、把 Nginx 设置为开机启动运行:
<div class="codetitle"><a style="CURSOR: pointer" data="80606" class="copybut" id="copybut80606" onclick="doCopy('code80606')"> 代码如下:
<div class="codebody" id="code80606">
mkdir -p ~/Library/LaunchAgents/cp /usr/local/Cellar/Nginx/1.4.2/homebrew.mxcl.Nginx.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.Nginx.plist

不过试了一下,不是超级用户登陆,而是普通用户登陆,并且监听的端口在1024以下的(例如把认的8080端口改为了80端口),Nginx 开机是启动不了。因此,要 Nginx 开机启动的话,需要给予它管理员权限:
<div class="codetitle"><a style="CURSOR: pointer" data="58580" class="copybut" id="copybut58580" onclick="doCopy('code58580')"> 代码如下:
<div class="codebody" id="code58580">
2
sudo chown root:wheel /usr/local/Cellar/Nginx/1.4.2/bin/Nginx
sudo chmod u+s /usr/local/Cellar/Nginx/1.4.2/bin/Nginx

三、安装MysqL
3.1、安装:
<div class="codetitle"><a style="CURSOR: pointer" data="98101" class="copybut" id="copybut98101" onclick="doCopy('code98101')"> 代码如下:
<div class="codebody" id="code98101">
brew install MysqL

homebrew安装的版本同样是当前最新的稳定版,安装的过程比较简单,不过初始化就相对麻烦很多了,这里我失败了很多次。
3.2、配置:
3.2.1、初始化
初始安装 MysqL 的一些配置数据库(例如:information_schema、MysqL
<div class="codetitle"><a style="CURSOR: pointer" data="79538" class="copybut" id="copybut79538" onclick="doCopy('code79538')"> 代码如下:<div class="codebody" id="code79538">
sudo MysqL_install_db \
--verbose --user=whoami \
--basedir="$(brew --prefix MysqL)" \
--datadir=/usr/local/var/MysqL \
--tmpdir=/tmp \
--explicit_defaults_for_timestamp

这里我遇到了两个问题,过程都没纪录,这里简单提下解决方案:
系统建议我添加“–explicit_defaults_for_timestamp”;
安装过程中会遇到几个error,说是db的几个文件不存在;
网上搜索了下,大多是建议将/usr/local/var/MysqL这个目录修改下权限;
我操作后发现可能不是这样的,造成这个问题在于我在之前操作遇到了错误中止了,生成一个不完整var目录,所以每次安装失败我就删除以下文件,重新初始化就好了
<div class="codetitle"><a style="CURSOR: pointer" data="61784" class="copybut" id="copybut61784" onclick="doCopy('code61784')"> 代码如下:<div class="codebody" id="code61784">
sudo rm /usr/local/opt/MysqL/my.cnf
sudo rm -R /usr/local/var/MysqL/

待安装完毕后,会出现一大段MysqL相关信息,运行下面的命令启动MysqL
<div class="codetitle"><a style="CURSOR: pointer" data="88488" class="copybut" id="copybut88488" onclick="doCopy('code88488')"> 代码如下:<div class="codebody" id="code88488">
/usr/local/opt/MysqL/bin/MysqLd_safe &

执行完后,就可以在终端里运行 “MysqL”,直接进入MysqL数据库里。对,不用输入密码,可以直接连接,初始认是可以匿名访问的。
3.2.2、修改密码
超级用户 “root” 也是没设密码,要设密码的话可以执行下面指令
<div class="codetitle"><a style="CURSOR: pointer" data="8378" class="copybut" id="copybut8378" onclick="doCopy('code8378')"> 代码如下:<div class="codebody" id="code8378">
/usr/local/opt/MysqL/bin/MysqLadmin -u root password 'new-password'

现在访问 MysqL 还是不用密码就可以连接,如果要设置一些登陆密码的安全访问限制,则需执行下面的 MysqL安全安装指令
<div class="codetitle"><a style="CURSOR: pointer" data="75266" class="copybut" id="copybut75266" onclick="doCopy('code75266')"> 代码如下:<div class="codebody" id="code75266">
/usr/local/opt/MysqL/bin/MysqL_secure_installation

主要是设置修改root密码(设置过了可以不用设置,略过)、删除匿名访问、删除root网络访问删除test数据库。指令执行完后,登陆MysqL就需要密码验证了
<div class="codetitle"><a style="CURSOR: pointer" data="74602" class="copybut" id="copybut74602" onclick="doCopy('code74602')"> 代码如下:<div class="codebody" id="code74602">
MysqL -u root -p

3.3、开机启动MysqL
<div class="codetitle"><a style="CURSOR: pointer" data="50035" class="copybut" id="copybut50035" onclick="doCopy('code50035')"> 代码如下:<div class="codebody" id="code50035">
mkdir -p ~/Library/LaunchAgents/cp /usr/local/Cellar/MysqL/5.6.13/homebrew.mxcl.MysqL.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.MysqL.plist

至此,MysqL安装完毕。
四、安装PHPPHP-fpm…
4.1、安装
Mac是预装了PHP,不过很多扩展都没安装,目测最多只能在终端里执行下PHP指令,所以我选择重新安装PHP。由于 brew 认是没有 PHP 安装,所以要使用 “brew tap” 来安装 brew 的第三方程序包,这里使用 josegonzalez 的PHP安装包,具体操作如下:
<div class="codetitle"><a style="CURSOR: pointer" data="23736" class="copybut" id="copybut23736" onclick="doCopy('code23736')"> 代码如下:<div class="codebody" id="code23736">
brew tap homebrew/dupes
brew tap josegonzalez/homebrew-PHP

执行完后,就可以用 brew 安装PHP了。这里PHP有几个版本可以安装,具体可以执行 “brew search PHP” 查看一下有什么PHP版本可以安装,一般会有“PHP52、PHP53、PHP54、PHP55”版本,我安装的是最新的PHP5.5版本。由于PHP5.5版本已经内嵌了 FPM(FastCGI Process Manager),在安装选项里标明就行,本人 PHP 的安装配置指令如下:
<div class="codetitle"><a style="CURSOR: pointer" data="76075" class="copybut" id="copybut76075" onclick="doCopy('code76075')"> 代码如下:<div class="codebody" id="code76075">
sudo brew install PHP55 \
--with-debug \
--with-fpm \
--with-gmp \
--with-homebrew-openssl \
--with-imap --with-intl \
--with-libMysqL \
--without-bz2 \
--without-MysqL \
--without-pcntl \
--without-pear

更多的安装选项可以通过 “brew options PHP55″ 查看。
提示:–with-cgi不能和–with-fpm一起安装,互相冲突
指令执行完后,PHPPHP-fpm 就安装好了。
4.2、配置
由于是重装PHP,之前系统预装的PHP还没卸载,因此在终端调用PHP时,还是以之前系统的PHP版本做解析,所以这里需要修改path,指定 PHP 的解析路径。在~/.bashrc(没有则创建)最后加入一行:
<div class="codetitle"><a style="CURSOR: pointer" data="19059" class="copybut" id="copybut19059" onclick="doCopy('code19059')"> 代码如下:<div class="codebody" id="code19059">
export PATH="$(brew --prefix PHP54)/bin:$PATH"
[html]
[code]
source ./.profile

不存在这文件的朋友请参照这片文章进行配置:Mac系统终端命令行不执行命令 总出现command not found解决方法
OK,PHP-fpm安装完成。
修改配置 PHP 或者 PHP-fpm 的话,可以修改 “/usr/local/etc/PHP/5.5/PHP.ini” 、 “/usr/local/etc/PHP/5.5/PHP-fpm.conf”。
详细配置方法可以参照相关资料:
PHP-fpm 启动参数及重要配置详解
Linux平滑编译升级PHP至5.5.0
启动 PHP-fpm 的话就直接在终端里执行 “PHP-fpm”,认打开 PHP-fpm 会显示一个状态 shell 出来,也可以把 PHP-fpm 的配置文件里的 “daemonize = no” 改为 “daemonize = yes”,就会以后台守护进程的方式启动,对于刚修改配置文件,可以执行 “PHP-fpm -t” 来检测配置有没有问题。
4.3、开机启动
开机启动 PHP-fpm(下面的 5.5.3 是当前安装 PHP 的具体版本号):
<div class="codetitle"><a style="CURSOR: pointer" data="43222" class="copybut" id="copybut43222" onclick="doCopy('code43222')"> 代码如下:<div class="codebody" id="code43222">
mkdir -p ~/Library/LaunchAgents/cp /usr/local/Cellar/PHP54/5.5.3/homebrew-PHP.josegonzalez.PHP55.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/homebrew-PHP.josegonzalez.PHP55.plist

为了方便,写了个启动、关闭、重启 PHP-fpm 的 shell 脚本:
<div class="codetitle"><a style="CURSOR: pointer" data="70734" class="copybut" id="copybut70734" onclick="doCopy('code70734')"> 代码如下:<div class="codebody" id="code70734">
#!/bin/shparam=$1start()
{
fpms=ps aux | grep -i "<a href="https://www.jb51.cc/tag/PHP/" target="_blank" class="keywords">PHP</a>-fpm" | grep -v grep | awk '{print $2}'
if [ ! -n "$fpms" ]; then
PHP-fpm
echo "PHP-FPM Start"
else
echo "PHP-FPM Already Start"
fi
}stop()
{
fpms=ps aux | grep -i "<a href="https://www.jb51.cc/tag/PHP/" target="_blank" class="keywords">PHP</a>-fpm" | grep -v grep | awk '{print $2}'
echo $fpms | xargs kill -9 for pid in $fpms; do
if echo $pid | egrep -q '^[0-9]+$'; then
echo "PHP-FPM Pid $pid Kill"
else
echo "$pid IS Not A PHP-FPM Pid"
fi
done
}case $param in
'start')
start;;
'stop')
stop;;
'restart')
stop
start;;
)
echo "Usage: ./PHPfpm.sh start|stop|restart";;
esac

五、设置 NginxPHP-fpm 配置
在server块中添加解析文件类型“index index.html index.htm index.PHP;”
<div class="codetitle"><a style="CURSOR: pointer" data="35081" class="copybut" id="copybut35081" onclick="doCopy('code35081')"> 代码如下:<div class="codebody" id="code35081">
server {
listen 80;
server_name localhost;
index index.html index.htm index.PHP;
......
}

打开 Nginx 认注释掉的PHP location设置,修改如下(具体配置参数,例如路径,这里以我本地安装为准):
<div class="codetitle"><a style="CURSOR: pointer" data="68598" class="copybut" id="copybut68598" onclick="doCopy('code68598')"> 代码如下:<div class="codebody" id="code68598">
location ~ .
.(PHP|PHP5)?$ {
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.PHP;
fastcgi_param SCRIPT_FILENAME /Library/WebServer/public_html$fastcgi_script_name;
include /usr/local/etc/Nginx/fastcgi_params;
#include fcgi.conf;
}

修改目录用户用户组:
<div class="codetitle"><a style="CURSOR: pointer" data="41490" class="copybut" id="copybut41490" onclick="doCopy('code41490')"> 代码如下:<div class="codebody" id="code41490">
sudo chown www:www /Library/WebServer/public_html

OK,这样就可以在访问目录下(认是/Library/WebServer/public_html)执行 PHP 文件了。嗯,赶快输出一下 “PHPinfo()” 吧~
<div class="codetitle"><a style="CURSOR: pointer" data="49371" class="copybut" id="copybut49371" onclick="doCopy('code49371')"> 代码如下:<div class="codebody" id="code49371">
<?PHP
PHPinfo();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐