LAMP架构

盛年不重来,一日难再晨,及时当勉励,岁月不待人。这篇文章主要讲述LAMP架构相关的知识,希望能为你提供帮助。
1、简述CGI与FASTCGI区别 CGI
CGI:Common Gateway Interface 公共网关接口
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: 兼职, 一次性的过河拆桥式的服务。
在WB服务器方面:fork一个新的进程进行处理。
在对数据进行处理的进程方面:读取参数,处理数据,然后就结束生命期。

FASTCGI: 专职,全周期的持续式的服务
在WB服务器方面:用tcp方式跟远程机子上的进程或本地进程建立连接。
在对数据进行处理的进程方面:要开启tcp端口,进入循环,等待数据的到来,处理数据。

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

  • 一台主机:httpd+php(fastcgi模式) 10.0.0.7
  • 一台主机:mariadb服务器 10.0.0.9 软件版本:
    [root@xiaozz data]# ls
    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.7.tar.xz
    wordpress-5.4.2-zh_CN.tar.gz
    Discuz_X3.4_SC_UTF8【20191201】.zip

    二进制安装mariadb
    [root@xiaozz data]# cat mariadb_inatall.sh #!/bin/bash mkdir /data/mysql yum -y install libaio tar xvf 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 [root@xiaozz data]#bash mariadb_install.sh

[root@xiaozz mysql]# mysql -uroot
MariaDB [(none)]> create database forum;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> create database blog;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> create user blog@10.0.0.% identified by 123456;
Query OK, 0 rows affected (0.006 sec)
MariaDB [(none)]> create user forum@10.0.0.% identified by 123456;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> grant all on blog.* toblog@10.0.0.%;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all on forum.* toforum@10.0.0.%;
Query OK, 0 rows affected (0.000 sec)
& emsp; ### 编译安装 httpd 2.4 ```bash [root@xiaozz data]# cat httpd_install.sh #!bin/bash yum install gcc pcre-devel openssl-devel expat-devel bzip2 -y tar xvf apr-1.7.0.tar.bz2 tar xvf apr-util-1.6.1.tar.bz2 tar xvf httpd-2.4.46.tar.bz2 mv apr-1.7.0 httpd-2.4.46/srclib/apr mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util cd 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 make & & make install echo PATH=/apps/httpd/bin:$PATH > /etc/profile.d/lamp.sh . /etc/profile.d/lamp.sh useradd -s /sbin/nologin -r -u 88 apache sed -i s/^user.*/user apache/ /apps/httpd/conf/httpd.conf sed -i s/^group.*/group apache/ /apps/httpd/conf/httpd.conf apachectl startcat > /usr/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 #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 EOF systemctl enable --now httpd.service


编译安装 fastcgi 方式的 php 7.4
#安装php 7.4 相关包 yum -y install gcc libxml2-devel bzip2-devel libmcrypt-devel sqlite-devel oniguruma-devel #php7.4 编译 tar xvf php-7.4.25.tar.xz cd php-7.4.25/ ./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变量 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: Jul1 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=1systemctl 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 #AddType application/x-httpd-php-source .phps ProxyRequests Off #后面加上虚拟主机 #实现第一个虚拟主机 < virtualhost *:80> servername blog.magedu.org documentroot /data/blog < directory /data/blog> require all granted < /directory> ProxyPassMatch ^/(.*\\.php)$ fcgi://127.0.0.1:9000/data/blog/$1 #实现status和ping页面 ProxyPassMatch ^/(fpm_status|ping)$ fcgi://127.0.0.1:9000/$1 CustomLog "logs/access_blog_log" common < /virtualhost> #第二个虚拟主机 < virtualhost *:80> servername forum.magedu.org 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@xiaozz data]# apachectl restart

准备wordpress和discuz! 相关文件
[root@xiaozz data]# mkdir blog forum [root@xiaozz data]# tar xvf wordpress-5.4.2-zh_CN.tar.gz [root@xiaozz data]# mv wordpress/* blog/ [root@xiaozz data]# mv Discuz_X3.4_SC_UTF8【20191201】.zip /opt [root@xiaozz data]# cd /opt [root@xiaozz opt]# unzip Discuz_X3.4_SC_UTF8【20191201】.zip [root@xiaozz opt]# mv upload/* /data/forum/ [root@xiaozz ~]# chown -R apache.apache /data/*

测试访问
vim /etc/hosts 10.0.0.7 blog.magedu.org forum.magedu.org

打开浏览器访问 http://blog.magedu.org 和http://forum.magedu.org 分别进行初始化和安装
3、通过loganalyzer展示数据库中的日志 三台主机
一台日志服务器,IP:10.0.0.17,
一台数据库服务器,IP:10.0.0.15
一台当httpd+php 服务器,并安装loganalyzer展示web图形,IP:10.0.0.18
在rsyslog服务器上安装连接mysql模块相关的程序包
[root@xiaozz ~]# yum install rsyslog-mysql [root@xiaozz ~]# rpm -ql rsyslog-mysql /usr/lib/.build-id /usr/lib/.build-id/e6 /usr/lib/.build-id/e6/aa0e40c19a2e0524d72780eee3b1698684cbe7 /usr/lib64/rsyslog/ommysql.so /usr/share/doc/rsyslog/mysql-createDB.sql [root@xiaozz ~]# cat /usr/share/doc/rsyslog/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 ); #将sql脚本复制到数据库服库上 [root@xiaozz ~]# scp /usr/share/doc/rsyslog/mysql-createDB.sql10.0.0.15:/data

在10.0.0.15准备MySQL Server
[root@xiaozz data]# yum install mariadb-server [root@xiaozz data]# systemctl enable --now mariadb [root@xiaozz data]# mysql MariaDB [(none)]> source /data/mysql-createDB.sql MariaDB [Syslog]> GRANT ALL ON Syslog.* TO rsyslog@10.0.0.% IDENTIFIED BY 123456;

配置日志服务器将日志发送至指定数据库
#配置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.18,Syslog,rsyslog,123456 [root@centos8 ~]#systemctl restart rsyslog.service

在10.0.0.18主机上安装httpd, php和相关软件包
[root@xiaozz ~]# yum -y install httpd php-fpm php-mysqlnd php-gd [root@xiaozz ~]# systemctl enable --now httpd php-fpm

安装 LogAnalyzer
[root@xiaozz ~]# ls anaconda-ks.cfgloganalyzer-4.1.10.tar.gz [root@xiaozz ~]# tar xvf loganalyzer-4.1.10.tar.gz [root@xiaozz ~]# mv loganalyzer-4.1.10/src/ /var/www/html/log [root@xiaozz ~]# touch /var/www/html/log/config.php [root@xiaozz ~]# chmod 666 /var/www/html/log/config.php

【LAMP架构】基于 web 页面初始化
访问http://10.0.0.28/log 实现初始化
选择:MySQL Native, Syslog Fields, Monitorware
如果没有安装php-gd包,会报错误
安全加强
[root@xiaozz ~]# chmod 644 /var/www/html/log/config.php


    推荐阅读