一、基本介绍

  待补充...

二、Apache默认配置文件解释

# 定义apache运行的目录,即程序所在的位置
ServerRoot "/usr/local/apache2"
# 定义Apache服务监听的端口
Listen 80
# 启动Apache时加载的模块
LoadModule php5_module modules/libphp5.so
<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>
User daemon
Group daemon
</IfModule>
</IfModule>
# 管理员邮箱的地址
ServerAdmin you@example.com
# Apache监督的ip/域名:端口号
ServerName 127.0.0.1:80
# html文件(即项目文件)存放的路径
DocumentRoot "/usr/local/apache2/htdocs"
# 对根目录的限制
<Directory />
# 禁止显示Apache目录列表
Options FollowSymLinks
# 禁止用户对目录配置文件(.htaccess)重载
AllowOverride None
# 配置allow和deny的顺序,默认只有最后一个关键字起作用
Order deny,allow
# 拒绝所有访问
Deny from all
</Directory>
<Directory "/usr/local/apache2/htdocs">
# 禁止显示htdoc下的文件列表,如果htdoc下面没有可以发达的文件,会显示静止访问根
Options FollowSymLinks
# 跟下没有index.html等页面,会显示跟下的文件名
#Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule dir_module>
# 首页文件 可以写多个
DirectoryIndex index.html index.php
</IfModule> #阻止.htaccess 和 .htpasswd等重要文件被web用户查看
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>
# 错误日志的路径
ErrorLog "logs/error_log"
# 错误日志的级别
LogLevel warn
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
# 访问日志存放路径
CustomLog "logs/access_log" common
</IfModule>
# cgi的配置
#<IfModule alias_module>
# ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
#</IfModule>
#<IfModule cgid_module>
#</IfModule>
#<Directory "/usr/local/apache2/cgi-bin">
# AllowOverride None
# Options None
# Order allow,deny
# Allow from all
#</Directory>
DefaultType text/plain
# 允许传送时使用以下几种压缩方式
<IfModule mime_module>
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

三、Apache三种工作模式

    关键词:MPM (Multi-Processing Module)多进程处理模块

Linux下,使用/usr/local/apache2/bin/httpd -V查看当前Apache的工作模式,默认的工作模式是prefork

1.Prefork MPM 多进程

从字面意思看(pre),这是一种预派生的工作模式,在Apache启动的时候就生成几个进程然后等待连接,这样就可以减少频繁创建和销毁进程的开销,每一个进程下只有一个线程。

优点:适合于没有线程安全库,需要避免线程兼容性问题的系统

缺点:每一个进程相都会消耗大量资源,不擅长处理高并发的场景。

启动apache后,查看Apache进程,一个主进程派生了5个子进程。

init(1)─┬─auditd(1126)───{auditd}(1127)
           ├─crond(1383)
           ├─httpd(1439)─┬─httpd(1784)
           │                        ├─httpd(1785)
           │                        ├─httpd(1786)
           │                        ├─httpd(1787)
           │                        └─httpd(1788)
......

2.Worker MPM 多进程+多线程

进程与线程混合,Apache通过线程俩处理请求,每个子进程拥有固定数量的线程。服务器根据请求的数量调整进程的数量。

3.Event MPM 多进程+多线程+epoll(异步非阻塞)
        Apache的keep-alive可以保持服务端与客户端的连接,如果客户端没有请求,线程就是挂在哪里等待,这就导致了线程的资源浪费。

在Event模式下,有一个专门的线程来管理keep-alive类型的线程。将请求传递给服务线程,执行完毕后,又允许它释放。这样,一个线程就能处理几个请求了,实现了异步非阻塞。

Event MPM在遇到某些不兼容的模块时,会失效,将会回退到worker模式,一个工作线程处理一个请求。

mpm配置文件解释

文件路径:/usr/local/apache2/conf/extra/httpd-mpm.conf

<IfModule !mpm_netware_module>
PidFile "logs/httpd.pid"
</IfModule> <IfModule !mpm_winnt_module>
<IfModule !mpm_netware_module>
LockFile "logs/accept.lock"
</IfModule>
</IfModule> <IfModule mpm_prefork_module>
StartServers 5 # 服务器启动时建立的子进程的数量,默认是5
MinSpareServers 5 # 空闲子进程的最小数量,默认5;如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程
MaxSpareServers 10 空闲子进程的最大数量,默认10;如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程会杀死多余的子进程。
MaxClients 150 #同时处理客户端请求的数量
MaxRequestsPerChild 0 #每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束。
</IfModule> <IfModule mpm_worker_module>
StartServers 2 # 服务器启动时建立的子进程数量,在workers模式下默认是2.
MaxClients 150 # 限定服务器同一时间内客户端最大接入的请求数量.
MinSpareThreads 25 # 空闲子进程的最小数量,默认25
MaxSpareThreads 75 # 空闲子进程的最大数量,默认75
ThreadsPerChild 25 # 每个子进程产生的线程数量,默认是25
MaxRequestsPerChild 0 # 每个子进程在其生命周期内允许最大的请求数量,如果请求总数已经达到这个数值,子进程将会结束,如果设置为0,子进程将永远不会结束,建议值:建议值:1分钟pv(访问量)/MaxClients。设置为非0的好处:1.可以防止程序中可能存在的内存泄漏无限进行下去,从而耗尽内存。2.给进程一个有限寿命,从而有助于当服务器负载减轻的时候减少活动进程的数量。
</IfModule>

# BeOS 多媒体操作系统使用的模块
<IfModule mpm_beos_module>
StartThreads 10
MaxClients 50
MaxRequestsPerThread 10000
</IfModule> # Netware网络操作系统使用的模块
<IfModule mpm_netware_module>
ThreadStackSize 65536
StartThreads 250
MinSpareThreads 25
MaxSpareThreads 250
MaxThreads 1000
MaxRequestsPerChild 0
MaxMemFree 100
</IfModule> # OS/2操作系统使用的模块
<IfModule mpm_mpmt_os2_module>
StartServers 2
MinSpareThreads 5
MaxSpareThreads 10
MaxRequestsPerChild 0
</IfModule> # Windows操作系统使用的模块
<IfModule mpm_winnt_module>
ThreadsPerChild 150
MaxRequestsPerChild 0
</IfModule>

关于MPM配置的建议值(来自百度)

#mpm_perfork模块
<IfModule mpm_prefork_module>
StartServers 5 #推荐设置:小=默认 中=20~50 大=50~100
MinSpareServers 5 #推荐设置:与StartServers保持一致
MaxSpareServers 10 #推荐设置:小=20 中=30~80 大=80~120
MaxClients 150 #推荐设置:小=500 中=500~1500 大型=1500~3000
MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~500000
(此外,还需额外设置ServerLimit参数,该参数最好与MaxClients的值保持一致。)
</IfModule> #mpm_worker模块
<IfModule mpm_worker_module>
StartServers 2 #推荐设置:小=默认 中=3~5 大=5~10
MaxClients 150 #推荐设置:小=500 中=500~1500 大型=1500~3000
MinSpareThreads 25 #推荐设置:小=默认 中=50~100 大=100~200
MaxSpareThreads 75 #推荐设置:小=默认 中=80~160 大=200~400 ThreadsPerChild 25 #推荐设置:小=默认 中=50~100 大型=100~200
MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~50000(
此外,如果MaxClients/ThreadsPerChild大于16,还需额外设置ServerLimit参数,ServerLimit必须大于等于 MaxClients/ThreadsPerChild 的值。)
</IfModule>

四、编译新的模块

apachepath/bin/apxs -c -i -a   apache_source_path/modules/mappers/mod_name.c
选项说明:
-c 执行编译操作
-i 安装操作,安装一个或多个动态共享对象到服务器的modules目录
-a 自动增加一个LoadModule行到httpd.conf文件,以激活此模块,若此行存在则启用之

五、基于不同FQDN的虚拟主机的配置

