前言
-
httpd
- 20世纪90年代初, 国家超级计算机应用中心NCSA开发
- 1995年开源社区发布apache(a patchy server)
- ASF: apache software foundation
- FSF: Free Software Foundation 特性:
- 高度模块化: core + modules
- DSO: Dynamic Shared Object 动态加/卸载
- MPM: multi-processing module多路处理模块
MPM工作模式
-
prefork:多进程I/O模型,每个进程响应一个请求,默认模型
- 一个主进程:生成和回收n个子进程, 创建套接字,不响应请求多个子进程:工作work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求,最大不超过1024个
-
worker:复用的多进程I/O模型,多进程多线程, IIS使用此模型
- 一个主进程: 生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求: m*n
-
event:事件驱动模型(worker模型的变种)
- 一个主进程:生成m个子进程,每个进程直接响应n个请求,并发响应请求: m*n,有专门的线程来管理这些keep-alive类型的线程,当有真实请求时, 将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力 httpd-2.2: event 测试版,centos6默认httpd-2.4: event 稳定版, centos7默认
prefork模型性能还是可以的,一般应用场景足够,而且后面搭建LAMP时要使用这个模型,其他的不是太兼容。
Apache主要文件目录(centos6)
-
配置文件:
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/*.conf 服务脚本: /etc/rc.d/init.d/httpd
- 脚本配置文件: /etc/sysconfig/httpd #可以设置httpd工作模式 站点网页文档根目录(默认目录,可以修改):
- /var/www/html 模块文件路径:
- /etc/httpd/modules
- /usr/lib64/httpd/modules 主程序文件:
- /usr/sbin/httpd
- /usr/sbin/httpd.worker
- /usr/sbin/httpd.event 主进程文件:
- /etc/httpd/run/httpd.pid 日志文件目录:
- /var/log/httpd/access_log: 访问日志
- /var/log/httpd/error_log:错误日志 帮助文档包:
- httpd-manual,可以使用yum安装,在本地浏览器查看
Apache配置文件(centos6)
-
主配置文件/etc/httpd/conf/httpd.conf
配置格式: directive value
- directive: 不区分字符大小写
- value: 为路径时,是否区分大小写,取决于文件系统
显示服务器版本信息
为了安全起见,建议使用: ServerTokens Prod,默认是 ServerTokens OS,如果注释会打印全部服务器信息修改监听的IP和端口
Listen [IP:]PORT
(1) 省略IP表示为0.0.0.0;
(2) Listen指令至少一个,可重复出现多次
Listen 80 #监听本机所有IP的80端口
Listen 8080
(3) 可以监听特定IP的端口,例如:192.168.6.6:80持久连接
Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接
断开条件:
数量限制: 100
时间限制:以秒为单位, httpd-2.4 支持毫秒级
副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应
折衷:使用较短的持久连接时间
KeepAlive On|Off #
KeepAliveTimeout 15
MaxKeepAliveRequests 100
- prefrok 默认配置
<IfModule prefork.c>
StartServers 8 #httpd服务开始时启动8个服务进程
MinSpareServers 5 #提供服务期间保留5个空闲进程,如果数量不够会再开启相应进程
MaxSpareServers 20 #最大空闲进程20个
ServerLimit 256 最多进程数,最大20000
MaxClients 256 最大并发
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放(为0时永远不释放)
</IfModule>
- DSO: Dynamic Shared Object(加载动态模块配置)
模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)
(1) 配置指定实现模块加载格式:LoadModule <mod_name> <mod_path>
示例:
LoadModule auth_basic_module modules/mod_auth_basic.so
(2) 写到独立配置文件/etc/httpd/conf.d/name.conf里,name随便起
[root@centos6 ~]# vi /etc/httpd/conf.d/mod_dnssd.conf
LoadModule dnssd_module modules/mod_dnssd.so
- 站点访问控制常见机制
可基于两种机制指明对哪些资源进行何种访问控制
文件系统路径:
#如果要匹配正则表达式可以加上~,要么直接写路径(从DocumentRoot开始),路径里可以使用通配符
<Directory ~ "PATTERN"> 或 <Directory "/path">
...
</Directory>
<Files ~ "PATTERN">
...
</Files>
<FilesMatch "PATTERN"> #后面直接加扩展正则表达式
...
</FilesMatch>
URL路径:
#URL里面可以使用通配符,如果要用正则表达式直接加 ~
<Location URL-path|URL> 或 <Location ~ "PATTERN">
...
</Location>
<LocationMatch "PATTERN">
...
</LocationMatch>
<Directory>
中“基于源地址”实现访问控制
(1) Options:后跟1个或多个以空白字符分隔的选项列表
在选项前的+, - 表示增加或删除指定选项
常见选项:
Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户
FollowSymLinks:允许访问符号链接文件所指向的源文件
None:全部禁用
All: 全部允许
示例:
<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
<Directory /web/docs/spec>
Options FollowSymLinks
</Directory>
(2) AllowOverride
与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令,没写默认为none
只对<directory>
语句有效
AllowOverride All: 所有指令都有效
AllowOverride None: .htaccess 文件无效
AllowOverride AuthConfig Indexes 除了AuthConfig和Indexes的其它指令都无法覆盖
(3) order和allow、 deny
order:定义生效次序;写在后面的表示默认访问权限,没有定义的按照默认权限生效
Order allow,deny
Order deny,allow
Allow from, Deny from
示例1:
<Files "*.txt">
order deny,allow
deny from 172.16.100.100
allow from 172.16 #允许172.16网段或者写成172.16.0.0或者172.16.0.0/16都行
</Files>
#allow和deny规则冲突按照优先级高的来,写在后面的优先级高,结果允许172.16.100.100访问
示例2:
<Files "*.txt">
order allow,deny
deny from 172.16.100.100
allow from 172.16
</Files>
# 172.16网段除了100.100其他都允许
日志设定
(1) 日志类型:
访问日志
错误日志
(2) 错误日志:
ErrorLog logs/error_log
LogLevel warn
loglevel 可选值:
debug,info,notice,warn,error,crit,alert,emerg
(3) 访问日志:
定义日志格式: LogFormat format strings
LogFormat “%h %l %u %t \”%r\” %>s %b\”%{Referer}i\” \”%{User-Agent}i\”” combined
(4) 使用日志格式:
CustomLog logs/access_log combined设定默认字符集
AddDefaultCharset UTF-8
中文字符集: GBK, GB2312, GB18030定义路径别名
格式: Alias /URL/ “/PATH/”
示例:
alias /test/ /root/mytest/
#当访问http://192.168.6.6/test会显示/root/mytest目录下的内容,当然得设置对这个目录的Indexes权限,也可以通过/test目录访问/root/mytest下的文件