1、简述CGI与FASTCGI区别
1.1CGI:Common Gateway Interface 公共网关接口 CGI 在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请 求怎么办呢?web服务器会根据这次请求的内容,然后会 fork 一个新进程来运行外部的 C 程序或者 bash,perl脚本等,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户, 刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进 程,周而复始的进行。 CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述 了客户端和服务器程序之间传输的一种标准
1.2fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启 动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用 了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着 等待下一个请求的到来,而不是退出
1.3通过以上的工作原理,我们可以看出两者的区别主要表现为:
①在web服务器方面:CGI需要fork一个新的进程来处理,而FastCGI则是用TCP方式跟远程主机上的进程或本地进程进行连接。
②在对数据处理的进程方面:CGI在读取参数、处理数据后结束生命周期,FastCGI则是开启TCP端口,并进入循环,一旦有数据进来就进行数据的处理,不会退出。
通过两者的对比,我们会发现,FastCGI的程序性能会更好,同时安全性也更高,可谓是加强版的CGI,在当前的生产中,一般也是会用FastCGI来代替传统的CGI。
2、 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构
两台主机:
一台主机:httpd+php(fastcgi模式)
一台主机:mariadb 服务器
软件版本:
CentOS 7.8
mariadb-10.2.43-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
wordpress-5.4.2-zh_CN.tar.gz Discuz_X3.4_SC_UTF8【20191201】.zip
实现步骤 7.2.3.1 二进制安装 mariadb
useradd -r -s /sbin/nologin mysql
tar xvf mariadb-10.2.27-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -sv mariadb-10.2.27-linux-x86_64 mysql
cd mysql
chown -R root.root ./*
mkdir /data/mysql -p
chown -R mysql.mysql /data/mysql
mkdir /etc/mysql
cp support-files/my-huge.cnf /etc/mysql/my.cnf
vim /etc/mysql/my.cnf
[mysqld]
#加下面行
datadir =/data/mysql
skip_name_resolve = ON
#准备PATH变量
vim /etc/profile.d/lamp.sh
PATH=/usr/local/mysql/bin/:$PATH
. /etc/profile.d/lamp.sh
yum install libaio -y
cd /usr/local/mysql;scripts/mysql_install_db --user=mysql --datadir=/data/mysql
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start
#为wordprss和discuz应用准备数据库和用户帐号
mysql -uroot
mysql> create database wordpress;
mysql> create database discuz;
mysql> grant all on wordpress.* to wordpress@'10.0.0.%' identified by "wppass";
mysql> grant all on discuz.* to discuz@'10.0.0.%' identified by 'dispass';
编译安装 httpd 2.4
#安装相关包
yum install gcc pcre-devel openssl-devel expat-devel -y
#编译安装httpd
tar xvf apr-1.7.0.tar.bz2
tar xvf apr-util-1.6.1.tar.bz2
tar xf httpd-2.4.43.tar.gz
mv apr-1.7.0 httpd-2.4.43/srclib/apr
mv apr-util-1.6.1 httpd-2.4.43/srclib/apr-util
cd httpd-2.4.43/
./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
make && make install
#准备PATH变量
vim /etc/profile.d/lamp.sh
PATH=/apps/httpd/bin:$PATH
. /etc/profile.d/lamp.sh
#创建和配置用户和组
useradd -s /sbin/nologin -r -u 88 apache
vim /apps/httpd/conf/httpd.conf
user apache
group apache
#修改为event模式,编译时已指定,此项不再需修改,可选项
vim /apps/httpd/conf/httpd.conf
LoadModule mpm_event_module modules/mod_mpm_event.so
[root@centos7 ~]#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 ~]#systemctl daemon-reload
[root@centos7 ~]#systemctl start httpd
root@centos7 ~]#systemctl enabled httpd
编译安装 fastcgi 方式的 php 7.4
#安装相关包,依赖EPEL源
#php 7.4 相关包
yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel
oniguruma-devel
#php7.4 编译
tar xvf php-7.4.7.tar.xz
cd php-7.4.7/
./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
make -j 4 && make install
#准备PATH变量
#php7.4
vim /etc/profile.d/lamp.sh
PATH=/apps/php/bin:/apps/httpd/bin:$PATH
. /etc/profile.d/lamp.sh
#准备php配置文件和启动文件
cp php.ini-production /etc/php.ini
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
cd /apps/php/etc
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d/
cp www.conf.default www.conf
#修改进程所有者
vim /apps/php/etc/php-fpm.d/www.conf
user apache
group apache
#支持status和ping页面
pm.status_path = /fpm_status
ping.path = /ping
#支持opcache加速
mkdir /etc/php.d/
vim /etc/php.d/opcache.ini
[opcache]
zend_extension=opcache.so
opcache.enable=1
systemctl daemon-reload
systemctl status php-fpm.service
systemctl enable --now php-fpm.service
修改配置 httpd 支持 php-fpm
vim /apps/httpd/conf/httpd.conf
#取消下面两行的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#修改下面行
DirectoryIndex index.php index.html
#加下面三行
AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
ProxyRequests Off
#实现第一个虚拟主机
servername blog.magedu.org
documentroot /data/wordpress
require all granted
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
CustomLog "logs/access_discuz_log" common
#重启apache
systemctl restart httpd
准备wordpress和discuz! 相关文件
#准备wordpress程序文件
mkdir /data/
tar xvf wordpress-5.4.2-zh_CN.tar.gz
mv wordpress/ /data
setfacl –R –m u:apache:rwx /data/wordpress/
#或者chown –R apache.apache /data/wordpress
#准备discuz!程序文件
unzip Discuz_X3.4_SC_UTF8【20191201】.zip
mv DiscuzX/upload/ /data/discuz
setfacl -R -m u:apache:rwx /data/discuz/
测试访问
vim /etc/hosts
10.0.0.7 blog.magedu.org forum.magedu.org
3、通过loganalyzer展示数据库中的日志
一、安装mysql
yum -y install mariadb-server
systemctl enable --now mariadb
二、安装rsyslog
yum -y install rsyslog-mysql
#将sql脚本复制到数据库服务器
scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.28:/root/
三、配置mysql服务器
3.1 导入数据库
mysql -uroot < mysql-createDB.sql
mysql -e "show databases;"
+--------------------+
| Database |
+--------------------+
| Syslog |
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3.2 创建授权用户
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服务器
4.1 配置日志服务器将日志发送至指定数据库
[root@ rsyslog-server ~]vim /etc/rsyslog.conf
#在 MODULES 语言下面,如果是 CentOS 8 加下面行
####MODULES#### #在 MODULES 语言下面添加
module(load="ommysql")
#在 MODULES 语言下面,如果是 CentOS 7,6 加下面行
$ModLoad ommysql
#在RULES语句块下面添加
#RULES
#facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD
*.info :ommysql:10.0.0.28,Syslog,rsyslog,123456
[root@ rsyslog-server ~]systemctl restart rsyslog.service
4.2 测试
#在日志服务器上生成日志
logger "this is a test log"
#在数据库上查询到上面的测试日志
$> mysql -e "select count(*) from Syslog.SystemEvents;"
#也可以看到测试日记已经存到Mysql的Syslog库中
mysql -e "select * from Syslog.SystemEventsG" | grep -C10 "this is a test log"
五、部署配置LogAnalyzer
5.1 安装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
5.2 安装相关服务
yum -y install httpd php-fpm php-mysqlnd php-gd
systemctl enable --now httpd php-fpm
5.3 测试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 页面初始化
访问http://10.0.0.28/log 实现初始化
提示缺失配置文件
[root@web ~]# touch /var/www/html/log/config.php
[root@web ~]# chmod 666 /var/www/html/log/config.php
重新访问
测试
[root@reyslog ~]# logger "this is a test log"
[root@reyslog ~]# logger "this is a newtest log



