1、简述CGI与FASTCGI区别
cgi(Common Gateway Interface)公共网关接口
cgi在web服务器方面,fork(英文:复刻)出一个新的进程运行外部程序。
在对数据进行处理的进程方面,每个进程处理完后在返回给web服务器,web服务器在发内容给用户,fork进程退出。下次在发出请求时,又fork出一个新进程,如此往复。(不能独立于apache之外。子进程关系)(资源消耗大,缺少复用)
fastcgi在web服务器方面,用tcp的方式与远程的主机上的进程或者本地进程建立连接。
在对数据进行处理的进程方面,当web服务器收到请求时,不会fork出一个新的进程(这个进程在开启web服务器时就跟随启动并且不会退出),web服务器直接把内容传递给该进程,该进程收到请求处理处理结果并返回给web服务器,等待下一个请求的到来,不会退出。(能够独立于apache服务器,本身也可以作为一个单独的服务器)
2、 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
1.实验前的准备:
CentOS8(10.0.8.8)----安装数据库,其他的都在CentOS7(10.0.8.7)上
apr-1.7.0.tar
apr-util-1.6.1.tar
httpd-2.4.46.tar
php-7.4.30.tar
wordpress-6.0-zh_CN.tar
Discuz_X3.3_SC_UTF8
2.二进制安装数据库:(略)
参考如下文章:
https://editor.csdn.net/md/?articleId=124878782
#为wordpress和discuz应用准备数据库和用户账号
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> create database discuz;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> grant all on wordpress.* to wordpress@'10.0.8.%' identified by "123456";
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all on discuz.* to discuz@'10.0.8.%' identified by '123456';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
3.编译安装httpd2.4
#安装相关包
38 2022-07-09 16:32:19 yum install gcc pcre-devel openssl-devel expat-devel -y
#编译安装httpd
40 2022-07-09 16:37:00 tar xf apr-1.7.0.tar.bz2
41 2022-07-09 16:37:07 tar xf apr-util-1.6.1.tar.bz2
42 2022-07-09 16:37:18 tar xf httpd-2.4.46.tar.bz2
43 2022-07-09 16:37:59 mv apr-1.7.0 httpd-2.4.46/srclib/apr
44 2022-07-09 16:38:37 mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
45 2022-07-09 16:38:43 cd httpd-2.4.46/
46 2022-07-09 16:38:53 ./configure --prefix=/apps/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=event
47 2022-07-09 16:40:00 make -j 8 && make install
#准备环境变量
63 2022-07-09 16:54:21 vim /etc/profile.d/lamp.sh
PATH=/apps/httpd/bin:$PATH(添加该行)
64 2022-07-09 16:54:54 . /etc/profile.d/lamp.sh
#创建和配制用户和组
50 2022-07-09 16:44:20 useradd -s /sbin/nologin -r -u 88 apache
51 2022-07-09 16:44:41 vim /apps/httpd/conf/httpd.conf
修改为:
user apache
group apache
取消该行注释(修改为event模式,编译时已指定,此项不再需修改,可选项)
LoadModule mpm_event_module modules/mod_mpm_event.so
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
52 2022-07-09 16:45:38 httpd -M |grep mpm
mpm_event_module (shared)
53 2022-07-09 16:45:51 apachectl start
54 2022-07-09 16:46:10 vim /usr/lib/systemd/system/httpd.service
[Unit](该语句块不改)
[Service](该语句快修改部分)
Type=forking
ExecStart=/apps/httpd/bin/apachectl start
ExecReload=/apps/httpd/bin/apachectl graceful
ExecStop=/apps/httpd/bin/apachectl stop
[Install](该语句块不改)
55 2022-07-09 16:48:07 systemctl daemon-reload
56 2022-07-09 16:48:17 systemctl restart httpd.service
4.编译安装 fastcgi 方式的 php 7.4
#安装相关包依赖epel源,如果yum仓库已配置可忽略(yum install -y epel-release),如果yum仓库没有配置,则:yum install -y epel-release
#相关包
57 2022-07-09 16:48:49 yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
#php7.4编译安装
58 2022-07-09 16:50:14 cd
59 2022-07-09 16:50:30 tar xf php-7.4.30.tar.xz
60 2022-07-09 16:50:45 cd php-7.4.30/
61 2022-07-09 16:50:57 ./configure --prefix=/apps/php --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-zlib --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-mbstring --enable-xml --enable-sockets --enable-fpm --enable-maintainer-zts --disable-fileinfo
62 2022-07-09 16:51:42 make -j 8 && make install
#准备环境变量
63 2022-07-09 16:54:21 vim /etc/profile.d/lamp.sh
PATH=/apps/php/bin:/apps/httpd/bin:$PATH
64 2022-07-09 16:54:54 . /etc/profile.d/lamp.sh
#查看是否成功
65 2022-07-09 16:55:02 php --version #(显示成功)/apps/php/bin/php --version = php --version
PHP 7.4.30 (cli) (built: Jul 9 2022 16:53:30) ( ZTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies
#准备php配置文件和启动文件
66 2022-07-09 16:55:23 cp php.ini-production /etc/php.ini
67 2022-07-09 16:55:34 cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
68 2022-07-09 16:55:45 cd /apps/php/etc
69 2022-07-09 16:55:52 cp php-fpm.conf.default php-fpm.conf
70 2022-07-09 16:56:04 cd php-fpm.d/
71 2022-07-09 16:56:19 cp www.conf.default www.conf
#修改进程所有者
72 2022-07-09 16:56:28 vim /apps/php/etc/php-fpm.d/www.conf
修改为:
user apache
group apache
支持status和ping页面,修改为:
pm.status_path = /fpm_status
ping.path = /ping
#支持opcache加速
73 2022-07-09 16:57:53 mkdir /etc/php.d/
74 2022-07-09 16:57:59 vim /etc/php.d/opcache.ini
增加如下内容:
[opcache]
zend_extension=opcache.so
opcache.enable=1
75 2022-07-09 16:58:59 systemctl daemon-reload
76 2022-07-09 16:59:08 systemctl status php-fpm.service
77 2022-07-09 16:59:32 systemctl start php-fpm.service
78 2022-07-09 16:59:45 systemctl status php-fpm.service
5.修改配置httpd支持php-fpm
79 2022-07-09 17:00:06 vim /apps/httpd/conf/httpd.conf
修改以下内容:
(1)#取消下面两行的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
(2)#修改下面行,增加index.php
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
(3)#增加下面内容
AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps(可不加)
ProxyRequests Off
(4)#实现第一个虚拟主机
<virtualhost *:80>
servername wordpress.linux202207.com
documentroot /data/wordpress
<directory /data/wordpress>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
#实现status和ping页面
ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
(5)#实现第二个虚拟主机
<virtualhost *:80>
servername discuz.linux202207.com
documentroot /data/discuz
<directory /data/discuz/>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/discuz/$1
CustomLog "logs/access_discuz_log" common
</virtualhost>
83 2022-07-09 17:10:42 apachectl start
84 2022-07-09 17:10:57 apachectl restart
6.准备WordPress和discuz相关配置文件
#wordpress相关配置文件
87 2022-07-09 17:11:50 cd /data
88 2022-07-09 17:12:03 mkdir wordpress discuz
91 2022-07-09 17:12:52 tar xf wordpress-6.0-zh_CN.tar.gz
92 2022-07-09 17:13:14 ll
93 2022-07-09 17:13:24 mv wordpress/ /data
95 2022-07-09 17:13:47 chown -R apache.apache /data/wordpress
#discuz相关配置文件
96 2022-07-09 17:14:09 unzip Discuz_X3.3_SC_UTF8.zip
99 2022-07-09 17:14:50 mv upload/ /data/discuz
100 2022-07-09 17:15:06 chown -R apache.apache /data/
7.准备hosts文件(Windows中和虚拟机中)
#Windows中的路径C:\Windows\System32\drivers\etc
..\etc中有一个hosts文件(文件类型为:iCalendar文件)
增加以下内容:
10.0.8.7 wordpress.linux202207.com discuz.linux202207.com
#在虚拟机中:
103 2022-07-09 17:30:15 vim /etc/hosts
10.0.8.7 wordpress.linux202207.com discuz.linux202207.com
8.测试
(1)在物理机机中测试:
(2)在浏览器中测试:
测试成功,至此本实验成功。
3、通过loganalyzer展示数据库中的日志
架构图如下:
CentOS7:10.0.0.7
38 2022-07-10 17:07:21 vim /etc/rsyslog.conf
#添加这行:(参照类似格式)
*.info;mail.none;authpriv.none;cron.none @10.0.0.18:514 (@:为UDP;@@:为TCP)
39 2022-07-10 17:09:58 systemctl restart rsyslog.service
CentOS8:10.0.0.8
与CS7类似
rstslog服务器:(CentOS8:10.0.0.18)
#在rstslog服务器上连接mysql模块相关的程序包
2 2022-07-03 21:32:30 yum install -y mysql-server
4 2022-07-10 17:05:23 rpm -ql rsyslog
/usr/lib/.build-id
/usr/lib/.build-id/e6
/usr/lib/.build-id/e6/aa0e40c19a2e0524d72780eee3b1698684cbe7
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog/mysql-createDB.sql
#查看sql脚本文件内容
5 2022-07-10 21:39:47 cat /usr/share/doc/rsyslog/mysql-createDB.sql
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
(
ID int unsigned not null auto_increment primary key,
CustomerID bigint,
...
);
CREATE TABLE SystemEventsProperties
(
ID int unsigned not null auto_increment primary key,
SystemEventID int NULL ,
ParamName varchar(255) NULL ,
ParamValue text NULL
);
#将sql脚本复制到数据库服库上
16 2022-07-10 21:41:13 scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.28:/data
#完成数据库服务器配置后,配置日志服务器将日志发送至指定数据库
vim /etc/rsyslog.conf
#增加以下几行
module(load="ommysql") #启动这个模块
*.info;mail.none;authpriv.none;cron.none :ommysql:10.0.8.28,Syslog,rsyslog,123456
(:ommysql:10.0.0.28,Syslog,rsyslog,123456 为固定模式
10.0.0.28数据库的ip;Syslog数据库服务器中的数据库名;rsyslog为授权登录的账号;123456为密码
)
#重启rsyslog服务
21 2022-07-10 22:07:56 systemctl restart rsyslog.service
MySQL服务器:(CentOS8:10.0.0.28)
#安装数据库
yum install -y mysql.service
#启动数据库
26 2022-07-10 21:53:00 systemctl start mysqld
#导入sql脚本,创建相关数据库和表,并授权rsyslog能连接至当前服务器
27 2022-07-10 21:53:15 mysql < mysql-createDB.sql
#创建相应的账号
create user rsyslog@'10.0.0.%' identified by '123456';
grant all on Syslog.* to rsyslog@'10.0.0.%';
测试:
#CS7(10.0.0.7)
[18:21:25 root@CS7-VM8-10 ~][#logger "this is a test log"
#CS8(10.0.0.28)
mysql> select * from SystemEvents\G;
*************************** 221. row ***************************
ID: 221
CustomerID: NULL
ReceivedAt: 2022-07-11 18:51:08
DeviceReportedTime: 2022-07-11 18:51:08
Facility: 1
......
到此说明:日志服务器将日志发送至指定的数据库完成。
LAP:(CentOS8:10.0.0.38)(loganalyzer展示web图形)
#安装httpd, php和相关软件包
109 2022-07-11 09:52:05 yum -y install httpd php-fpm php-mysqlnd php-gd #php-gd图形相关的包
110 2022-07-11 09:52:42 systemctl start httpd php-fpm
#包的下载地址http://loganalyzer.adiscon.com/downloads/
111 2022-07-11 10:53:28 rz -E
112 2022-07-11 10:54:00 tar xf loganalyzer-4.1.12.tar.gz
113 2022-07-11 10:54:02 ll
114 2022-07-11 10:54:21 mv loganalyzer-4.1.12/src/ /var/www/html/log
115 2022-07-11 10:55:06 touch /var/www/html/log/config.php
116 2022-07-11 10:55:22 chmod 666 /var/www/html/log/config.php
119 2022-07-11 10:56:05 cd /var/www/html/
#建立测试页面,测试php是否成功
120 2022-07-11 10:56:07 vim info.php
<?php phpinfo(); ?>
#安全加固,修改成原来的权限
121 2022-07-11 10:56:11 chmod 644 /var/www/html/log/config.php
122 2022-07-11 10:56:12 ll
123 2022-07-11 10:56:24 cat config.php
测试页面步骤: