原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://xuding.blog.51cto.com/4890434/1743713
一、LNMP架构搭建
1.LNMP实现方案
(1)LAMP架构支持三种httpd+php方案
1) 在httpd服务中集成模块(libphp5.so)化方式
2) CGI方式(一台hhtpd服务器响应http请求时调用新的进程处理php请求)
3) fastcgi后端提供cgi server process方式(C/S架构的方式使得php服务分离出来成为独立服务,通过监听套接字和前端httpd扮演的代理客户端交互,通过php-XXX与后端的服务进行动态调用)
(2)LNMP架构仅支持一种Nginx+php结合方式:
Nginx:集成ngx_http_fastcgi_module模块实现代理请求功能,例如:
server{
...
location~* \.php$ {
…}
}
php-fpm:提供fastcgi模式,独立进程处理,有空闲等待进程方式处理前端 ngx_http_fastcgi_module发送的请求
php-mysql:mysql-server, mariadb-server驱动和后面的server服务进行交互
注意:
Nginx不支持动态装载米快,所以要确保编译php工作为fpm机制时将ngx_http_fastcgi_module编译到Nginx程序中,在./configure时候要加入--enable-fpm选项。
2.php-fpm程序包
php-fpm包提供fcgi模式的php程序端,其不能和php程序包同时安装。RPM形式安装完成后提供主配置文件/etc/php-fpm.conf,分段配置文件/etc/php-fpm.d/*。
/etc/php-fpm.d/www.conf配置文件(根据实际情况配置):
; | 表示注释该行信息 |
listen = 127.0.0.1:9000 | 监听端口,0.0.0.0表示本机所有地址。 支持远程调用应该监听在本机的远程通信端口 |
;listen.backlog = -1 | 后援等待队列的长度,-1表示无限制 |
listen.allowed_clients = 127.0.0.1 | 授权允许可请求主机,基于IP的控制机制,注释表示允许所 |
;listen.owner = nobody | 监听服务进程的主机默认以什么用户身份运行,nobody表示普通用户 |
;listen.group = nobody | 监听服务进程的主机默认以什么用户组身份运行 |
;listen.mode = 0666 | 监听服务进程的主机默认以什么权限运行 |
user = apache | 用户,RPM包制作者修改,编译安装非此结果 |
group = apache | 用户组,RPM包制作者修改,编译安装非此结果 |
pm = static|dynamic | 进程控制器生成子进程方式 |
;pm.status_path = /status | 状态机制 |
;ping.path = /ping | ping机制,一般用于提供监控机制 |
php_admin_value[error_log] = | 连接池错误日志位置 |
php_admin_flag[log_errors] = on | 是否在错误日志中将于管理相关的标志打开 |
php_value[session.save_handler] = files | php的session记录存放形式:文件 |
php_value[session.save_path] = | php的session记录存放路径,集群是关键 |
注意: pm连接池模式有两种,pm = static|dynamic
static:固定数量的子进程;pm.max_children;
dynamic:子进程数据以动态模式管理;选择该项需呀启用以下配置
pm.start_servers= | 开始启用进程数 |
pm.min_spare_servers= | 最小空闲进程数 |
pm.max_spare_servers= | 最大空闲进程数 |
;pm.max_requests = | 每个子进程自多允许响应多少请求,超过就kill |
二、Nginx:ngx_http_fastcgi_module模块配置
1.fastcgi_passaddress;:指明反向代理的服务器
address是fastcgi server监听的IP地址和端口;
示例:fastcgi_pass 127.0.0.1:9000;
2.fastcgi_index# ;:定义fastcgi应用的默认主页;
示例:fastcgi_index index.php;
3.fastcgi_paramparameter value [if_not_empty];:设定传递给后端fastcgi server参数及其值;
示例:fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
/index.php ---> /scripts/index.php
4.fastcgi_cache_pathpath [levels=levels][use_temp_path=on|off] keys_zone=name:size [inactive=time][max_size=size];
定义缓存:缓存空间等;应用于http配置段。
path | 数据缓存在磁盘中位置 |
levels=#[:#[:#]] | 定义的目录级别,levels=2:1表示两位十六进制字符命名目录,每个目录中还有目录 |
keys_zone=name:size | 元数据缓存在内存中;name: cache的标识符;size:元数据cache大小; |
inactive=time | 缓存的非活动时间 |
max_size | 缓存空间上限 |
5.fastcgi_cachezone | off;:调用定义过的缓存;
zone即为通过fastcgi_cache_path定义缓存时其keys_zone参数中的name;
6.fastcgi_cache_keystring;:定义如何使用缓存键;
示例:fastcgi_cache_key $request_uri;
7.fastcgi_cache_methods GET | HEAD | POST ...;
为何请求方法对应的请求进行缓存,默认为GET和HEAD;
8.fastcgi_cache_min_usesnumber;
缓存项的最少使用次数;
9.fastcgi_cache_use_staleerror | timeout | invalid_header | updating | http_500 | http_503 | http_403 |http_404 | off ...;
是否可使用stale缓存项响应用户请求;
10.fastcgi_cache_valid[code ...] time;
对不同响应码的响应设定其可缓存时长;
示例:
fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid404 1m;
注意:
1) 定义缓存在fastcgi_cache_path;fcgi的缓存定义在http{ } 配置段上下文
2) 调用缓存(server、location、if)时至少应该指定三个参数fastcgi_cache、fastcgi_cache_key、fastcgi_cache_valid