1、简述CGI与FASTCGI区别

CGI:

是http服务器与你的其他机器上的程序进行交谈工具,其程序需要运行在网络服务器上。
是在cgi和web服务器之间传递信息的规程,cgi规范允许web服务器执行外部程序,并将它们的的输出送给web浏览器,CGI将web的一组简单的静态超媒体文档变成一个完整的新的交互式

处理步骤:

1、通过internet把用户请求送到web服务器
2、web服务器接收用户请求并交给CGI程序处理
3、CGI程序把处理结果发送给web服务器
4、web服务器把结果送回到用户

工作原理

1、浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL
2、服务器收发到请求
3、服务器执行指定所CGI应用程序
4、CGI应用程序执行所需要的操作,通常是基于浏览器输入的内容
5、CGI应用程序把结果格式化为网络服务器和浏览器能够理解的文档,如html文档
6、网络服务器把结果返回到浏览器中

fastcgi:

FastCGI像是一个常驻型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次,它还支持分布式的运算,即FastCGI程序可以在网站服务器以外的主机上执行并且接受来自其他网站服务器来的请求

FastCGI主要行为是将CGI解释器进程保持在内存中,并因此获得较高的性能。
CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等

原理:

1、web服务器启动时载入FastCGI进程管理器
2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自web服务器的连接
3、当客户端请求到达web服务器时,FastCGI进程管理器选择并连接到CGI解释器,web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi
4、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回web服务器,当FastCGI子进程关闭连接时,请求便告处理完成,FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

fastcgi和cgi的区别是:

在web服务器方面:
cgi:fork一个新的进程进行处理
fastcgi: 用tcp方式跟远程机子上的进程或本地进程建立连接

在对数据进行处理的进程方面:
cgi:读取参数,处理数据,然后就结束生命期
fastcgi:要开启tcp端口,进入循环,等待数据的到来,处理数据

2、 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构

环境准备

两台主机:
一台主机:httpd+php(模块方式)
一台主机:mariadb 服务器

软件版本:

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.41.tar.gz
php-7.3.10.tar.bz2
wordpress-5.2.3-zh_CN.zip
Discuz_X3.4_SC_UTF8【20190917】.zip

实现步骤

二进制安装数据库
将实验所需数据库二进制源码包传入虚拟机
mariadb-10.2.27-linux-x86_64.tar.gz

解包到指定目录方便管理
tar xf mariadb-10.2.27-linux-x86_64.tar.gz -C /usr/local/

创建软链接
ln -s /usr/local/mariadb-10.2.27-linux-x86_64/ /usr/local/mysql

创建服务所需用户
useradd -s /sbin/nologin -d /data/mysql -r -u 306 mysql

修改目录属组、属主
chown -R root.root /usr/local/mysql/

安装常见依赖包
yum -y install libaio

生成数据库
/usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql

准备配置文件并备份原文件
cp -b /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
cp: overwrite ‘/etc/my.cnf’? y

编辑配置文件指定数据库目录
vim /etc/my.cnf

添加文件内容如下
[mysqld]
datadir=/data/mysql

制作启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

可查看已经注册了哪些服务
chkconfig --list

添加mysqld至启动项
chkconfig --add mysqld

添加PATH变量
echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh

加载配置文件
source /etc/profile.d/mysql.sh

启动mysql服务
systemctl start mysqld

进入数据库
mysql

创建数据库
CREATE DATABASE wordpress;
CREATE DATABASE discuz;

创建用户并授权
GRANT ALL ON wordpress.* TO wordpress@'192.168.26.%' IDENTIFIED BY 'wordpress';
GRANT ALL ON discuz.* TO discuz@'192.168.26.%' IDENTIFIED BY 'discuz';

编译安装httpd

将实验所需的httpd相关安装包传进虚拟机
apr-1.7.0.tar.bz2
apr-util-1.6.1.tar.bz2
httpd-2.4.41.tar.gz

解包
tar xf apr-1.7.0.tar.bz2
tar xf apr-util-1.6.1.tar.bz2
tar xf httpd-2.4.41.tar.gz

合并目录并改名,一起进行编译
mv apr-1.7.0 httpd-2.4.41/srclib/apr
mv apr-util-1.6.1 httpd-2.4.41/srclib/apr-util

下载相关依赖包
yum -y install gcc pcre-devel openssl-devel expat-devel

进入指定目录,准备编译安装
cd httpd-2.4.41/

编译
./configure
--prefix=/app/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

制作安装
make -j 4 && make install

添加变量
echo 'PATH=/app/httpd24/bin:$PATH' > /etc/profile.d/http.sh

加载配置文件
source /etc/prefile.d/http.sh

创建apache服务用户(生产环境要指明UID,并且UID要统一)
useradd -s /bin/nologin -r -u 88 apache

修改http配置文件
vim /app/httpd24/conf/httpd.conf

修改文件内容如下

修改以apache用户运行
User daemon
Group daemon
User apache
Group apache

