1、简述CGI与FASTCGI区别
1、CGI
CGI:Common Gateway Interface,公共网关接口,它是一段程序,运行在服务器上,提供同客户端HTML页面的接口,通俗的讲CGI就像是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器,再把服务器执行的结果返还给HTML网页;用CGI可以实现表单的处理,数据库查询,发送电子邮件,基于Web的数据库访问等许多操作,最常见的CGI程序就是计数器。CGI使网页变得不是静态的,而是交互式的。
CGI 在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会 fork 一个新进程来运行外部的 C 程序或者bash,perl脚本等,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
CGI可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准
CGI请求流程:Client – (http协议) --> httpd – (cgi协议) --> application server (program file) – (mysql协议) --> mysql
2、FASTCGI
FASTCGI的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出
FASTCGI请求流程:Client – (http协议) --> httpd – (fastcgi协议) --> fastcgi服务器 – (mysql协议) --> mysql
3、CGI和FASTCGI的区别
CGI:兼职,一次性的过河拆桥式的服务
FASTCGI:专职,全周期的持续式的服务

2、 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
1 目标
实现CentOS 7 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAP架构
2 环境准备
两台主机:
一台主机:httpd+php(fastcgi模式)
一台主机:mysql服务器
软件版本:
CentOS 7.8
mysql-8.0.23-linux-glibc2.12-x86_64.tar.gz 通用二进制格式
apr-1.7.0.tar.gz(apr.apache.org下载安装包)
apr-util-1.6.1.tar.gz
httpd-2.4.46.tar.bz2 (httpd.apache.org下载安装包)
php-7.4.19.tar.gz(www.php.net下载安装包)
latest-zh_CN.tar.gz
Discuz_X3.4_SC_UTF8_20210320.zip
3 实现步骤
3.1 二进制安装mysql
[root@centos8 ~]#rz-E #将install_offline_mysql5.7or8.0_for_centos.sh文件拖进来
[root@centos8 ~]#bash install_offline_mysql5.7or8.0_for_centos.sh
开始安装MySQL数据库…
创建mysql用户 [ OK ]
Starting MySQL.. [ OK ]
数据库安装完成 [ OK ]
[root@centos8 ~]#mysql -uroot -pmagedu #账号登录mysql
mysql> create database blog;
mysql> create database forum;
mysql> create user blog@'10.0.0.%' identified by '123456';
mysql> create user forum@'10.0.0.%' identified by '123456';
mysql> grant all on blog.* to blog@'10.0.0.%';
mysql> grant all on forum.* to forum@'10.0.0.%';
3.2 编译安装httpd 2.4
3.2.1 解压httpd和apr包
[root@centos7 data]#tar xvf apr-1.7.0.tar.gz
[root@centos7 data]#tar xvf apr-util-1.6.1.tar.gz
[root@centos7 data]#tar xvf httpd-2.4.46.tar.bz2
3.2.2 合并三个目录一起编译
[root@centos7 data]#mv apr-1.7.0 httpd-2.4.46/srclib/apr
[root@centos7 data]#mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
3.2.3 下载相关依赖包
[root@centos7 data]#yum -y install gcc pcre-devel openssl-devel expat-devel
3.2.4 进入目录下进行编译安装
[root@centos7 data]#cd httpd-2.4.46/ #进入目录
[root@centos7 httpd-2.4.46]#./configure \
> --prefix=/apps/httpd24 \
> --enable-so \
> --enable-ssl \
> --enable-cgi \
> --enable-rewrite \
> --with-zlib \
> --with-pcre \
> --with-included-apr \
> --enable-modules=most \
> --enable-mpms-shared=all \
> --with-mpm=prefork \
[root@centos7 httpd-2.4.46]#make -j 4 && make install #制作安装
3.2.5 准备PATH变量
[root@centos7 httpd-2.4.46]#echo 'PATH=/apps/httpd24/bin:$PATH' > /etc/profile.d/lamp.sh #添加变量
[root@centos7 httpd-2.4.46]#. /etc/profile.d/lamp.sh #加载变量
[root@centos7 httpd-2.4.46]#echo $PATH #查看变量
/apps/httpd24/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
3.2.6 创建apache账户
#工作中最好指明UID,UID要统一
[root@centos7 httpd-2.4.46]#useradd -s /sbin/nologin -r -u 88 apache
3.2.7 修改httpd配置文件
[root@centos7 httpd-2.4.46]#vim /apps/httpd24/conf/httpd.conf
<IfModule unixd_module>
#
# If you wish httpd to run as a different user or group,you must run
# httpd as root initially and it will switch
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache #默认为daemon监管 改为apache
Group apache #同上
</IfModule>
#网站主页面定义为/data/(随自己需求)
DocumentRoot "/data/"
<Directory "/data">
3.2.8 启动服务
[root@centos7 httpd-2.4.46]#systemctl enable --now httpd
[root@centos7 httpd-2.4.46]#ss -ntl #80端口打开
3.2.9 修改ServerName配置不再提示
[root@centos7 httpd-2.4.46]#vim /apps/httpd24/conf/httpd.conf
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80 #此行取消注释,名字是什么都可以
[root@centos7 httpd-2.4.46]#systemctl restart httpd
3.2.10 修改为event模式
[root@centos7 httpd-2.4.46]#vim /apps/httpd24/conf/httpd.conf
# 默认centos7为prefork模式,所以需要修改
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
[root@centos7 httpd-2.4.46]#systemctl restart httpd
3.2.11 可以根据需求调节这些配置对应生产调到生产中最大值
[root@centos7 httpd-2.4.46]#vim /apps/httpd24/conf/extra/httpd-mpm.conf
# event MPM
# StartServers: initial number of server processes to start
# MinSpareThreads: minimum number of worker threads which are kept spare
# MaxSpareThreads: maximum number of worker threads which are kept spare
# ThreadsPerChild: constant number of worker threads in each server process
# MaxRequestWorkers: maximum number of worker threads
# MaxConnectionPerChild: maximum number of connections a server process serves
# before terminating
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionPerChild 0
</IfModule>
3.2.12 web界面测试访问(It works!是默认显示)
浏览器访问10.0.0.7
It works!
3.3 编译安装fastcgi方式的php7.4
php7.3 和 php7.4依赖包稍有差别
#安装相关依赖包,依赖EPEL源
#php 7.3 相关包
yum install gcc libxml2-devel bzip2-devel libmcrypt-devel
#php 7.4 相关包
yum install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
3.3.1 安装依赖包
[root@centos7 ~]#yum install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
3.3.2 解压php编译安装包
[root@centos7 ~]#tar xvf php-7.4.19.tar.gz
3.3.3 进入php目录下进行编译
# 7.4 编译方式
[root@centos7 ~]#cd php-7.4.19/
[root@centos7 php-7.4.19]#./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.19]#make -j 8 && make install
[root@centos7 php-7.4.19]#/apps/php74/bin/php --version #查看版本号
PHP 7.4.0 (cli) (built: Dec 15 2019 17:15:08) (ZTS)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies #这行是引擎版本
# 7.3 编译方式
./configure --prefix=/apps/php
> --enable-mysqlnd \
> --with-mysqli=mysqlnd \
> --with-pdo-mysql=mysqlnd \
> --with-openssl \
> --with-freetype-dir \
> --with-jpeg-dir \
> --with-png-dir \
> --with-zlib \
> --with-libxml-dir=/usr \
> --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
3.3.4 准备PATH变量
#修改之前准备好的变量
[root@centos7 php-7.4.19]#vim /etc/profile.d/lamp.sh
PATH=/apps/httpd24/bin:/apps/php/bin:$PATH
[root@centos7 php-7.4.19]#. /etc/profile.d/lamp.sh
3.3.5 准备php配置文件和启动文件
[root@centos7 php-7.4.19]#cp php.ini-production /etc/php.ini
[root@centos7 php-7.4.19]#cp sapi/fpm/php-fpm.service /lib/systemd/system/
3.3.6 准备fastcgi (fpm) 主配置文件
[root@centos7 php-7.4.19]#cd /apps/php/etc
[root@centos7 etc]#cp php-fpm.conf.default php-fpm.conf
[root@centos7 etc]#ll
-rw-r--r-- 1 root root 5357 May 27 14:48 php-fpm.conf
-rw-r--r-- 1 root root 5357 May 27 14:15 php-fpm.conf.default
drwxr-xr-x 2 root root 30 May 27 14:15 php-fpm.d
3.3.7 子配置文件fpm改名
[root@centos7 etc]#cd php-fpm.d/
[root@centos7 php-fpm.d]#ll
total 20
-rw-r--r-- 1 root root 19602 May 27 14:15 www.conf.default
[root@centos7 php-fpm.d]#cp www.conf.default www.conf
3.3.8 修改fpm子配置文件
[root@centos7 php-fpm.d]#vim www.conf #/apps/php/etc/php-fpm.d/www/conf
#修改进程所有者为apache,以apache的身份来创建fastcgi进程
user = apache
group = apache
#开启状态页
; Default Value: not set
pm.status_path = /fpm_status
#开启ping测试
; Default Value: not set
ping.path = /ping
3.3.9 修改配置httpd支持php-fpm
[root@centos7 ~]#vim /apps/httpd/conf/httpd.conf
#取消下面两行的注释
LoadModule proxy_module modules/mod_proxy.so #启用 反向代理
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #启用 fastcgi
#添加index.php
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
#添加下面两行
AddType application/x-httpd-php .php #支持php后缀的文件
ProxyRequests off #开启反向代理功能
#实现第一个虚拟主机
<virtualhost *:80>
servername blog.magedu.org
documentroot /data/blog
<directory /data/blog>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/blog/$1
#实现status和ping页面
ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
CustomLog "logs/access_blog_log" common
</virtualhost>
#实现第二个虚拟主机
<virtualhost *:80>
servername forum.magedu.org
documentroot /data/forum
<directory /data/forum/>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/forum/$1
CustomLog "logs/access_forum_log" common
</virtualhost>
[root@centos7 ~]#systemctl restart httpd.service
[root@centos7 ~]#ss -ntl #80端口打开
3.3.10 windows更改hosts文件
添加这一行对虚拟主机的域名和虚拟机ip
10.0.0.7 blog.magedu.org blog.magedu.org
web界面测试
blog.magedu.org/test.php
web状态页测试
blog.magedu.org/status
web界面ping测试
blog.magedu.org/ping
3.3.11 支持opcache加速
[root@centos7 php-fpm.d]#mkdir /etc/php.d/
[root@centos7 php-fpm.d]#vim /etc/php.d/opcache.ini
[opcache]
Zend_extension=opcace.so
Opcache.enable=1
[root@centos7 php-fpm.d]#systemctl daemon-reload
[root@centos7 php-fpm.d]#systemctl enable --now php-fpm.service
[root@centos7 php-fpm.d]#ss -ntl #9000端口打开
3.3.12 准备wordpress和discuz!相关文件
[root@centos7 php-fpm.d]#cd /data
[root@centos7 data]#mkdir blog forum
[root@centos7 ~]#tar xf latest-zh_CN.tar.gz
[root@centos7 ~]#mv wordpress/* /data/blog/
[root@centos7 ~]#unzip Discuz_X3.4_SC_UTF8_20210320.zip
[root@centos7 ~]#mv upload/* /data/forum/
[root@centos7 ~]#chown -R apache.apache /data/*
3.3.13 web界面测试
blog.magedu.org
forum.magedu.org
3、通过loganalyzer展示数据库中的日志
1 目标
通过loganalyzer展示数据库中的日志
2 环境准备
三台主机
一台日志服务器,利用上一个案例实现,IP:10.0.0.18
一台数据库服务器,利用上一个案例实现,IP:10.0.0.28
一台当httpd+php服务器,并安装loganalyzer展示web图形,IP:10.0.0.38
3 步骤
3.1 安装php和相关软件包
在10.0.0.38主机上安装httpd,php和相关软件包
[root@centos8 ~]#yum -y httpd php-fpm php-mysqlnd php-gd
[root@centos8 ~]#systemctl enable --now httpd php-fpm
3.2 安装LogAnalyzer
在10.0.0.38主机上安装LogAnalyzer
#从http://loganalyzer.adiscon.com/downloads/ 下载loganalyzer-4.1.12.tar.gz
[root@centos8 ~]#tar xvf loganalyzer-4.1.12.tar.gz
[root@centos8 ~]#mv loganalyzer-4.1.12.tar.gz/src/ /var/www/html/log
[root@centos8 ~]#touch /var/www/html/log/config.php
[root@centos8 ~]#chmod 666 /var/www/html/log/config.php
3.3 基于web页面初始化
访问http://10.0.0.38/log实现初始化
选择MySQL Native,Syslog Fields,Monitorware
3.4 安全加固
[root@centos8 ~]#chmod 644 /var/www/html/log/config.php