第14周作业

1、简述CGI与FASTCGI区别

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

fastcgi
fastcgi的方式是,web服务器收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启
动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用
了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着
等待下一个请求的到来,而不是退出
请求流程:
Client -- (http协议) --> httpd -- (fastcgi协议) --> fastcgi服务器 -- (mysql协议) --> mysql
 
CGI和fastcgi 比较
CGI: 兼职, 一次性的过河拆桥式的服务
FASTCGI: 专职,全周期的持续式的服务
在web服务器方面:
cgi fork一个新的进程进行处理
fastcgi 用tcp方式跟远程机子上的进程或本地进程建立连接
在对数据进行处理的进程方面:
cgi 读取参数,处理数据,然后就结束生命期
fastcgi 要开启tcp端口,进入循环,等待数据的到来,处理数据
 


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

1、为wordpress和discuz应用准备数据库和账户

[root@centos7 ~]#vim /etc/my.cnf
skip_name_resolve = ON 
[root@centos7 ~]#systemctl restart mysqld
MariaDB [mysql]>create database wordpress;
MariaDB [mysql]>create database discuz;
MariaDB [mysql]>grant all on wordpress.* to wordpress@'10.0.0.%' identified by "123456";
MariaDB [mysql]>grant all on discuz.* to discuz@'10.0.0.%' identified by "123456";
MariaDB [mysql]>FLUSH PRIVILEGES;

2、编译安装httpd2.4

[root@centos7 ~]#yum install gcc pcre-devel openssl-devel expat-devel -y
[root@centos7 ~]#tar xvf apr-1.7.0.tar.bz2
[root@centos7 ~]#tar xvf apr-util-1.6.1.tar.bz2
[root@centos7 ~]#tar xf httpd-2.4.46.tar.bz2
[root@centos7 ~]#mv apr-1.7.0 httpd-2.4.46/srclib/apr
[root@centos7 ~]#mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
[root@centos7 ~]#cd httpd-2.4.46/
[root@centos7 httpd-2.4.46]#./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
[root@centos7 httpd-2.4.46]#make && make install
[root@centos7 httpd-2.4.46]#vim /etc/profile.d/lamp.sh
#!/bin/bash
PATH=/apps/httpd/bin:$PATH
[root@centos7 httpd-2.4.46]#. /etc/profile.d/lamp.sh
[root@centos7 httpd-2.4.46]#useradd -s /sbin/nologin -r -u 88 apache
[root@centos7 httpd-2.4.46]#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
[root@centos7 httpd-2.4.46]#httpd -M grep mpm
 mpm_event_module (shared)
[root@centos7 httpd-2.4.46]#apachectl start
[root@centos7 httpd-2.4.46]#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=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecStart=/apps/httpd/bin/apachectl start
#ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecReload=/apps/httpd/bin/apachectl graceful
ExecStop=/apps/httpd/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target
[root@centos7 httpd-2.4.46]#systemctl daemon-reload
[root@centos7 httpd-2.4.46]#systemctl restart httpd.service

3、编译安装fastcgi方式的php7.4

[root@centos7 httpd-2.4.46]#yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
[root@centos7 httpd-2.4.46]#cd
[root@centos7 ~]#tar xvf php-7.4.28.tar.gz
[root@centos7 ~]#cd php-7.4.28
[root@centos7 php-7.4.28]#./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.28]#make -j 2 && make install
[root@centos7 php-7.4.28]#vim /etc/profile.d/lamp.sh
[root@centos7 php-7.4.28]#php --version
PHP 7.4.28 (cli) (built: Sep 3 2022 14:55:19) ( ZTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
[root@centos7 php-7.4.28]#cp php.ini-production /etc/php.ini
[root@centos7 php-7.4.28]#cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
[root@centos7 php-7.4.28]#cd /apps/php/etc
[root@centos7 etc]#cp php-fpm.conf.default php-fpm.conf
[root@centos7 etc]#cd php-fpm.d/
[root@centos7 php-fpm.d]#cp www.conf.default www.conf
[root@centos7 php-fpm.d]#vim www.conf
user = apache
group = apache

pm.status_path = /fpm_status
ping.path = /ping
[root@centos7 php-fpm.d]#mkdir /etc/php.d/
[opcache]
zend_extension=opcache.so
opcache.enable=1
[root@centos7 php-fpm.d]#systemctl daemon-reload
[root@centos7 php-fpm.d]#systemctl enable --now php-fpm.service

4、修改配置httpd支持php-fpm

[root@centos7 php-fpm.d]#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.linux2022.com
documentroot /data/blog
<directory /data/blog>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/blog/$1

ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
CustomLog "logs/access_blog_log" common
</virtualhost>

<virtualhost *:80>
servername forum.linux2022.com
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 php-fpm.d]#systemctl restart httpd.service
5、准备wordpress和discuz 相关文件
[root@centos7 php-fpm.d]#cd /data/
[root@centos7 data]#mkdir blog forum
[root@centos7 data]#cd
[root@centos7 ~]#tar xf latest-zh_CN.tar.gz
[root@centos7 ~]#mv wordpress/* /data/blog/
[root@centos7 ~]#mv Discuz_x3.4_SC_UTF8_20210630.zip /opt
[root@centos7 ~]#cd /opt
[root@centos7 opt]#unzip Discuz_X3.4_SC_UTF8_20210630.zip
[root@centos7 opt]#mv upload/* /data/forum/
[root@centos7 opt]#chown -R apache.apache /data/*


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

1、在rsyslog服务器安装连接Mysql模块相关程序包

[root@centos7 ~]#yum install -y rsyslog-mysql
[root@centos7 ~]#rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
[root@centos7 ~]#cat /usr/share/doc/rsyslog-8.24.l0/mysql-createDB.sql
CREATE DATABASE Syslog;
USE Syslog;
CREATE TABLE SystemEvents
(
        ID int unsigned not null auto_increment primary key,
        CustomerID bigint,
        ReceivedAt datetime NULL,
        DeviceReportedTime datetime NULL,
        Facility smallint NULL,
        Priority smallint NULL,
        FromHost varchar(60) NULL,
        Message text,
        NTSeverity int NULL,
        Importance int NULL,
        EventSource varchar(60),
        EventUser varchar(60) NULL,
        EventCategory int NULL,
        EventID int NULL,
        EventBinaryData text NULL,
        MaxAvailable int NULL,
        CurrUsage int NULL,
        MinUsage int NULL,
        MaxUsage int NULL,
        InfoUnitID int NULL ,
        SysLogTag varchar(60),
        EventLogType varchar(60),
        GenericFileName VarChar(60),
        SystemID int NULL
);

CREATE TABLE SystemEventsProperties
(
        ID int unsigned not null auto_increment primary key,
        SystemEventID int NULL ,
        ParamName varchar(255) NULL ,
        ParamValue text NULL
);
[root@centos7 ~]#scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 10.0.0.7:/data

2、准备MySQL server

MariaDB [mysql]> source /data/mysql-createDB.sql
MariaDB [Syslog]> GRANT ALL PRIVILEGES ON Syslog.* TO 'rsyslog'@'10.0.0.%' IDENTIFIED BY '123456';
MariaDB [Syslog]> FLUSH PRIVILEGES;

3、配置日志服务器将日志发送到指定数据库

[root@centos7 ~]#vim /etc/rsyslog.conf
#### MODULES ####
$ModLoad ommysql
#facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD
*.info;mail.none;authpriv.none;cron.none     :ommysql:10.0.0.7,Syslog,rsyslog,123456
[root@centos7 ~]#systemctl restart rsyslog.service

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值