修改网站页面存储路径(根据实际需求自定义)
DocumentRoot "/app/httpd24/htdocs"
<Directory "/app/httpd24/htdocs">
DocumentRoot "/data/app/web"
<Directory "/data/app/web">

顺便取消注释修改Servernamename项,防止启动服务时报提示
ServerName www.example.com:80
ServerName bokebi.cn:80 #改什么名字都可以

启动服务
apachectl start

修改为event模式(centos7默认为prefork模式)
vim /app/httpd24/conf/httpd.conf

修改文件内容如下

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

可根据实际生产环境需求调节以下配置项

可修改配置文件
vim /app/httpd24/conf/extra/httpd-mpm.conf

配置项

StartServers 3
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0

根据/app/httpd24/conf/httpd.conf文件定义的网站页面存储路径创建所需目录

创建目录
mkdir -p /data/app/web

创建测试所需页面
vim /data/app/web/test.html

文件内容为
浏览器访问192.168.26.37得到测试页面

bokebi.cn

bokebi.cn

bokebi.cn

bokebi.cn

bokebi.cn
bokebi.cn

编译安装 fastcgi 方式的 php7.4

百度清华大学yum源
选择remi源列表下的:

维护的企业Linux(RHEL / CentOS /其他克隆)
Enterprise Linux 8-存储库自动配置软件包: remi-release-8.rpm
Enterprise Linux 7-存储库自动配置软件包: remi-release-7.rpm #选择这项右击复制链接地址
Enterprise Linux 6-存储库自动配置软件包: remi-release-6.rpm

配置清华php源

yum -y install https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-7.rpm

提前安装依赖包(php7.4)

yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel

(php7.3为)
yum install gcc libxml2-devel bzip2-devel libmcrypt-devel

将实验所需php安装包传入虚拟机
php-7.4.0.tar.xz

解包
tar xf php-7.4.0.tar.xz

进入指定目录,准备进行编译和制作安装(php7.4)
cd php-7.4.0/

开始编译
./configure
--prefix=/app/php74
--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

(php7.3为)
./configure --prefix=/app/php73
--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

开始制作安装

make -j 4 && make install

生成变量

echo "PATH=/app/php/bin:$PATH" > /etc/profile.d/php.sh

准备php配置文件

cp /php-7.4.0/php.ini-production /etc/php.ini

准备fastcgi(fpm)主配置文件(改名=启用)

cp /app/php74/etc/php-fpm.conf.default /app/php74/etc/php-fpm.conf

准备子配置文件

cp /app/php74/etc/php-fpm.d/www.conf.default /app/php74/etc/php-fpm.d/www.conf

修改子配置文件,以apache用户身份运行

vim /app/php74/etc/php-fpm.d/www.conf

修改内容为下

;user = nobody
;group = nobody
user = apache
group = apache

开启状态页

Default Value: not set
pm.status_path = /status #取消注释即可

开启ping测试

Default Value: not set
ping.path = /ping #取消注释即可

准备启动脚本

updatedb #更新slocate数据库
locate php-fpm #定位php-fpm

制作启动文件

cp /root/php-7.4.0/sapi/fpm/php-fpm.service /usr/lib/systemd/system

重新加载文件

systemctl daemon-reload

编辑http配置文件

vim /app/httpd24/conf/httpd.conf

修改以及增加内容如下

启动代理(124,1)
LoadModule remoteip_module modules/mod_remoteip.so

LoadModule proxy_module modules/mod_proxy.so #去掉注释启用

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so #去掉注释启用

LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

目录索引index.php(265,22)
新增加以下信息

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off

开启多虚拟主机和status

<virtualhost :80>
servername wordpress.bokebi.org
documentroot /data/app/web/wordpress/
<directory /data/app/web/wordpress/>
require all granted

ProxyPassMatch ^/(status|ping)$ fcgi://127.0.0.1:9000/$1
ProxyPassMatch ^/(.
.php)$ fcgi://127.0.0.1:9000/data/app/web/wordpress/$1
CustomLog "logs/access_wordpress_log" common

<virtualhost :80>
servername discuz.bokebi.org
documentroot /data/app/web/discuz
<directory /data/app/web/discuz>
require all granted

ProxyPassMatch ^/(status|ping)$ fcgi://127.0.0.1:9000/$1
ProxyPassMatch ^/(.
.php)$ fcgi://127.0.0.1:9000/data/app/web/discuz/$1
CustomLog "logs/access_discuz_log" common

创建部署软件需要的目录

mkdir /data/app/web/discuz

准备opcache

查找opcache.so模块路径
locate opcache.so

/app/php74/lib/php/extensions/no-debug-zts-20190902/opcache.so

/root/php-7.4.0/ext/opcache/.libs/opcache.so

/root/php-7.4.0/modules/opcache.so

这三个文件是一样的只是在不同目录里作用不同

