Apache配置文件详解

来源:互联网 发布:java的jdk怎么安装 编辑:程序博客网 时间:2024/06/05 01:20

前言

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 15MaxKeepAliveRequests 100
  • prefrok 默认配置
<IfModule prefork.c>StartServers 8 #httpd服务开始时启动8个服务进程MinSpareServers 5 #提供服务期间保留5个空闲进程,如果数量不够会再开启相应进程MaxSpareServers 20 #最大空闲进程20个ServerLimit 256 最多进程数,最大20000MaxClients 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.confLoadModule 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,allowdeny from 172.16.100.100allow 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,denydeny from 172.16.100.100allow 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下的文件