一:安装
1 :安装依赖的包
yum install libxml2-devel openssl-devel curl-devel net-snmp-devel bsion gmp-devel -y
2 创建用户
useradd -u 800 -M -d /usr/local/lnmp/php -s /sbin/nologin nginx
3 配置环境
./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-pear --with-gettext --with-gmp --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash --enable-fpm
在此过程中可能还会遇到依赖,只需要安装提示进行安装
4:编译
make
5:安装
make install
二:配置
cd /usr/local/lnmp/php/etc
cp php-fpm.conf.default php-fpm.conf ##复制配置文件
cd /php-5.6.20
cp php.ini-production /usr/local/lnmp/php/etc/php.ini
php.ini用来控制php的某些功能
某些功能比如:错误提示,短标签,上传文件最大值,扩展等等可以通过php.ini文件设置
/usr/local/lnmp/php/etc
vim php.ini
date.timezone = Asia/Shanghai ##设置时区
pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock ##设置默认套接字
mysql.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
mysqli.default_socket =/usr/local/lnmp/mysql/data/mysql.sock
vim php-fpm.conf ##PHP-FPM是一个PHPFastCGI管理器,是只用于PHP的
pid = run/php-fpm.pid
四、Nginx里的php
# vim ../html/index.php
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
location / {
root html;
index index.php index.html index.htm;
}
问题:什么时候会用到后端的PHP应用服务器呢?
若客户单请求的是一个动态网页,请求进来之后,Nginx分析报文,如果发现自己处理不了,就转交给后端,此时Nginx服务器会在内存开辟一段空间来保存与客户端http连接的信息,然后等待后端的fastCGI服务器,后端处理之后把数发给Nginx,处理一点发一点,此时若Nginx直接将结果发给客户端,客户端理解不了fastCGI报文,所以需要Nginx在本地开辟内存来暂存后端发来的数据,当后端发完之后, Nginx开始构建客户端可以理解的http报文。
1.当前段的请求数没有那么大
后端只需要一个app server就够了
2.当前端的请求数逐渐增大,到一定程度
此时后端一个app server就不够了,来分担压力,
3.多个app server,就出现了一个问题,数据如何同步
此时,就另外开一台数据库服务器,所有的app server都与数据库进行数据交换
4.这样一来一个数据库也不够了,读写分离
5.如果我们app server每次都要到数据库去找,就会很费时
此时,我们在app server与数据库服务器之间配置一台memcache,他只负责存储数据,其他不管
这样,app server发来一个请求,会先到memcache找,如果找不到,在去数据库找,数据库返回给app server,由app server决定是否要将结果放到memcache,
6.假设只有一台app server时
每个连接对应一个fastCGI进程,php程序编译出来的opcode无法给其他处理请求的进程分享,因此需要有一个缓存xcache,这个缓存的作用就是将php程序编译出来的pocode共享给全部进程,一个程序在编译完执行opcode时才需要与后端数据库交互