LAMP架构
Posted 小卓卓的世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.* to blog@10.0.0.%;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all on forum.* to forum@10.0.0.%;
Query OK, 0 rows affected (0.000 sec)
 
### 编译安装 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 start
cat > /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: 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
修改配置 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.sql 10.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.cfg loganalyzer-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
基于 web 页面初始化
访问http://10.0.0.28/log 实现初始化
选择:MySQL Native, Syslog Fields, Monitorware
如果没有安装php-gd包,会报错误
安全加强
[root@xiaozz ~]# chmod 644 /var/www/html/log/config.php
以上是关于LAMP架构的主要内容,如果未能解决你的问题,请参考以下文章