fastcgi模式下的LAMP实现多虚拟主机bbs和blog

本文介绍FastCGI的工作原理及其如何改善CGI性能,详细讲解了在CentOS环境下搭建LAMP架构的过程,包括配置httpd、php-fpm、php-mysql软件包,以及实现多虚拟主机和数据库连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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', '');

/**#@+
 * 身份认证密钥与盐。

这时刷新一下页面即可进入安装界面,我们只需按照步骤操作即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值