就业和全程班小伙伴本周学习内容:

第二十七天:

http协议和web服务器

1http的cookie和session详解

2LAMP架构和CGI与FASTCGI区别

3常见PHP的配置和php程序

4LAMP各种常见应用

5基于opcache加速LAMP

6实现基于FACTCGI的LAMP架构

7编译安装基于

第二十八天:

日志服务管理

1rsyslog日志服务管理

2rsyslog实现网络日志和MySQL存储日志

3基于loganalyzer实现日志的web展示

4存储类型和ftp服务工作原理

5ftp服务基本配置

6ftp服务常见功能实现

就业班(全程班)第十四周作业

1、简述CGI与FASTCGI区别
2、编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
3、通过loganalyzer展示数据库中的日志

1、简述CGI与FASTCGI区别

1.1 CGI:Common Gateway Interface 公共网关接口

CGI 在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会 fork 一个新进程来运行外部的 C 程序或者bash,perl脚本等,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。

CGI 可以让一个客户端,从网页浏览器通过http服务器向执行在网络服务器上的程序传输数据;CGI描述了客户端和服务器程序之间传输的一种标准。

请求流程:

Client -- (http协议) --> httpd -- (cgi协议) --> application server (program file) -- (mysql协议) --> mysql

1.2 fastcgi

fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出

请求流程:

Client -- (http协议) --> httpd -- (fastcgi协议) --> fastcgi服务器 -- (mysql协议) --> mysql

1.3 CGI 和 FASTCGI 比较

  • CGI: 兼职, 一次性的过河拆桥式的服务
  • FASTCGI: 专职,全周期的持续式的服务

通过以上的工作原理,我们可以看出两者的区别主要表现为:

①在web服务器方面:CGI需要fork一个新的进程来处理,而FastCGI则是用TCP方式跟远程主机上的进程或本地进程进行连接。

②在对数据处理的进程方面:CGI在读取参数、处理数据后结束生命周期,FastCGI则是开启TCP端口,并进入循环,一旦有数据进来就进行数据的处理,不会退出。

通过两者的对比,我们会发现,FastCGI的程序性能会更好,同时安全性也更高,可谓是加强版的CGI,在当前的生产中,一般也是会用FastCGI来代替传统的CGI。

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

2.1 目标

实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构

2.2 环境准备

两台主机:

  • 一台主机:httpd+php(fastcgi模式) 10.0.0.7
  • 一台主机:mysql 服务器 10.0.0.8

软件版本:

  • CentOS 7.9
  • mysql-8.0.19-linux-glibc2.12-x86_64.tar 通用二进制格式
  • 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

2.3 实现步骤

