分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

apache基本部署

发布时间:2023-09-06 02:07责任编辑:彭小芳关键词:apache

工作模式1、Prefork MPM

Prefork MPM实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。这是一个成熟稳定,可以兼容新老模块,也不需要担心线程安全问题,但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景。(如图-1)


2、Worker MPM
和prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻量,因为线程是通过共享父进程的内存空间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些;另外,如果一个线程出现了问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放(该问题在prefork模式下也存在)。(如图-2)


3、Event MPM
这是Apache的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive长连接的时候占用线程资源被浪费的问题,在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。





查看apache工作模式:
# httpd -V

切换工作模式:
???rpm安装的apache
???????#vim ?/etc/sysconfig/httpd
???????#vim /etc/httpd/conf.modules.d/00-mpm.conf
????????修改不同的加载模块
????????
???编译安装的apache
????????./configure ??--prefix="" ?????
???????????编译安装需要指定
???????????在configure配置编译参数的时候,可以使用 --with-mpm=prefork|worker|
??????????event 来指定编译为那一种MPM,当然也可以用编译为三种都支持:--enable-
??????????mpms-shared=all,这样在编译的时候会在modules目录下自动编译出三个
??????????MPM文件的so,然后通过修改httpd.conf配置文件更改MPM

?????注意:切换非进程模式需要关闭PHP
???
?????初始化进程数
?????最大空闲进程数
?????最小空闲进程数
?????最高并发
?????每个进程可以接受的连接的次数
?????
?????初始化进程数
?????最大空闲进程数
?????最小空闲进程数
?????每个进程内的线程数 ?????
?????最高并发
?????每个进程可以接受的连接的次数

进程模式
线程模式
event模式:
???以上两种稳定的MPM方式在非常繁忙的服务器应用下都有些不足。尽管HTTP的Keepalive方式能减少TCP连接数量和网络负载,但是 Keepalive需要和服务进程或者线程绑定,这就导致一个繁忙的服务器会耗光所有的线程。 Event MPM是解决这个问题的一种新模型,它把服务进程从连接中分离出来。在服务器处理速度很快,同时具有非常高的点击率时,可用的线程数量就是关键的资源限制,此时Event MPM方式是最有效的。一个以Worker MPM方式工作的繁忙服务器能够承受每秒好几万次的访问量(例如在大型新闻服务站点的高峰时),而Event MPM可以用来处理更高负载。值得注意的是,Event MPM不能在安全HTTP(HTTPS)访问下工作。
对于Event 模式,apache给出了以下警告:
This MPM is experimental, so it may or may not work as expected .
这种MPM目前处于试验状态,他可能不能按照预期的那样工作。

rpm安装方式默认3种模式都支持


进程模式:
???<IfModule prefork.c>
???StartServers ??????????8 ??????
???MinSpareServers ???5
???MaxSpareServers ??20 ??
???ServerLimit ?????256 ???进程上限
???MaxClients ??????256 ???最大并发
???MaxRequestsPerChild ?4000
???</IfModule>

线程模式: ???
???<IfModule worker.c>
???StartServers ???????????4
???MaxClients ?????????????300
???MinSpareThreads ????25
???MaxSpareThreads ???75
???ThreadsPerChild ??????25
???MaxRequestsPerChild ?0
???</IfModule>

event模式:
<IfModule mpm_event_module>
???StartServers ?????????????????3
???ServerLimit 16
???MinSpareThreads ?????????75
???MaxSpareThreads ????????250
???ThreadsPerChild ???????????25
???MaxRequestWorkers ?????400 ????//同MaxClients
???MaxConnectionsPerChild ??1000
</IfModule>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
timeout 15

--------------------

keepalive ?长连接(保持连接,持久连接)
开启keepalive:
???KeepAlive On ???????????//on是开启,Off是关闭
eepAliveTimeout 15 ???//两次get文件之间的时间间隔
???MaxKeepAliveRequests 100 ???//每次长连接能接受的请求最大次数

开启进程
client---server

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
keepalive ?apache配置文件内的一个选项
keepalive ?tcp/ip也有keepalive
keepalived 高可用方案

访问控制

准备测试目录:
#mkdir /var/www/html/site1
#echo site1 > /var/www/html/site1/index.html
#cat /var/www/html/site1/index.php
???<?php
???phpinfo();
????>
???
访问控制测试:
允许所有主机访问:
<Directory "/var/www/html/site1">
????AllowOverride None
????Require all granted ?????//wing测试这是默认值,不写也可
</Directory>

AllowOverride All ??????????允许子目中的 .htaccess 中的设置覆盖当前设置
AllowOverride None ??????不允许子目中的 .htaccess 中的设置覆盖当前设置

只允许一部分客户端访问:
<Directory "/var/www/html/site1">
???AllowOverride None
???Require ip 192.168.245.3 ???//可以写网段
???Require ip 127.0.0.1
</Directory>


只拒绝一部分客户端访问:
<Directory "/var/www/html/site1">
???AllowOverride None
???<RequireAll>
???????Require not ip 127.0.0.1 192.168.245.3
???????Require all granted
???</RequireAll>
</Directory>

拒绝所有客户端访问:
<Directory "/var/www/html/site1">
???AllowOverride None
???<RequireAll>
???????Require all denied
???</RequireAll>
</Directory>

wing测试apache 2.2写法依然生效:
???<Directory "/var/www/html/site1">
???????AllowOverride None
???????Order allow,deny
???????Deny from all
???</Directory>

???<Directory "/var/www/html/site1">
???????AllowOverride None
???????Order deny,allow ??//allow和deny谁写后面先看谁,跟下面deny和allow的顺序无关
???????Deny from all
???????Allow from 192.168.245.3
???</Directory>

单独控制某些页面文件是否可被某些客户端访问:
<Directory "/var/www/html/site1">
???AllowOverride None
???Require all granted
???<Files ~ "\.php$" >
???????Order allow,deny
???????Deny from all
???</Files>
</Directory>

~ 表示匹配
\.php$ ?????.php
???\ 转义字符
???$ 表示以前置字符结尾 ???
???
基于用户的访问控制:访问时需要用户名和密码
1. 创建密码文件(添加第一个账户)
# htpasswd -cm /etc/httpd/conf/httppasswd user1
-c ?创建密码文件
-m MD5方式加密

添加多个其他账户:
# htpasswd -m /etc/httpd/conf/httppasswd user2

2. 配置支持认证
修改主配置文件:
???<Directory "/var/www/html/site1">
???????AllowOverride All
???????Require all granted
???</Directory>

3.创建.htaccess文件:
???# vim /var/www/html/site1/.htaccess
???AuthName "hello kity"
???AuthType Basic
???AuthUserFile ?"/etc/httpd/conf/httppasswd"
???Require ?valid-user

apache基本部署

原文地址:https://www.cnblogs.com/chunjianghuayueye369/p/9591396.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved