1、简述CGI与FASTCGI区别
CGI:Common Gateway Interface 公共网关接口
CGI 在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会 fork 一个新进程来运行外部的 C 程序或者bash,perl脚本等,这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出。
2、 编译安装基于fastcgi模式的多虚拟主机的wordpress和discuz的LAMP架构
1、官网下载mariadb-10.2.31-linux-x86_64.tar.gz
2、编写脚本
vim mariadb.sh
#/bin/bash
mkdir /data/mysal
yum -y install libaio
tar xf mariadb-10.2.31-linux-x86_64.tar.gz -C /usr/local
ln -s /usr/local/mariadb-10.2.31-linux-x86_64/ /usr/local/mysql
chown -R root.root /usr/local/mysql/
useradd -s /sbin/nologin -r mysql
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
bash /etc/profile.d/mysql.sh
ln -s /usr/local/mysql/bin/* /usr/bin/
cat > /etc/my.cnf << EOF
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
/usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysql --user=mysql --basedir=/usr/local/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
systemctl start mysqld
3、执行脚本
bash mariadb.sh
[root@localhost ~]# mysql -uroot
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> create database discuz;
MariaDB [(none)]> grant all on wordpress.* to wordpress@'192.168.52.%' identified by "123456";
MariaDB [(none)]> grant all on discuz.* to discuz@'192.168.52.%' identified by '123456';
搭建网站
#安装相关包
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
编译安装 fastcgi 方式的 php 7.4
yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
wget http://www.atomicorp.com/installers/atomic
chmod +x atomic
./atomic
#php7.4 编译
wget https://www.php.net/distributions/php-7.4.7.tar.gz
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 --version
#准备php配置文件和启动文件
find / -name php.ini-production
cd /root/php-7.4.7/
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
#修改下面行
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
#加下面两行
AddType application/x-httpd-php .php
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>
apachectl restart
#准备wordpress程序文件
mkdir /data/
tar xvf wordpress-5.4.2-zh_CN.tar.gz
mv wordpress/ /data
#准备discuz!程序文件
unzip Discuz_X3.4_SC_UTF8【20191201】.zip
mv DiscuzX/upload/ /data/discuz
chown -R apache.apache /data
3、通过loganalyzer展示数据库中的日志
192.168.52.153 httpserver与rsyslogclient
192.168.52.159 rsyslogserver
192.168.52.160 mysqlserver
总体架构图:
192.168.52.153 httpserver产生日志--->192.168.52.159 rsyslogserver--->192.168.52.160 mysqlserver--->192.168.52.153loganalyzer展示数据库中的日志
开始配置
192.168.52.153 rsyslogclient
[root@httpserver ~]# vi /etc/rsyslog.conf
$ModLoad imudp
$ModLoad imtcp
*.info;mail.none;authpriv.none;cron.none @192.168.52.159:514
[root@httpserver ~]# systemctl restart rsyslog
192.168.52.159 rsyslogserver
[root@rsyslogserver ~]#yum -y install rsyslog-mysql
[root@rsyslogserver ~]#rpm -ql rsyslog-mysql
[root@rsyslogserver ~]#scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.52.160:/root
[root@rsyslogserver ~]#vi /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$ModLoad ommysql
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.52.160,Syslog,rsyslog,123456
[root@rsyslogserver ~]#systemctl restart rsyslog
192.168.52.160开始配置
一键安装mysql-5.6二进制包的脚本(可离线可在线)
#!/bin/bash
DIR=`pwd`
yum -y install wget
wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz || { action "下载失败,异常退出" false;exit 10; }
NAME="mysql-5.6.47-linux-glibc2.12-x86_64"
PACKAGE="${DIR}/${NAME}.tar.gz"
echo $PACKAGE
DATA_DIR="/data/mysql"
yum install -y libaio perl-Data-Dumper
if [ ! -f ${PACKAGE} ];then
echo "安装文件不存在" && exit 1
fi
if [ -h /usr/local/mysql ];then
echo "Mysql 已经安装" && exit 2
fi
tar xvf ${PACKAGE} -C /usr/local/src
ln -sv /usr/local/src/$NAME /usr/local/mysql
id mysql &> /dev/null || useradd -r -u 81 -s /sbin/nologin mysql
chown -R mysql.mysql /usr/local/mysql/*
mkdir -pv /data/mysql && chown -R mysql.mysql /data/mysql
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysql --basedir=/usr/local/mysql/ || exit 3
cp /usr/local/src/${NAME}/support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
#cp ${DIR}/my.cnf /etc/my.cnf
ln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql
cat > /etc/my.cnf <<EOF
[mysqld]
socket=/data/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1
[client]
port=3306
socket=/data/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/tmp/mysql.sock
EOF
chkconfig --add mysqld
chown -R mysql.mysql /data/mysql
/etc/init.d/mysqld start
mysql进入并授权
GRANT ALL ON Syslog.* TO rsyslog@'192.168.52.%' IDENTIFIED BY '123456';
source /root/mysql-createDB.sql
SELECT COUNT(*) FROM Syslog.SystemEvents;
192.168.52.153 httpserver配置:
#从http://loganalyzer.adiscon.com/downloads/ 下载loganalyzer-4.1.12.tar.gz
[root@httpserver ~]#tar xvf loganalyzer-4.1.12.tar.gz
[root@httpserver ~]#mv loganalyzer-4.1.10/src/* /data/discuz
[root@httpserver ~]#touch /data/discuz/config.php
[root@httpserver ~]#chmod 666 /data/discuz/config.php
访问http://forum.magedu.org/install.php,按步骤安装即可