2.3.1 二进制安装 mysql (10.0.0.8)
[root@centos8 ~]#cat install_mysql_centos.sh
. /etc/init.d/functions
SRC_DIR=`pwd`
MYSQL='mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz'
COLOR='echo -e \E[01;31m'
END='\E[0m' check (){
if [ $UID -ne 0 ];then
action "当前用户不是root,安装失败" false
exit 1
fi cd $SRC_DIR
if [ ! -e $MYSQL ];then
$COLOR"缺少${MYSQL}文件"$END
$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
exit
elif [ -e /usr/local/mysql ];then
action "数据库已存在,安装失败" false
exit
else
return
fi
} install_mysql(){
$COLOR"开始安装MYSQL数据库"$END
yum -y -q install libaio numactl-libs ncurses-compat-libs ncurses-c++-libs
cd $SRC_DIR
tar xf $MYSQL -C /usr/local/
MYSQL_DIR=`echo $MYSQL|sed -nr 's/^(.*[0-9]).*/\1/p'`
ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
chown -R root.root /usr/local/mysql/
id mysql &> /dev/null || { useradd -s /sbin/nologin -r mysql ; action "创建mysql用户"; }
echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
ln -s /usr/local/mysql/bin/* /usr/bin/
cat > /etc/my.cnf <<EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
[ -d /data ] || mkdir /data
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
service mysqld start
[ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }
sleep 3
action "数据库安装完成"
} check install_mysql
[root@centos8 ~]#mysql -uroot

create database blog;
create database forum;
create user blog@'10.0.0.%' identified by '123456';
create user forum@'10.0.0.%' identified by '123456';
grant all on blog.* to blog@'10.0.0.%';
grant all on forum.* to forum@'10.0.0.%'; mysql>
2.3.2编译安装httpd-2.4 (10.0.0.7)
#安装相关包
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
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
httpd -M |grep mpm
mpm_event_module (shared)
apachectl start [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 #一键安装httpd脚本
#!/bin/bash
APR_URL=https://mirrors.aliyun.com/apache/apr/
APR_FILE=apr-1.7.2
TAR=.tar.bz2
APR_UTIL_URL=https://mirrors.aliyun.com/apache/apr/
APR_UTIL_FILE=apr-util-1.6.3
HTTPD_URL=https://mirrors.aliyun.com/apache/httpd/
HTTPD_FILE=httpd-2.4.55
INSTALL_DIR=/apps/httpd24
CPUS=`lscpu |awk '/^CPU\(S\)/{print $2}'`
MPM=event install_httpd(){
if [ `awk -F'"' '/^ID=/{print $2}' /etc/os-release` == "centos" ] &>/dev/null;then
yum -y install gcc make pcre-devel openssl-devel expat-devel wget bzip2
else
apt update
apt -y install gcc make libapr1-dev libaprutil1-dev libpcre3 libpcre3-dev libssl-dev wget
fi
cd /usr/local/src
wget $APR_URL$APR_FILE$TAR && wget $APR_UTIL_URL$APR_UTIL_FILE$TAR && wget $HTTPD_URL$HTTPD_FILE$TAR
tar xf $APR_FILE$TAR && tar xf $APR_UTIL_FILE$TAR && tar xf $HTTPD_FILE$TAR
mv $APR_FILE $HTTPD_FILE/srclib/apr
mv $APR_UTIL_FILE $HTTPD_FILE/srclib/apr-util
cd $HTTPD_FILE
./configure --prefix=$INSTALL_DIR --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=$MPM
make -j $CPUS && make install
useradd -s /sbin/nologin -r apache
sed -i 's/daemon/apache/' $INSTALL_DIR/conf/httpd.conf
echo "PATH=$INSTALL_DIR/bin:$PATH" > /etc/profile.d/http24.sh
. /etc/profile.d/httpd24.sh
cat > /lib/systemd/system/httpd.service <<EOF
[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
ExecStart=${INSTALL_DIR}/bin/apachectl start
ExecReload=${INSTALL_DIR}/bin/apachectl graceful
ExecStop=${INSTALL_DIR}/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now httpd
} install_httpd
2.3.3 编译安装 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
[root@centos7 ~]#php --version
PHP 7.4.7 (cli) (built: Jul 1 2020 09:59:57) ( ZTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies #准备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
2.3.4 修改配置 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
#修改下面行
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
#加下面三行
AddType application/x-httpd-php .php
#AddType application/x-httpd-php-source .phps
ProxyRequests Off #实现第一个虚拟主机
<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
#实现status和ping页面
ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
CustomLog "logs/access_wordpress_log" common
</virtualhost>
#第二个虚拟主机
<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> [root@centos7 ~]#systemctl restart httpd
2.3.5 准备wordpress和discuz! 相关文件
#准备wordpress程序文件
mkdir /data/
tar xvf upzip wordpress-6.1.1-zh_CN.zip
mv wordpress/ /data
setfacl –R –m u:apache:rwx /data/wordpress/
#或者chown –R apache.apache /data/wordpress
#准备discuz!程序文件
unzip Discuz_X3.5_SC_UTF8_20230210.zip
mv DiscuzX/upload/ /data/discuz
setfacl -R -m u:apache:rwx /data/discuz/
2.3.6 测试访问
vim /etc/hosts
10.0.0.7 blog.magedu.org forum.magedu.org

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

loganalyzer是用 php 语言实现的日志管理系统,可将MySQL数据库的日志用丰富的WEB方式进行展示

官网:https://loganalyzer.adiscon.com

3.1目标

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

3.2环境准备

三台主机

一台日志服务器,利用上一个案例实现,IP:10.0.0.8,

一台数据库服务器,利用上一个案例实现,IP:10.0.0.18

一台当httpd+php 服务器,并安装loganalyzer展示web图形,IP:10.0.0.28

3.2.1步骤

3.2.1.1 安装 php和相关软件包

在10.0.0.28主机上安装httpd, php和相关软件包

[root@centos8 ~]#yum -y install httpd php-fpm php-mysqlnd php-gd
[root@centos8 ~]#systemctl enable --now httpd php-fpm

3.2.1.2安装 LogAnalyzer

在10.0.0.28主机上安装LogAnalyzer

#从http://loganalyzer.adiscon.com/downloads/ 下载loganalyzer-4.1.10.tar.gz
[root@centos8 ~]#tar xvf loganalyzer-4.1.10.tar.gz
[root@centos8 ~]#mv loganalyzer-4.1.10/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.2.1.3基于 web 页面初始化

访问http://10.0.0.28/log 实现初始化

选择:MySQL Native, Syslog Fields, Monitorware

3.2.1.3安全加强

在10.0.0.28上进行安全加固

[root@centos8 ~]#chmod 644 /var/www/html/log/config.php

最新文章

  1. android开发Preference的使用
  2. JavaScript使用接口
  3. Cdnbes负载均衡的权重用法解释
  4. MySQL 四种事务隔离级的说明
  5. hdu-5521 Meeting(最短路)
  6. 字典树(Tire)模板
  7. SpringMVC 自定义参数绑定实现日期类型绑定
  8. 安装oneproxy实现数据库的读写分离
  9. PHP源码阅读strtr
  10. 网站开发进阶(二十一)Angular项目信息错位显示问题解决
  11. github page 配置hexo 博客 的常见错误
  12. 论文笔记系列-Well Begun Is Half Done:Generating High-Quality Seeds for Automatic Image Dataset Construction from Web
  13. change safari user agent
  14. Swift5 语言参考(三) 类型
  15. js获取checkbox中所有选中值及input后面所跟的文本
  16. BusyBox ifup udhcpc后台运行
  17. (转)h264中avc和flv数据的解析
  18. Uva 10815-Andy&amp;#39;s First Dictionary(串)
  19. https如何工作
  20. EF添加和修改

热门文章

  1. prometheus-监控docker服务器
  2. 初探富文本之OT协同算法
  3. GreenPlum批量授权(PG未测试)
  4. 使用gm/ID方法设计二级运算放大器
  5. vue3+quasar+capacitor开发多平台项目,使用cordova和capacitor插件(支持所有前端框架)
  6. Translent关键字-InvalidClassException异常_原理和解决方案
  7. Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介
  8. Windows离线安装.net Framework3.5
  9. java优化几个小步骤
  10. vue项目部署在nodejs+express