一、简述CGI与FASTCGI区别
1.web资源类型
web资源类型大致分为两种:
静态资源:原始形式与响应内容一致,在客户端浏览器执行。
动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端
注意:静态和动态的区别,不在于网页是否能动态变化,而在于服务端的页面文件和客户端得到页面文件是否一致
当客户端请求的是静态资源的时候,web服务器会直接把静态资源返回给客户端。
当客户端请求的是动态资源的时候,web服务器的PHP模块会进行相对应的动态资源运算,如果此过程还需要数据库的数据作为运算参数时,PHP会连接 mysql取得数据后如何进行计算,web服务器如何再将运算得到的静态资源返还给客户端。
又该图可知,当web服务器调用动态资源模块时,需要通过CGI及FastCGI协议。
2.CGI
CGI:Common Gateway Interface 公共网关接口
CGI 在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会 fork 一个新进程来运行外部的 C 程序或者
bash,perl脚本等,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,
刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进
程,周而复始的进行。也就是说,web服务器每处理一个动态资源的请求都会生成一个新进程去处理,请求过程结束,则该进程也随之关闭。
3.FastCGI
Fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启
动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用
了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出。
4.CGI和FastCGI
CGI: 兼职, 一次性的过河拆桥式的服务
FASTCGI: 专职,全周期的持续式的服务
二、编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
环境准备
主机:
1.客户端:本机 windows系统
2.web服务器:centos7 httpd+php(fastcgi模式)
3.数据库服务器:centos8
软件版本:
CentOS 7.8
mariadb-10.2.27-linux-x86_64.tar.gz 通用二进制格式
apr-1.7.0.tar.bz2
apr-util-1.6.1.tar.bz2
httpd-2.4.43.tar.gz
php-7.4.7.tar.xz 或 php-7.3.10.tar.bz2
wordpress-5.4.2-zh_CN.tar.gz
Discuz_X3.4_SC_UTF8【20191201】.zip
1.编译安装数据库服务器
#一键安装脚本
[root@Centos8 ~]# cat install_mariadb.sh
#!/bin/bash
#变量定义
source=/root/mariadb-10.2.31-linux-x86_64.tar.gz
dir=/usr/local
package=mariadb-10.2.31-linux-x86_64.tar.gz
#环境准备
yum install libaio -y
yum install -y libncurses.*
useradd -r -s /sbin/nologin mysql
tar xf $source -C $dir
ln -sv $dir/mariadb-10.2.31-linux-x86_64 $dir/mysql
chown -R root.root $dir/mysql/*
mkdir /data/mysql -p
chown -R mysql.mysql /data/mysql
mkdir /etc/mysql
cp $dir/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf
cat /etc/mysql/my.cnf << EOF
[mysqld]
datadir =/data/mysql
skip_name_resolve = ON
EOF
cat <<EOF >/etc/profile.d/lamp.sh
PATH=/usr/local/mysql/bin/:$PATH
EOF
source /etc/profile.d/lamp.sh
#编译安装
$dir/mysql/scripts/mysql_install_db --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql
#服务启动
cp $dir/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
sed -Ei 's#^(basedir=)$#\1\/usr\/local\/mysql#' /etc/init.d/mysqld
sed -Ei 's#^(datadir=)$#\1\/data\/mysql#' /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
#应用账户授权
mysql -uroot -e 'create database wordpress;'
mysql -uroot -e 'create database discuz;'
mysql -uroot -e 'grant all on wordpress.* to wordpress@"10.0.0.%" identified by "wppass";'
mysql -uroot -e 'grant all on discuz.* to discuz@"10.0.0.%" identified by "dispass";'
[root@Centos8 ~]# bash install_mariadb.sh
[root@Centos8 ~]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 100 127.0.0.1:25 0.0.0.0:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
2 编译安装httpd
包名
#安装相关软件包
[root@Centos7 ~]# yum install gcc pcre-devel openssl-devel expat-devel bzip2 -y
#解包
[root@Centos7 ~]# tar xvf apr-1.7.0.tar.bz2
[root@Centos7 ~]# tar xvf apr-util-1.6.1.tar.bz2
[root@Centos7 ~]# tar xvf httpd-2.4.46.tar.bz2
#准备编译安装所需软件环境
[root@Centos7 ~]# mv apr-1.7.0 httpd-2.4.46/srclib/apr
[root@Centos7 ~]# mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
#编译安装
[root@Centos7 httpd-2.4.46]# /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
[root@Centos7 httpd-2.4.46]# make && make install
# 准备PATH环境变量
[root@Centos7 httpd-2.4.46]# cat > /etc/profile.d/lamp.sh << EOF
[root@Centos7 httpd-2.4.46]# echo $PATH
/apps/httpd/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
> PATH=/apps/httpd/bin:$PATH
> EOF
[root@Centos7 httpd-2.4.46]# source /etc/profile.d/lamp.sh
#创建用户及修改配置
[root@Centos7 httpd-2.4.46]# useradd -s /sbin/nologin -r -u 88 apache
[root@Centos7 httpd-2.4.46]# vim /apps/httpd/conf/httpd.conf
User apache
Group apache
#启动服务
[root@Centos7 httpd-2.4.46]# apachectl start
[root@Centos7 httpd-2.4.46]# ss -ntl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25
#创建httpd服务 [::]:*
[root@Centos7 httpd-2.4.46]#vim /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)
[Service]
Type=forking
#EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/apps/httpd/bin/apachectl start
#ExecStart=/apps/httpd/bin/httpd $OPTIONS -k start
ExecReload=/apps/httpd/bin/apachectl graceful
#ExecReload=/apps/httpd/bin/httpd $OPTIONS -k graceful
ExecStop=/apps/httpd/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@Centos7 httpd-2.4.46]# systemctl daemon-reload
[root@Centos7 httpd-2.4.46]# systemctl enable --now httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
3 编译安装 fastcgi 方式的 php 7.4
# 安装php 7.4相关安装包
yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel
tar xvf php-7.4.26.tar.xz
[root@Centos7 ~]# cd php-7.4.26/
# 编译安装
[root@Centos7 php-7.4.26]# ./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
[root@Centos7 php-7.4.26]# make && make install
#准备配置文件
[root@Centos7 php-7.4.26]# cp php.ini-production /etc/php.ini
[root@Centos7 php-7.4.26]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
[root@Centos7 php-7.4.26]# cd /apps/php/etc
[root@Centos7 etc]# cp php-fpm.conf.default php-fpm.conf
[root@Centos7 etc]# cd php-fpm.d/
[root@Centos7 php-fpm.d]# cp www.conf.default www.conf
[root@Centos7 php-fpm.d]# vim /apps/php/etc/php-fpm.d/www.conf
修改进程所有者
user = apache
group = apache
#支持status和ping页面
pm.status_path = /status
ping.path = /ping
#修改支持opcache加速
[root@Centos7 php-fpm.d]# mkdir /etc/php.d/
[root@Centos7 php-fpm.d]# vim /etc/php.d/opcache.ini
[root@Centos7 php-fpm.d]# vim /etc/php.d/opcache.ini
#加载配置文件启动服务
[root@Centos7 php-fpm.d]# systemctl daemon-reload
[root@Centos7 php-fpm.d]# systemctl enable --now php-fpm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.
4. 修改配置 httpd 支持 php-fpm
打开HTTP配置文件,将以下该两行中的注释去掉
修改下面行
添加下面行
为每个虚拟主机添加独立的配置文件
Include conf/vhosts/*.conf
5 添加虚拟主机
#discuz虚拟主机
[root@Centos7 ~]# cat /apps/httpd/conf/vhosts/discuz.conf
<virtualhost *:80>
servername forum.magedu.org
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>
You have mail in /var/spool/mail/root
# wordpress 虚拟主机
[root@Centos7 ~]# cat /apps/httpd/conf/vhosts/wordpress.conf
<virtualhost *:80>
servername blog.magedu.org
documentroot /data/wordpress
<directory /data/wordpress>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
[root@Centos7 ~]# tree /data/ -L 1
/data/
├── discuz
└── wordpress
2 directories, 0 files
#修改权限,否则将出现无法访问资源的情况。
[root@Centos7 ~]# setfacl -m u:apache:rwx /data/discuz/
[root@Centos7 ~]# setfacl -m u:apache:rwx /data/wordpress/
6 测试访问
三、通过loganalyzer展示数据库中的日志
1.rsyslog服务器配置
# rsyslog服务器(10.0.0.8)上安装连接mysql模块相关的程序包
[root@Centos8 ~]# yum install -y rsyslog-mysql
# 安装MySQL模块会自带一个MySQL脚本 mysql-createDB.sql
[root@Centos8 ~]# rpm -ql rsyslog-mysql
/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
2. mysql 日志存储服务器配置
# 10.0.0.18 安装MySQL-server提供存储
[root@Centos8 ~]# yum install -y mariadb.x86_64
[root@Centos8 ~]# systemctl enable --now mariadb.service
#导入之前在rsyslog服务器(10.0.0.8)上生成的MySQL脚本 mysql-createDB.sql
[root@Centos8 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.3.28-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> source /data/mysql-createDB.sql
Query OK, 1 row affected (0.001 sec)
Database changed
Query OK, 0 rows affected (0.007 sec)
Query OK, 0 rows affected (0.002 sec)
MariaDB [Syslog]> show databases;
+--------------------+
| Database |
+--------------------+
| Syslog |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.000 sec)
MariaDB [Syslog]>
MariaDB [Syslog]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
# 创建专门为rsyslog服务器使用的MySQL账户,并对之前MySQL脚本生成的数据库授权。
Database changed
MariaDB [mysql]> grant all on Syslog.* to syslog@"10.0.0.%" identified by "123456";
Query OK, 0 rows affected (0.000 sec)
3.修改rsyslog服务器,支持将日志信息转储至远程的10.0.0.18的MySQL服务器之中
[root@Centos8 ~]# vim /etc/rsyslog.conf
module(load="ommysql")
#facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD
*.info :ommysql:10.0.0.18,Syslog,syslog,123456
[root@Centos8 ~]# systemctl restart rsyslog.service
4. 测试
#rsyslog 服务器上生成日志信息
[root@Centos8 ~]# logger "this is a test log"
# 数据库服务器上查询日志信息
MariaDB [Syslog]> select * from SystemEvents status\G;
5 ttpd+php 服务器配置
[root@http-php ~]# ls
anaconda-ks.cfg loganalyzer-4.1.12.tar.gz reset.sh
# 在10.0.0.28主机上安装httpd, php和相关软件包
[root@http-php ~]# yum -y install httpd php-fpm php-mysqlnd php-gd
[root@http-php ~]# systemctl enable --now httpd php-fpm
[root@http-php ~]# tar xvf loganalyzer-4.1.12.tar.gz
6.LogAnalyzer
[root@http-php ~]# mv loganalyzer-4.1.12/src/ /var/www/html/log
[root@http-php ~]# touch /var/www/html/log/config.php
[root@http-php ~]# chmod 666 /var/www/html/log/config.php
#安全加固
[root@http-php ~]# ll /var/www/html/log/config.php
-rw-rw-rw- 1 root root 11707 Dec 18 19:40 /var/www/html/log/config.php
[root@http-php ~]# chmod 644 /var/www/html/log/config.php