apache配置文件详解

主站点的配置(基本配置)

基本配置

  • ServerRoot "/usr/local/apache" 指定apache的安装目录
  • Listen 80 apache监听的端口号
  • ServerName carey.akhack.com 网站主机名
  • ServerAdmin carey@akhack.com 管理员邮箱
  • DocumentRoot "/usr/local/apache/htdocs"主站点网页存储位置

目录访问控制

1
2
3
4
5
6
<Directory "/mnt/web/clusting">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

主要有下面的选项:

Options

配置在特定目录使用哪些特性

  • ExecCGI: 在该目录下允许执行CGI脚本.
  • FollowSymLinks: 在该目录下允许文件系统使用符号连接.
  • Indexes: 当用户访问该目录时,如果用户找不到DirectoryIndex指定的主页文件(例如index.html),则返回该目录下的文件列表给用户.
  • SymLinksIfOwnerMatch: 当使用符号连接时,只有当符号连接的文件拥有者与实际文件的拥有者相同时才可以访问.

AllowOverride

允许存在于.htaccess文件中的指令类型(.htaccess文件名是可以改变的,其文件名由AccessFileName指令决定)

  • None: 当AllowOverride被设置为None时。不搜索该目录下的.htaccess文件(可以减小服务器开销
  • All: 在.htaccess文件中可以使用所有的指令。

Order

控制在访问时AllowDeny两个访问规则哪个优先

  • Allow:允许访问的主机列表.
  • Deny:拒绝访问的主机列表.

DirectoryIndex

主页文件的设置

DirectoryIndex index.html index.htm index.php

服务器的优化

apache2主要的优势就是对多处理器的支持更好,在编译时同过使用--with-mpm选项来决定apache2的工作模式.

模块

httpd -l命令列出apache的所有模块,在httpd.conf中配置

prefork.c模块

1
2
3
4
5
6
7
<IfModule prefork.c>
StartServers 5 //启动进程数
MinSpareServers 5 //最小空闲进程数
MaxSpareServers 10 //最大空闲进程数
MaxClients 500 //最大并发连接数
MaxRequestsPerCHild 1000 //每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000
</IfModule>

在该工作模式下,服务器启动后起动5个httpd进程(加父进程共6个,通过ps -ax|grep httpd命令可以看到)。当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers。该模式是为了兼容一些旧版本的程序。

worker.c模块

1
2
3
4
5
6
7
8
<IfModule worker.c>
StartServers 2 //启动apache时启动的httpd进程个数。
MaxClients 150 //最大并发连接数。
MinSpareThreads 25 //服务器保持的最小空闲线程数。
MaxSpareThreads 75 //服务器保持的最大空闲线程数。
ThreadsPerChild 25 //每个子进程的产生的线程数。
MaxRequestsPerChild 0 //每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。
</IfModule>

该模式是由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。服务器在启动时启动两个进程,每个进程产生的线程数是固定的(ThreadsPerChild决定),因此启动时有50个线程。当50个线程不够用时,服务器自动fork一个进程,再产生25个线程

perchild.c模块

1
2
3
4
5
6
7
8
<IfModule perchild.c>
NumServers 5 //服务器启动时启动的子进程数
StartThreads 5 //每个子进程启动时启动的线程数
MinSpareThreads 5 //内存中的最小空闲线程数
MaxSpareThreads 10 //最大空闲线程数
MaxThreadsPerChild 2000 //每个线程最多被请求多少次后退出。0不受限制。
MaxRequestsPerChild 10000 //每个子进程服务多少次后被重新fork。0表示不受限制。
</IfModule>

该模式下,子进程的数量是固定的,线程数不受限制。当客户端连接到服务器时,又空闲的线程提供服务。 如果空闲线程数不够,子进程自动产生线程来为新的连接服务。该模式用于多站点服务器。

HTTP返头回信息配置

配置文件 conf/extra/httpd-default.conf

apache版本信息

ServerTokens Prod 该参数设置http头部返回的apache版本信息,可用的值和含义如下:

  • Prod:仅软件名称,例如:apache
  • Major:包括主版本号,例如:apache/2
  • Minor:包括次版本号,例如:apache/2.0
  • Min:仅apache的完整版本号,例如:apache/2.0.54
  • OS:包括操作系统类型,例如:apache/2.0.54(Unix)
  • Full:包括apache支持的模块及模块版本号,例如:Apache/2.0.54 (Unix) mod_ssl/2.0.54 OpenSSL/0.9.7g

错误页面版本信息

ServerSignature Off 在页面产生错误时是否出现服务器版本信息。推荐设置为Off

持久性连接设置

  • KeepAlive On 开启持久性连接功能。即当客户端连接到服务器,下载完数据后仍然保持连接状态。
  • MaxKeepAliveRequests 100 一个连接服务的最多请求次数。
  • KeepAliveTimeout 30 gg持续连接多长时间,该连接没有再请求数据,则断开该连接。缺省为15秒

别名设置

对于不在DocumentRoot指定的目录内的页面,既可以使用符号连接,也可以使用别名.
别名设置:

1
2
3
4
5
6
7
8
Alias /download/ "/var/www/download/" //访问时可以输入:http://carey.akhack.com/download/
<Directory "/var/www/download"> //对该目录进行访问控制设置
Options Indexes MultiViews
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>

CGI设置

访问时可以:http://carey.akhack.com/cgi-bin/,但是该目录下的CGI脚本文件要加可执行权限

1
2
3
4
5
6
7
8
ScriptAlias /cgi-bin/ "/mnt/software/apache2/cgi-bin/"
<Directory "/usr/local/apache2/cgi-bin"> //设置目录属性
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

个人主页的设置 (public_html)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
UserDir public_html
//用户的主页存储在用户主目录下的public_html目录下URL
//http://carey.akhack.com/~carey/file.html
//将读取 /home/carey/public_html/file.html 文件
chmod 755 /home/carey
//使其它用户能够读取该文件。
UserDir /var/html
//URL http://carey.akhack.com/~carey/file.html
// 将读取 /var/html/carey/file.html
UserDir /var/www/*/docs
//URL http://carey.akhakc.com/~carey/file.html
//将读取 /var/www/carey/docs/file.html

日志的设置

错误日志的设置

1
2
ErrorLog logs/error_log //日志的保存位置
LogLevel warn //日志的级别

访问日志设置

日志的缺省格式:

1
2
3
4
5
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common #common为日志格式名称
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log common

格式中的各个参数如下:

1
2
3
4
5
6
7
8
9
%h --客户端的ip地址或主机名
%l --The 这是由客户端 identd 判断的RFC 1413身份,输出中的符号 "-" 表示此处信息无效。
%u --由HTTP认证系统得到的访问该网页的客户名。有认证时才有效,输出中的符号 "-" 表示此处信息无效。
%t --服务器完成对请求的处理时的时间。
"%r" --引号中是客户发出的包含了许多有用信息的请求内容。
%>s --这个是服务器返回给客户端的状态码。
%b --最后这项是返回给客户端的不包括响应头的字节数。
"%{Referer}i" --此项指明了该请求是从被哪个网页提交过来的。
"%{User-Agent}i" --此项是客户浏览器提供的浏览器识别信息。

用户认证的配置

httpd.conf用户认证配置

1
2
3
4
5
6
7
AccessFileName .htaccess
.........
Alias /download/ "/var/www/download/"
<Directory "/var/www/download">
Options Indexes
AllowOverride AuthConfig
</Directory>

创建密码文件

/usr/local/apache2/bin/htpasswd -c /var/httpuser/passwords carey

配置允许访问

1
2
3
4
5
6
7
vi /var/www/download/.htaccess:
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /var/httpuser/passwords
Require user carey
#Require valid-user #all valid user

虚拟主机的配置

基于IP地址的虚拟主机配置

1
2
3
4
5
6
7
8
9
10
11
Listen 80
<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example1.com
</VirtualHost>
<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

基于IP和多端口的虚拟主机配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080
<VirtualHost 172.20.30.40:80>
DocumentRoot /www/example1-80
ServerName www.example1.com
</VirtualHost>
<VirtualHost 172.20.30.40:8080>
DocumentRoot /www/example1-8080
ServerName www.example1.com
</VirtualHost>
<VirtualHost 172.20.30.50:80>
DocumentRoot /www/example2-80
ServerName www.example1.org
</VirtualHost>
<VirtualHost 172.20.30.50:8080>
DocumentRoot /www/example2-8080
ServerName www.example2.org
</VirtualHost>

单个IP地址的服务器上基于域名的虚拟主机配置

1
2
3
4
5
6
7
8
9
10
11
12
13
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example1.com
ServerAlias example1.com. *.example1.com
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example2.org
</VirtualHost>

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器