• 第十四周练习题


    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的方式是,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架构

    目标
    实现CentOS 7 编译安装基于 fastcgi 模式的多虚拟主机的wordpress和discuz的LAMP架构
    
    环境准备
    两台主机:
    一台主机:httpd+php(fastcgi模式) 10.0.0.152
    一台主机:mariadb 服务器 10.0.0.162
    
    软件版本:
    CentOS 7.9
    mariadb-10.2.31-linux-x86_64.tar.gz 通用二进制格式
    apr-1.7.0.tar.bz2
    apr-util-1.6.1.tar.bz2
    httpd-2.4.46.tar.bz2
    php-7.4.25.tar.xz
    wordpress-5.4.1-zh_CN.tar.gz
    Discuz_X3.4_SC_UTF8_20211022.zip
    
    
    服务器10.0.0.162上:
    二进制安装 mariadb
    [root@localhost ~]# useradd -r -s /sbin/nologin mysql
    [root@localhost ~]# tar xvf mariadb-10.2.31-linux-x86_64.tar.gz  -C /usr/local
    [root@localhost ~]# cd /usr/local/
    [root@localhost local]# ln -sv mariadb-10.2.31-linux-x86_64/ mysql
    ‘mysql’ -> ‘mariadb-10.2.31-linux-x86_64/’
    [root@localhost local]# cd mysql/
    [root@localhost mysql]# chown -R root:root ./*
    [root@localhost mysql]# mkdir /data/mysql -p
    [root@localhost mysql]# chown -R mysql:mysql /data/mysql
    [root@localhost mysql]# mkdir /etc/mysql
    [root@localhost mysql]# cp support-files/my-huge.cnf /etc/mysql/my.cnf
    
    [root@localhost mysql]# vim /etc/mysql/my.cnf
    [mysqld]
    #加下面行
    datadir =/data/mysql
    skip_name_resolve = ON 
    
    #准备PATH变量
    [root@localhost mysql]# vim /etc/profile.d/lamp.sh
    PATH=/usr/local/mysql/bin/:$PATH
    [root@localhost mysql]# . /etc/profile.d/lamp.sh
    
    
    [root@localhost mysql]# yum install -y libaio
    [root@localhost mysql]# cd /usr/local/mysql;scripts/mysql_install_db --user=mysql --datadir=/data/mysql
    [root@localhost mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    [root@localhost mysql]# chkconfig --add mysqld
    [root@localhost mysql]# service mysqld start
    
    
    #为wordprss和discuz应用准备数据库和用户帐号
    [root@localhost mysql]# mysql -uroot
    MariaDB [(none)]>  create database wordpress;
    MariaDB [(none)]>  create database discuz;
    MariaDB [(none)]>  grant all on wordpress.* to wordpress@'10.0.0.%' identified by "wppass";
    MariaDB [(none)]> grant all on discuz.* to discuz@'10.0.0.%' identified by 'dispass'; 
    MariaDB [(none)]> flush privileges;
    
    
    
    10.0.0.152上:
    编译安装httpd2.4
    #安装相关包
    [root@localhost ~]# yum install gcc pcre-devel openssl-devel expat-devel -y
    
    #编译安装httpd
    [root@localhost ~]#tar xf apr-1.7.0.tar.bz2
    [root@localhost ~]#tar xf apr-util-1.6.1.tar.bz2
    [root@localhost ~]# tar xf  httpd-2.4.46.tar.bz2
    [root@localhost ~]# mv apr-1.7.0 httpd-2.4.46/srclib/apr
    [root@localhost ~]# mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
    [root@localhost ~]# cd httpd-2.4.46
    [root@localhost ~]# mkdir /apps
    [root@localhost 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@localhost httpd-2.4.46]# make -j2 && make install 
    
    #准备PATH变量
    [root@localhost ~]# vim /etc/profile.d/lamp.sh
    PATH=/apps/httpd/bin:$PATH
    [root@localhost ~]# . /etc/profile.d/lamp.sh
    
    #创建和配置用户和组
    [root@localhost ~]# useradd -s /sbin/nologin -r -u 88 apache
    [root@localhost ~]# 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
    
    [root@localhost ~]#httpd -M |grep mpm
    mpm_event_module (shared)
    
    [root@localhost ~]# apachectl start
    
    
    [root@localhost ~]#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
    #安装相关包,依赖EPEL源
    #php 7.4 相关包
    [root@localhost ~]#yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel
    
    #php 7.3 相关包
    #yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel 
    
    #php7.4 编译
    [root@localhost ~]# tar xf php-7.4.25.tar.xz
    [root@localhost ~]# cd php-7.4.25
    [root@localhost ~]#./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
    
    #编译安装php 7.3
    tar xvf php-7.3.10.tar.bz2
    cd php-7.3.10
    ./configure --prefix=/apps/php \
    --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
    
    [root@localhost ~]#make -j 2 && make install
    
    #准备PATH变量
    #php7.4
    [root@localhost ~]#vim /etc/profile.d/lamp.sh
    PATH=/apps/php/bin:/apps/httpd/bin:$PATH
    [root@localhost ~]# . /etc/profile.d/lamp.sh
    
    [root@centos7 ~]#php --version
    PHP 7.4.25 (cli) (built: Nov 17 2021 04:04:48) ( ZTS )
    Copyright (c) The PHP Group
    Zend Engine v3.4.0, Copyright (c) Zend Technologies
    
    
    #准备php配置文件和启动文件
    [root@localhost php-7.4.25]# cp php.ini-production /etc/php.ini
    [root@localhost php-7.4.25]# cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    [root@localhost php-7.4.25]# cd /apps/php/etc
    [root@localhost etc]# cp php-fpm.conf.default php-fpm.conf
    [root@localhost etc]# cd php-fpm.d/
    [root@localhost php-fpm.d]# cp www.conf.default www.conf
    
    
    #修改进程所有者
    [root@localhost php-fpm.d]# vim /apps/php/etc/php-fpm.d/www.conf
    user apache
    group apache 
    #支持status和ping页面
    pm.status_path = /fpm_status
    ping.path = /ping  
    
    #支持opcache加速
    [root@localhost php-fpm.d]# mkdir /etc/php.d/
    [root@localhost php-fpm.d]# vim /etc/php.d/opcache.ini
    [opcache]
    zend_extension=opcache.so
    opcache.enable=1
    
    [root@localhost ~]#systemctl daemon-reload
    [root@localhost ~]#systemctl status php-fpm.service
    [root@localhost ~]#systemctl enable --now php-fpm.service
    [root@localhost ~]#systemctl status 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
    #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@localhost ~]# httpd -t
    AH00112: Warning: DocumentRoot [/data/wordpress] does not exist
    AH00112: Warning: DocumentRoot [/data/discuz] does not exist
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
    Syntax OK
    
    [root@localhost ~]# apachectl restart
    AH00112: Warning: DocumentRoot [/data/wordpress] does not exist
    AH00112: Warning: DocumentRoot [/data/discuz] does not exist
    AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
    
    
    #准备wordpress和discuz! 相关文件
    #准备wordpress程序文件
    [root@localhost ~]# mkdir /data/
    [root@localhost ~]# tar xf wordpress-5.4.1-zh_CN.tar.gz
    [root@localhost ~]# mv wordpress/ /data
    [root@localhost ~]# setfacl -R -m u:apache:rwx /data/wordpress/
    #或者chown –R apache.apache /data/wordpress
    
    #准备discuz!程序文件
    [root@localhost ~]# unzip Discuz_X3.4_SC_UTF8_20211022.zip
    [root@localhost ~]# mv upload/ /data/discuz
    [root@localhost ~]# setfacl -R -m u:apache:rwx /data/discuz/
    
    
    #测试访问
    在windows机器上修改hosts文件解析C:\Windows\System32\drivers\etc\hosts文件中添加一行
    10.0.0.152 blog.magedu.org forum.magedu.org
    打开浏览器访问 http://blog.magedu.org 和http://forum.magedu.org 分别进行初始化和安装
    填写对应数据库地址,数据库名,账号,密码。和以上在10.0.0.162主机的数据库中授权的一致。
    访问http://blog.magedu.org/fpm_status ; http://blog.magedu.org/ping
    
    #修改成UDS模式
    [root@localhost ~]# vim /apps/php/etc/php-fpm.d/www.conf
    ;listen = 127.0.0.1:9000
    listen = /run/php-fpm.sock
    listen.owner = apache
    listen.group = apache
    listen.mode = 0660
    
    [root@localhost ~]# systemctl restart php-fpm
    
    [root@localhost ~]# ll /run/php-fpm.sock
    srw-rw---- 1 apache apache 0 Nov 17 04:54 /run/php-fpm.sock
    
    [root@localhost ~]#vim /apps/httpd/conf/httpd.conf
    <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
    ProxyPassMatch ^/(.*\.php)$ "unix:/run/php-fpm.sock|fcgi://localhost/data/wordpress/"
    
    #ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
    ProxyPassMatch ^/(fpm_status|ping)$ "unix:/run/php-fpm.sock|fcgi://localhost/"   
    
    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
    ProxyPassMatch ^/(.*\.php)$ "unix:/run/php-fpm.sock|fcgi://localhost/data/discuz/"
    #ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1
    ProxyPassMatch ^/(fpm_status|ping)$ "unix:/run/php-fpm.sock|fcgi://localhost/"   
    CustomLog "logs/access_discuz_log" common
    </virtualhost>
    
    [root@localhost ~]# systemctl restart php-fpm
    [root@localhost ~]# systemctl restart httpd
    #再次访问也是ok的
    

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

    loganalyzer是用 php 语言实现的日志管理系统,可将MySQL数据库的日志用丰富的WEB方式进行展示
    官网:https://loganalyzer.adiscon.com
    
    三台主机
    一台日志服务器,利用上一个案例实现,IP:10.0.0.160,
    一台数据库服务器,利用上一个案例实现,IP:10.0.0.170
    一台当httpd+php 服务器,并安装loganalyzer展示web图形,IP:10.0.0.150
    
    #在10.0.0.160 rsyslog服务器上安装连接mysql模块相关的程序包
    [root@centos8 ~]#yum install rsyslog-mysql
    [root@centos8 ~]#rpm -ql rsyslog-mysql
    /usr/lib/.build-id
    /usr/lib/.build-id/d7
    /usr/lib/.build-id/d7/77fc839aa07e92f0a8858cf3f122996436c7df
    /usr/lib64/rsyslog/ommysql.so
    /usr/share/doc/rsyslog/mysql-createDB.sql
    #查看sql脚本文件内容
    [root@centos8 ~]#cat /usr/share/doc/rsyslog/mysql-createDB.sql
    #将sql脚本复制到数据库服库上
    [root@centos8 ~]#scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.170:/data
    
    #10.0.0.170准备MySQL Server
    [root@centos8 ~]#yum install mariadb-server
    #在mariadb数据库服务器上创建相关数据库和表,并授权rsyslog能连接至当前服务器
    [root@centos8 ~]#systemctl --now enable mariadb
    [root@centos8 ~]#mysql 
    MariaDB [(none)]> source /data/mysql-createDB.sql
    MariaDB [Syslog]> GRANT ALL ON Syslog.* TO 'rsyslog'@'10.0.0.%' IDENTIFIED BY '123456';
    MariaDB [Syslog]> flush privileges;
    
    #10.0.0.160上配置日志服务器将日志发送至指定数据库
    #配置rsyslog将日志保存到mysql中
    [root@centos8 ~]#vim /etc/rsyslog.conf
    #
    ####MODULES####
    #在 MODULES 语言下面,如果是 CentOS 8 加下面行
    module(load="ommysql") 
    #在 MODULES 语言下面,如果是 CentOS 7,6 加下面行
    $ModLoad ommysql 
    #在RULES语句块加下面行的格式
    #facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD 
    *.info :ommysql:10.0.0.170,Syslog,rsyslog,123456
    [root@centos8 ~]#systemctl restart rsyslog
    
    #在日志服务器上生成日志
    [root@centos8 ~]#logger "this is a test log"
    #在数据库上查询到上面的测试日志
    MariaDB [Syslog]> SELECT * FROM SystemEvents\G;
    
    
    #在10.0.0.150主机上安装httpd, php和相关软件包
    [root@centos8 ~]#yum -y install httpd php-fpm php-mysqlnd php-gd
    [root@centos8 ~]#systemctl enable --now httpd php-fpm
    #从http://loganalyzer.adiscon.com/downloads/ 下载loganalyzer-4.1.12.tar.gz
    [root@centos8 ~]#tar xvf loganalyzer-4.1.12.tar.gz 
    [root@centos8 ~]#mv loganalyzer-4.1.12/src/ /var/www/html/log
    [root@centos8 ~]#touch /var/www/html/log/config.php 
    [root@centos8 ~]#chmod 666 /var/www/html/log/config.php
    #删除config.php,重新创建可以重新配置初始化
    访问http://10.0.0.150/log 实现初始化
    选择:MySQL Native, Syslog Fields, Monitorware
    #注意数据库名,特别是表明默认的大小写不对,应该是:SystemEvents
    
    #安全加强
    [root@centos8 ~]#chmod 644 /var/www/html/log/config.php
  • 相关阅读:
    iOS客户端的gzip解压
    如何将应用打包成.ipa文件(越狱)
    手势UIGestureRecognizer
    ASIHTTPRequest下载数据
    ASIHTTPRequest下载示例(支持断点续传)
    ios与android设备即时语音互通的录音格式
    删除沙盒中文件夹下所有文件
    svn,静态库无法添加
    iOS 3D UI——CALayer的transform扩展解析
    自定义Tabbar实现push动画隐藏效果
  • 原文地址:https://www.cnblogs.com/tanll/p/15564195.html
Copyright © 2020-2023  润新知