有关于mac系统下nginx+php+mysql环境的搭建,大概需要说明的如下:
1.安装方式有两种,一种是下载源码包编译安装,一种是采用Homebrew下载安装(此处我采用的是Homebrew方式)。
2.Homebrew安装php之前需要安装xcode命令行插件(Command Line Tools),否则安装php会报错。
安装Command Line Tools
xcode-select --install
3.用Homebrew安装前可以通过options命令查看下安装参数,nginx和mysql安装不需要特别的参数设置,直接brew install即可。
Homebrew安装nginx和mysql
brew install mysql , brew install nginx。
PHP安装要加命令参数排除apache模块,加载php-fpm和mysql,同时因为brew默认没有php-fpm需要事先添加添加。
Homebrew添加php-fpm
Homebrew安装PHPbrew tap homebrew/dupes
brew tap homebrew/php
brew install --without-apache --with-fpm --with-mysql php54
4.Homebrew安装默认情况下项目在/usr/local/Cellar目录下,相应配置文件在/usr/local/etc目录下,进程运行在/usr/local/var/run目录下。
5.安装成功后,通常会设置开机启动,这里mac系统的开机启动是写在~/Library/LaunchAgents目录下的,具体语句及说明如下:
复制php项目目录下的启动文件到mac自启动目录下,这里启动文件名为homebrew.mxcl.php54.plist
cp /usr/local/Cellar/php54/php5.4.33/homebrew.mxcl.php54.plist ~/Librarb/LaunchAgents/
mysql和nginx自启动设置类似。
6.nginx安装成功后需要对nginx进行配置,主要内容大概包括:nginx线程设置、错误日志设置和http设置
worker_processes 1;
error_log /usr/local/etc/nginx/log/error.log warn;
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/etc/nginx/log/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;include /usr/local/etc/nginx/vhosts/*.conf;
}
7.对站点信息进行配置,个人存放在/usr/local/etc/nginx/vhosts/目录下,文件主要设置了监听端口、域名、默认首页和重写规则
server {
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /users/admin/Sites/PHPWeb/helloLaravel/public;
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log /usr/local/etc/nginx/log/access.log;
}
8.PHP安装成功后,目前不需要什么特定的配置,默认安装会自带PHP-FPM,需要启动PHP-FPM,同样PHP-FPM也不需要特别的配置。
9.mysql安装成功后需要初始化mysql配置数据库,并修改初始密码。
10.php拓展模块安装,以mcrypt为例,因为php5.4源码包自带mcrypt,下载解压编译安装后会默认安装到php的extensions目录下的no-debug-non-zts目录下
这里以我的安装目录为例
/usr/local/Cellar/php54/5.4.33/lib/php/extensions/no-debug-non-zts-20100525
之后在php.ini文件下的extensions处添加如下配置:
extension=/usr/local/Cellar/php54/5.4.33/lib/php/extensions/no-debug-non-zts-20100525/mcrypt.so
这里我的php.ini文件在/usr/local/etc/php/5.4目录下,添加后可以通过php -m查看是否加载mcrypt模块,要想nginx成功应用还有后重启php-fpm。
大致说明如上,具体安装可参考如下博客:
http://dhq.me/mac-install-nginx-mysql-php-fpm
http://blog.frd.mn/install-nginx-php-fpm-mysql-and-phpmyadmin-on-os-x-mavericks-using-homebrew/
以下额外说明php拓展模块的安装
http://www.tantai.org/19/mac-os-x-php-mcrypt
以下作一些概念介绍,方便理解:
[1]Homebrew
Homebrew是mac下开源的包管理软件,由Max Howell组织编写,这个管理工具在Ruby on Rails社区得到普及,并因为其拓展性得到好评(维基百科)。
Homebrew是mac下用来下载管理软件的工具,你可以通过homebrew下载开发工具,也可以通过下载源码包编译安装,只不过brew方式更加方便简洁。
通过Ruby脚本安装Homebrew
Homebrew常用命令:
查询软件
brew search soft
查看某软件命令参数
brew options soft
安装软件
brew install soft
删除软件
brew remove soft
通过Homebrew安装Nginx、Mysql、PHP
默认会安装到/usr/local/Cellar目录下,相应配置文件在/usr/local/etc目录下,进程运行在/usr/local/var/run目录下。
[2]PHP HttpServer
php有四种运行模式:模块模式、CGI、fastcgi、CLI。
模块模式以mod_php5模块形式集成,常用在Apache服务器下。
CGI是比较老的一种方式了,现在使用的很少,渐渐被fastcgi取代。
fastcgi是当前使用比较多的运行模式,目前php内置的PHP-CGI就是fastcgi管理器。
CLI模式就是常用的php命令行,比如php -v 、php -m
apache2handler是apache 自带运行php的方式
Apache的工作模式是Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这 样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反 应更快,性能较高。
这就导致了当Apache服务器进行压力测试后其负载仍旧居高不下。
CGI
CGI全称是“公共网关接口”(Common Gateway Interface),是HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具。
CGI是比较老的模式了,这几年都很少用了。cgi方式遇到连接请求先要创建cgi的子进程,然后处理请求,处理完后结束这个子进程。这就是fork- and-execute模式。所以用cgi方式的服务器有多少连接请求就会有多少cgi子进程。子进程反复加载是cgi性能低下的主要原因。
FastCGI
FastCGI FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次
FastCGI执行流程如下:
1.Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3.当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4.FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。
PHP-CGI
PHP- CGI是PHP自带的FastCGI管理器。可以对其直接启动。现在不管是lighttpd还是nginx都可以与php-cgi进行组合运行php,其 中lighttpd直接组合php-cgi运行php,还算比较稳定,但nginx跟php-cgi直接组合运行php,php-cgi进程经常崩溃,而 且占用的内存也比较高。
PHP-CGI的缺点有
1.php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启
2.直接杀死php-cgi进程,php就不能运行了。
PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。
PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置
Spawn-FCGI
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作
FastCGI 像是一个常驻(long-live)型的CGI,它可以一直执行着,激活后,不必每次都花费时间去fork(fork是fork-and-execute 模式)。它还支持分布式的运算,即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI 是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是 CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
目前常见的php HttpServer Stack有三种:
1.Apache+mod_php5
2.lighttp+spawn-fcgi
3.nginx+PHP-FPM