Nginx + PHP-FPM(FastCGI Process Manager)
简介
Apache的效率和承载能力受到大多人的诟病,Nginx 藉由 Nob-blocking 与 epool 这些特性,大幅提高了并发数和处理速度,愈发收到人们的喜爱,但由于 Nginx 本身只是单纯的 HTTP Server,如果执行 php,需要配合 CGI 来完成,Nginx 把请求转发给 fastcig 管理进程,处理之后在将结果返回给 Nginx。
什么是 PHP-FPM
相对于 Spawn-FCGI,PHP-FPM 在内存和CPU方面的控制更胜一筹,PHP-FPM 提供了更好的PHP进程管理方式。PHP-FPM 对于 PHP5.3 之前来说就是一个补丁,将 FastCGI 进程管理整合到PHP中,在 PHP 5.4 之后,PHP-FPM 已经集成到 PHP 的软件包中,在编译 PHP 过程中,增加 --enable-fpm
参数即可开启 PHP-FPM
环境介绍
系统环境
本文的安装环境采用:CentOS Linux release 7.1.1503 (Core)
软件获取
- Nginx
官方网站:http://nginx.org
最新稳定版本:nginx-1.8.1.tar.gz
帮助文档:http://nginx.org/en/docs
编译参数说明:http://nginx.org/en/docs/configure.html
- PHP
官方网站:http://www.php.net
稳定版:php-5.6.17.tar.gz
- 软件仓库
yum 仓库包含 CentOS 官方和 EPEL 两个安装源
安装 Nginx
安装模块依赖包
Nginx 的 gzip、rewrite、ssl 模块分别需要 zlib、pcre、openssl 的支持,可以通过源码或 yum 工具来安装
- 安装zlib
|
|
- 安装 pcre
|
|
- 安装 openssl
|
|
安装 Nginx
|
|
启动 Nginx,测试安装
Nginx 的默认端口是 80,启动之前要确保 80 端口没有被占用,如果想保留 80 端口,只需要在 Nginx 配置文件中,listen 80;
中80换成其他端口。
通过浏览器访问 Nginx Server 会出现欢迎页面,说明 nginx 安装正常
安装 PHP 及 PHP-FPM
- 安装依赖软件包
确保安装之前有安装 gd、png、curl、xml 等 lib 开发库
- 下载软件包
|
|
- 编译安装 php5.6
以下参数支持,ftp、图片函数、pdo 等,因为使用了 php 自带的 mysqlnd,所以不需要额外安装 mysql 的 lib 库,如果是 64 位系统,参数后面需要添加 –wtih-libdir=lib64
注: 编译参数可以根据实际需求,增加或者删减
- 配置 php-fpm
|
|
- 启动 PHP-FPM
|
|
配置 Nginx
nginx主配置文件
|
|
虚拟主机配置文件
增加测试站点www.zerounix.com
|
|
Nginx 将会连接回环地址 9000 端口执行 php 文件,需要使用 tcp/ip 协议,速度较慢,建议设置为 socket 方式连接。将 fastcgi_pass 127.0.0.1:9000
变更为 fastcgi_pass unix:/dev/shm/php-fpm.socket
; 同时变更 php-fpm 配置文件,在 listen = 127.0.0.1:9000
添加 listen = /dev/shm/php5-fpm.socket
;分别重启 nginx
和 php-fpm
服务
启动 Nginx
|
|
创建 PHP 测试文件
在/data/website/www.zerounix.com/phpinfo.php
添加
测试访问
|
|
说明 php 解析正常
总结
Nginx 安装配置相对容易,但是要调优就是另外一件事了,如果设定的不恰当,在高并发的时候,经常会出现 502 Bad Gateway。之后会研究下调优的为问题。