第15周作业 http和lamp
1、写出 MPM multi-processing module 工作模式原理以及区别
回答:工作模式共有三种prefork ,worker和event。
prefork模式:非线程、预派生的服务器模型。此模式在apache进程启动之前就已经提前开启一些子进程(子进程数量可以通过httpd.conf配置文件提前进行设置),每个子进程只有一个线程,每个线程只能处理一个进程,不适合处理高并发的场景。
<ifmodule mpm_prefork_module>
StartServer 5 #默认启动的子进程数量
MinSpareServer 10 #最少空闲进程个数
MaxspareServer 15 #最多空闲进程个数
MaxRequestWorkers 290 #同一时间内最大的请求数量
MaxConnectionsPerchild 90 #一个子进程可接受的最大请求数量,如果此进程接受请求达到此值时,将会结束此子进程。
</ifmodule>
worker:采用了多进程和多线程的混合模式,也同样会先预派生一些子进程,然后每个子进程创建一些线程,每个请求过来会被分配到一个线程来服务。内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。
event:此模式和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有其他请求时,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。
<ifmodule mpm_event_module>
StartServer 5 #默认启动的子进程数量
serverlimit 6
MinSpareThreads 10 #最少空闲进程个数
MaxspareThreads 15 #最多空闲进程个数
ThreadsPerChild 30 #每个子进程开启的线程数量
MaxRequestWorkers 290 #同一时间内最大的请求数量
MaxConnectionsPerChild 1000 #一个子进程可接受的最大请求数量,如果此进程接受请求达到此值时,将会结束此子进程。
</ifmodule>
2、编译安装httpd 2.4
vim install_httpd.sh
#!/bin/bash #******************************************************************** #Author: liuhuiran #QQ: 112182**** #Date: 2020-09-09 #FileName: install_http.sh #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** Apr=apr-1.7.0 Apru=apr-util-1.6.1 Httpd=httpd-2.4.46 #安装依赖包 yum -y install wget bzip2 gcc make pcre-devel openssl-devel expat-deve &> /dev/null #下载源代码并解压缩 wget https://downloads.apache.org//apr/apr-1.7.0.tar.bz2 wget https://downloads.apache.org//apr/apr-util-1.6.1.tar.bz2 wget https://downloads.apache.org//httpd/httpd-2.4.46.tar.bz2 tar xf $Apr.tar.bz2 tar xf $Apru.tar.bz2 tar xf $Httpd.tar.bz2 #编译安装apr cd $Apr ./configure --prefix=/app/apr make && make install #编译安装apr-util cd ../$Apru ./configure --prefix=/app/apr-util --with-apr=/app/apr/ make && make install #编译安装httpd cd ../$http ./configure --prefix=/app/httpd --enable-so --enable-ssl --enable-ssl --with-pcre --with-apr=/app/apr/ --with-apr-util=/app/apr-util/ --enable-mpms-shared=all --with-mpm=prefork make && make install #修改环境变量 echo 'PATH=/app/httpd/bin:$PATH' > /etc/profile.d/httpd.sh . /etc/profile.d/httpd.sh echo "It works!" > /app/httpd/htdocs/index.html #开启服务 systemctl start httpd #开启服务 systemctl start httpd

3、编写一个一键部署 LAMP 架构之 wordpress 脚本
#!/bin/bash # #******************************************************************** #Author: liuhuiran #QQ: 112182**** #Date: 2020-09-11 #FileName: lamp_wordpress.sh #Description: The test script #Copyright (C): 2020 All rights reserved #******************************************************************** # 下载相关包 yum -y install wget httpd php php-json php-mysqlnd mariadb-server # 修改httpd的mpm工作模型为prefork sed -Ei 's/LoadModule mpm_event_module.*/#&/' /etc/httpd/conf.modules.d/00-mpm.conf sed -Ei 's/#(LoadModule mpm_prefork_module.*)/\1/' /etc/httpd/conf.modules.d/00-mpm.conf # 开启相应的服务并设置为开机启动 systemctl enable --now httpd mariadb # 下载wordpress安装包,并将解压缩的目录文件移动到html目录下,修改文件的属性 wget https://cn.wordpress.org/latest-zh_CN.tar.gz tar xf /latest-zh_CN.tar.gz mv wordpress /var/www/html/wordpress chown -R apache.apache /var/www/html/wordpress # 创建对应的数据库和用户 echo 'create database wordpress;' | mysql echo "grant all on wordpress.* to wpuser@'localhost' identified by '123456';" | mysql

浙公网安备 33010602011771号