动静分离能有效提升站点访问效率,此时apache工作在反向代理模式。Php不在作为apache的模块。而是以独立服务器的方式运行。两者之间通过fcgi机制建立通讯。本文将以安装discuz方式说明其工作特性。下图为其工作流程的简单描述:
首先apache监听主进程预先启动多个子进程,当用户请求到达时,主进程负责将请求接进来然后调用子进程处理请求,若为静态文件则直接有子进程进行I/O操作读取数据,处理请求,构建响应报文,并将结果交由监听主进程,主进程再将结果响应给客户端。若请求报文为动态的php页面,则子进程通过fcgi将请求交给php服务器。同样的机制,php调用子进程执行php程序(含有对数据库的读写等操作)php与数据库的通信与前者类似。等到数据处理完毕。Php子进程将处理结果交给主进程,主进程将结果送给httpd子进程,httpd子进程再将处理结果交给 监听主进程 最终将结果 响应给客户端。
以下为实验拓扑图:
编译安装httpd服务器,这里采用httpd-2.4并使用event工作模型
首先源代码编译安装apr(apache可移植运行时环境) apr-util 采用1.5的版本
apr的编译选项:
./configure --prefix=/usr/local/apr-1.5 Make && make install Apr-util的编译选项: ./configure --prefix=/usr/local/apr-util-1.5 --with-apr=/usr/local/apr-1.5 Make && make install
接下来就可以编译httpd
httpd的编译选项:
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-modules=most --enable-mpms-shared=all --with-mpm=event 编译安装: Make && make install
编辑配置文件:
主配置文件
Vim /etc/httpd/http.conf
注释掉DocumentRoot我们将以虚拟主机的形式实现
Event工作场景模块 启用
添加编码方法
启用虚拟主机
编辑虚拟主机配置文件:
开启当前虚拟主机的php代理
创建/www/hefeng 目录
解压Discuz压缩文件放入此目录中并赋予777权限
至此httpd服务器配置完毕
Php服务器配置
这里采用php5.4
编译选项配置
./configure --prefix=/usr/local/php5 --with-mysql=mysqlnd --with-openssl --with-mysqli=mysqlnd --enable-mbstring --with-freetype-dir=/usr/local/freetype - ----> 请自行编译安装 --with-jpeg-dir=/usr/local/jpeg -----> 请自行编译安装 --with-png-dir=/usr/local/png -----> 请自行编译安装 --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 编译安装: Make && make install 后续配置 为php提供配置文件: cp php.ini-production /etc/php.ini 配置php-fpm php-fpm提供SysV init脚本,并将其添加至服务列表: cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm chmod +x /etc/rc.d/init.d/php-fpm chkconfig --add php-fpm chkconfig php-fpm on php-fpm提供配置文件: cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 编辑php-fpm的配置文件: vim /usr/local/php/etc/php-fpm.conf 配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行): pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8 pid = /usr/local/php/var/run/php-fpm.pid
修改监听端口
修改为apache里设置的主机监听套接字
Mkdir -pv /www/hefeng/
将Discuz解压的文件copy至此目录并给777权限
启动php-fpm查看监听端口 service php-fpm start
配置mariadb(mydql的克隆版组织)数据库服务器:
这里以二进制包进行安装
tar xf mariadb-5.5.33-linux2.6-i686.tar.gz -C /usr/local cd /usr/local/ ln -sv mariadb-5.5.33-linux2.6-i686 mysql cd mysql chown -R mysql:mysql . scripts/mysql_install_db --user=mysql --datadir=/mydata/data chown -R root . 为mysql提供主配置文件: cd /usr/local/mysql cp support-files/my-large.cnf /etc/my.cnf
另外还需要添加如下行指定mysql数据文件的存放位置:
datadir = /mydata/data
为mysql提供sysv服务脚本:
cd /usr/local/mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
添加至服务列表:
chkconfig --add mysqld
启动mysqld :service mysqld start
创建数据库和用户 用来安装Discuz
Create database discux;
Grant all on discux . * to ‘discux’@’172.16.101.35’ identified by ‘hzm132’;
Flush privileges;
开始安装 Discuz:
环境检测:
全新安装:
数据库选项:
安装完成:
再将安装后生成的文件copy一份至apache主机网站根目录 否则不现实静态文件(由于设计网站本身并不是读写分离架构的)
Scp -r /www/hefeng/upload 172.16.101.34:/www/hefeng/
完成测试:
至此整个过程结束
编译安装LAMP-------动静分离