FastCGI全称快速通用网关接口(FastCommonGatewayInterface)。FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
fastcgi模式下LAMP的PHP是独立的服务,它有独立的进程,要使用fastcgi得安装php-fpm软件包。http可以与PHP安装在同一台服务器上,也可以分开独立的服务器,当客户端访问的是动态页面时,就代理转发至后端的PHP服务器,这时的apache类似于代理服务器的功能。一般都安装在了同一台主机上,因此这里我们也安装在同一台主机上。下图就是fastcgi模式的LAMP架构。
实验环境:
192.168.239.130 apache服务器,httpd与php-fpm安装在同一台主机上。
192.168.239.128 mariadb数据库服务器
192.168.239.130主机上
1、安装httpd、php-fpm、php-mysql软件包
[root@centos7 ~]# yum install httpd php-fpm php-mysql
编辑php-fpm的配置文件/etc/php-fpm.d/www.conf,这里主要修改监听端口的IP地址,及允许哪些主机连接。其他的可以根据实际生产需求来修改。
[root@centos7 ~]# vim /etc/php-fpm.d/www.conf
listen = 9000 //默认是只监听本机的1207.0.0.1上,这里表示本机的所有ip
; Default Value: any
;listen.allowed_clients = 127.0.0.1 //把这行注释掉,默认所有的主机都能连接,也就是apache服务器的IP地址
2、配置httpd,添加/etc/httpd/conf.d/fcgi.conf配置文件内容类似。即当客户端访问http服务器上以PHP结尾的文件时就转发至后端PHP服务器指定路径下的php文件。(这里httpd和PHP都在同一台主机上)
[root@centos7 ~]# vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.239.130:9000/var/www/html/$1
注意:在HTTPD服务器上必须启用proxy_fcgi_module模块,充当PHP客户端
[root@centos7 ~]# httpd -M | grep fcgi
proxy_fcgi_module (shared)
3、分别启动http和PHP服务
[root@centos7 ~]# systemctl start httpd
[root@centos7 ~]# systemctl start php-fpm
[root@centos7 ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:111 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 127.0.0.1:631 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6011 *:*
LISTEN 0 128 *:9000 *:*
LISTEN 0 128 :::111 :::*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 ::1:631 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 128 ::1:6011 :::*
[root@centos7 ~]#
可以看到80端口和9000端口已经开启,说明服务已经正常启动。使用pstree命令可以查看到独立的php-fpm进程。
[root@centos7 ~]# pstree -p
├─php-fpm(15498)─┬─php-fpm(15500)
│ ├─php-fpm(15501)
│ ├─php-fpm(15502)
│ ├─php-fpm(15503)
│ └─php-fpm(15504)
使用ps aux命令也能查看到,而且是以apache用户运行的。(在安装php-fpm软件包的时候会自动创建apache用户,使用rpm -q --scripts php-fpm命令可以查看)
[root@centos7 ~]# ps aux | grep php-fpm
root 15498 0.0 0.5 327820 10128 ? Ss 00:15 0:00 php-fpm: master process (/etc/php-fpm.conf)
apache 15500 0.0 0.2 329904 4972 ? S 00:15 0:00 php-fpm: pool www
apache 15501 0.0 0.2 329904 4960 ? S 00:15 0:00 php-fpm: pool www
apache 15502 0.0 0.2 329904 4972 ? S 00:15 0:00 php-fpm: pool www
apache 15503 0.0 0.2 329904 4976 ? S 00:15 0:00 php-fpm: pool www
apache 15504 0.0 0.2 329904 4948 ? S 00:15 0:00 php-fpm: pool www
root 15573 0.0 0.0 112676 984 pts/1 R+ 00:21 0:00 grep --color=auto php-fpm
192.168.239.128主机上
1、安装mariadb数据库并启动服务。
[root@centos7 ~]# yum install mariadb-server
[root@centos7 ~]# systemctl start maraidb
到此fastcgi模式的LAMP架构我们已经实现了,接下来可以测试一下。在192.168.239.130主机上建立一个数据库连接测试文件。
[root@centos7 html]# vim /var/www/html/test.php
<?php
$mysqli=new mysqli("192.168.239.128","wpuser","123456");
if(mysqli_connect_errno()){
echo "Failure";
$mysqli=null;
exit;
}
echo "OK";
$mysqli->close();
?>
在浏览器上输入指定的URL,可以看到数据成功连接了。
接下来我们实现多虚拟主机的bbs和blog。
1、添加/etc/httpd/conf.d/vhost.conf文件,用于配置虚拟主机。
[root@centos7 ~]# vim /etc/httpd/conf.d/vhost.conf
<virtualhost *:80>
servername www.bbs.com
documentroot /var/www/html/discuz
DirectoryIndex index.php
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.239.130:9000/var/www/html/discuz/$1
<directory /var/www/html>
require all granted
</directory>
</virtualhost>
<virtualhost *:80>
servername www.blog.com
documentroot /var/www/html/wordpress
DirectoryIndex index.php
ProxyRequests off
ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.239.130:9000/var/www/html/wordpress/$1
<directory /var/www/html>
require all granted
</directory>
</virtualhost>
2、我们先部署discuz,把下载的源码包解压,并把解压后的upload目录下的所有文件拷贝到/var/www/html/discuz目录下(我们得事先准备好这个目录)
[root@centos7 html]# mkdir /var/www/html/discuz
[root@centos7 app]# unzip Discuz_X3.2_SC_UTF8.zip
[root@centos7 app]# ls //ls查看解压后生成的目录
Discuz_X3.2_SC_UTF8.zip readme upload utility
[root@centos7 app]# cp -r upload/* /var/www/html/discuz/
由于后面系统配置时会编辑/var/www/html/discuz目录下的一些文件,因此apache用户对该目录要有读写执行权限。我们通过ACL给她设置权限。(后面系统配置完成后可以回收)
[root@centos7 html]# setacl -R -m u:apache:rwx /var/www/html/discuz/
在数据库服务器中授权一个用户,用于配置和连接后台数据库。
MariaDB [(none)]> grant all on *.* to bbsadmin@'192.168.239.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
+----------+-----------------+-------------------------------------------+
| user | host | password |
+----------+-----------------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | centos7.cwj.com | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | centos7.cwj.com | |
| bbsadmin | 192.168.239.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| wpuser | 192.168.239.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----------+-----------------+-------------------------------------------+
8 rows in set (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
在客户端的hosts文件中添加上192.168.239.130 www.bbs.com www.blog.com这一行
[root@centos7 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 centos7.cwj.com
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.239.130 www.bbs.com www.blog.com
打开客户端的浏览器输入www.bbs.com即可调出如下界面,我们只需按照步骤配置即可。
得确保所有的状态为可写。否则检查apache用户对/var/www/html/discuz目录的权限。
根据之前的规划,填入相应的数据库服务器地址,数据库用户名及密码,系统会自动生成一个名为ultrax的数据库及其相关表。同时配置管理员信息。具体如图所示。
3、接下来部署wordpress,在浏览器上输入www.blog.com,就会显示如下界面。接下来只需根据提示信息配置即可。
根据提示信息,要有一个wp-config.php文件,我们用wp-config-sample.php文件作为模板。
[root@centos7 wordpress]# cd /var/www/html/wordpress/
[root@centos7 wordpress]# ls
index.php readme.html wp-admin wp-comments-post.php wp-config-sample.php wp-cron.php wp-links-opml.php wp-login.php wp-settings.php wp-trackback.php
license.txt wp-activate.php wp-blog-header.php wp-config.php wp-content wp-includes wp-load.php wp-mail.php wp-signup.php xmlrpc.php
[root@centos7 wordpress]# cp wp-config-sample.php wp-config.php
[root@centos7 wordpress]# vim wp-config.php
<?php
/**
* WordPress基础配置文件。
*
* 这个文件被安装程序用于自动生成wp-config.php配置文件,
* 您可以不使用网站,您需要手动复制这个文件,
* 并重命名为“wp-config.php”,然后填入相关信息。
*
* 本文件包含以下配置选项:
*
* * MySQL设置
* * 密钥
* * 数据库表名前缀
* * ABSPATH
*
* @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
*
* @package WordPress
*/
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wpdb2');
/** MySQL数据库用户名 */
define('DB_USER', 'wpuser2');
/** MySQL数据库密码 */
define('DB_PASSWORD', '123456');
/** MySQL主机 */
define('DB_HOST', '192.168.239.128');
/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');
/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');
/**#@+
* 身份认证密钥与盐。
这时刷新一下页面即可进入安装界面,我们只需按照步骤操作即可。