[root@centos7 wordpress]$ll /app/php74/lib/php/extensions/no-debug-zts-20190902/opcache.so
-rwxr-xr-x 1 root root 2491984 Dec 15 17:15 /app/php74/lib/php/extensions/no-debug-zts-20190902/opcache.so

[root@centos7 wordpress]$ll /data/php-7.4.0/ext/opcache/.libs/opcache.so
-rwxr-xr-x 1 root root 2491984 Dec 15 17:15 /data/php-7.4.0/ext/opcache/.libs/opcache.so

[root@centos7 wordpress]$ll /data/php-7.4.0/modules/opcache.so
-rwxr-xr-x 1 root root 2491984 Dec 15 17:15 /data/php-7.4.0/modules/opcache.so

准备加速插件文件

mkdir /etc/php.d

编辑文件

vim /etc/php.d/opcache.ini

文件内容
[opcache]
zend_extension=/data/php-7.4.0/modules/opcache.so
opcache.enable=1 #1为开启 #0为关闭

部署wordpress和discuz

将wordpress和discuz安装包传至虚拟机
wordpress-5.3-zh_CN.tar.gz
Discuz_X3.4_SC_UTF8【20191201】.zip

wordpress解包

tar xf wordpress-5.3-zh_CN.tar.gz -C /data/ap/web

discuz解包

unzip Discuz_X3.4_SC_UTF8【20191201】.zip -d /opt

移动至指定目录

mv /opt/upload/* /data/discuz/

给wordpress目录权限

chown -R apache.apache /data/app/web/wordpress/

给discuz目录权限

chown -R apache.apache /data/app/web/discuz/

浏览器访问wordpress.bokebi.org

这是图片

这是图片

这是图片

这是图片

浏览器访问discuz.bokebi.org
这是图片

这是图片

这是图片

这是图片

这是图片

这是图片

这是图片

这是图片

3、通过loganalyzer展示数据库中的日志

安装mysql

yum -y install mariadb-server

systemctl enable --now mariadb && systemctl status mariadb

二、安装rsyslog

yum -y install rsyslog-mysql

将sql脚本复制到数据库服务器

scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.28:/root/

配置mysql服务器

  • 导入数据库

mysql -uroot < mysql-createDB.sql

mysql -e "show databases;"
+--------------------+
| Database |
+--------------------+
| Syslog |
| information_schema |
| mysql |
| performance_schema |
+--------------------+

  • 创建授权用户

mysql -e "create user rsyslog@'10.0.0.%' identified by '123456';"

mysql -e "grant all on Syslog.* to 'rsyslog'@'10.0.0.%';"

mysql -e "select user,host from mysql.user;"
+---------+--------------+
| user | host |
+---------+--------------+
| rsyslog | 10.0.0.% |
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| root | mysql-server |
+---------+--------------+

配置rsyslog服务器

  • 配置日志服务器将日志发送至指定数据库

[root@ rsyslog-server ~]#vim /etc/rsyslog.conf

在 MODULES 语言下面添加
module(load="ommysql")

在RULES语句块下面添加

facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD
*.info :ommysql:10.0.0.28,Syslog,rsyslog,123456

[root@ rsyslog-server ~]# systemctl restart rsyslog.service

  • 测试
    在日志服务器上生成日志

logger "this is a test log"

在数据库上查询到上面的测试日志
$> mysql -e "select count() from Syslog.SystemEvents;"
+----------+
| count(
) |
+----------+
| 1907 |
+----------+

可以看到测试日记已经存到Mysql的Syslog库中

mysql -e "select * from Syslog.SystemEvents\G" | grep -C10 "this is a test log"

部署配置LogAnalyzer

  • 安装LogAnalyzer

wget https://download.adiscon.com/loganalyzer/loganalyzer-4.1.10.tar.gz

tar xvf loganalyzer-4.1.10.tar.gz

mkdir /var/www/html/log

mv loganalyzer-4.1.10/src/* /var/www/html/log

  • 安装相关服务

yum -y install httpd php-fpm php-mysqlnd php-gd

systemctl enable --now httpd php-fpm && systemctl status httpd php-fpm

  • 测试php

php是使用套接字和httpd通讯的,并非监听在9000端口。
需要监听在端口,修改配置文件/etc/php-fpm.d/www.conf,监听端修改为:listen = 127.0.0.1:9000

cat > /var/www/html/info.php << EOF

EOF

打开浏览器访问http://10.0.0.38/info.php,没问题继续下一步操作

基于 web 页面初始化LogAnalyzer

  • 打开浏览器
    访问http://10.0.0.38/log 实现初始化
    这是图片

这是图片

这是图片

  • 提示缺失配置文件

touch /var/www/html/log/config.php

chmod 666 /var/www/html/log/config.php

  • 重新访问

这是图片

这是图片

这是图片

这是图片

  • 测试

[root@reyslog ~]# logger "this is a test log"

[root@reyslog ~]# logger "this is a newtest log

这是图片

这是图片

posted on 2022-03-08 11:32  ray0712  阅读(169)  评论(0)    收藏  举报