[root@localhost apache2]# tail - conf/httpd.conf
Include conf/extra/httpd-default.conf
Include conf/extra/bbs.conf
Include conf/extra/wordpress.conf [root@localhost apache2]# cat conf/extra/bbs.conf
<VirtualHost *:>
ServerAdmin root@localhost
DocumentRoot "/usr/local/apache2/htdocs/bbs"
ServerName www.gaopengbbs.com
ServerAlias www.gaopengbbs.com
ErrorLog "logs/www.bbs.com-error_log"
CustomLog "logs/www.bbs.com-access_log" common
<Directory "/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost> [root@localhost apache2]# cat conf/extra/wordpress.conf
<VirtualHost *:>
ServerAdmin root@localhost
DocumentRoot "/usr/local/apache2/htdocs/wordpress"
ServerName www.gaopengwordpress.com
ServerAlias www.gaopengwordpress.com
ErrorLog "logs/www.wordpress.com-error_log"
CustomLog "logs/www.wordpress.com-access_log" common
<Directory "/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Apache2.2学习笔记全集的更多相关文章

  1. X-Cart 学习笔记(一)了解和安装X-Cart

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 一.了解 ...

  2. PHP 开发 APP 接口 学习笔记与总结 - Redis 缓存

    Redis 可以定期将数据备份到磁盘中(持久化),同时不仅仅支持简单的key/value 类型的数据,同时还提供list,set,hash等数据结构的存储:Memcache 只是简单的key/valu ...

  3. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  4. 树莓派学习笔记(5):成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 一.家庭服务器实现的主要功能 1.流媒体播放服务:利用DLNA实现电视.手机.电脑播放其上面 ...

  5. sqli-labs学习笔记 DAY1

    DAY 1 准备工作 安装phpstudy 安装配置sqli-labs 学习笔记 SQL语句的注释:–, # +在URL经过编码后会编码为空格 SQL语句的查询语句:SELECT column_nam ...

  6. 我的Android进阶之旅------>Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  7. Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. docker容器的学习笔记

    目录 Docker入门学习笔记(一) 1. 什么是Docker? 2. Docke的目标 3. Docker通常应用场景 4. Docker的基本组成 补:Docker容器相关技术简介 安装Docke ...

  9. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

随机推荐

  1. post请求中的参数形式和form-data提交数据时取不到的问题

    @Controller页面form表单请求时不会丢数据返回json数据时需要加 注解@ResponseBody请求格式如下 @ResponseBody public Object login(Sign ...

  2. Redis这篇就够了

    Redis 简介 Redis 优势 Redis 数据类型 string hash list set Zset 小总结 基本命令 发布订阅 简介 实例 发布订阅常用命令 事务 实例 Redis 事务命令 ...

  3. day03 for循环、字符串方法、类型转换

    01 上周内容回顾 while 条件: 循环体 例: while True: print(111) print(222) print(333) 结束循环的两种方式: 1,改变条件. 2,break. ...

  4. Mysql--08 存储引擎

    目录 一.存储引擎简介 二.MySQL自带的存储引擎类型 三.真实企业案例 四.Innodb存储引擎--表空间介绍 一.存储引擎简介  1.文件系统: 1.1 操作系统组织和存取数据的一种机制. 1 ...

  5. Linux之scp命令的使用

    Linux之scp命令的使用 1. scp简介 1.1 命令功能: scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令.linux的scp命令可 ...

  6. 四 shell基本命令

    一   内置命令 hlep 命令  帮助 help test help -s printf   显示内置命令的语法格式 echo 用来显示一行文字 echo "hello world&quo ...

  7. Git命令<转载 https://www.cnblogs.com/cspku/articles/Git_cmds.html>

    查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id gi ...

  8. Codeforces 963B Destruction of a Tree 思维+dfs

    题目大意: 给出一棵树,每次只能摧毁有偶数个度的节点,摧毁该节点后所有该节点连着的边都摧毁,判断一棵树能否被摧毁,若能,按顺序输出摧毁的点,如果有多种顺序,输出一种即可 基本思路: 1)我一开始自然而 ...

  9. Hibernate入门核心配置文件和orm元数据配置文件详解

    框架是什么? 框架是用来提高开发效率的 封装了一些功能,我们需要使用这些功能时,调用即可,不用手动实现 所以框架可以理解为一个半成品的项目,只要懂得如何使用这些功能即可 Hibernate是完全面向对 ...

  10. nuget cli 打包发包

    微软官网打包说明:https://docs.microsoft.com/zh-cn/nuget/quickstart/create-and-publish-a-package-using-visual ...