Apache是世界上使用最多的web服务器软件一种,它可以运行在几乎所有广泛使用的计算机平台上,并且可以快速、可靠的通过API扩充。
Apache全称为ApacheHTTPServer
是由Apache软件基金会开发的一款开源的网页服务器。主要介绍Apache监控与调优方面的内容,如果工作中我们的项目使用的是Apache的web服务器,那么我们就必须对其连接池、MPM等进行监控与调优。
主要介绍以下几部分内容:
Apache目录结构。
Apache配置文件。
Apache监控。
Apache调优。
MPM调优。
Apache日志文件分析。
Apache目录结构
Apache安装好后,主要包含的目录文件有:
bin、build、cgi-bin、conf、error
htdocs、icons、include、lib、logs
man、manual和modules。
这些目录文件主要的作用如下:
1)bin目录
主要是存放一些命令文件
最常用的是apache启动
关闭和重启的命令文件apachectl。
启动apache服务器命令
./apachectlstart
停止apache服务器命令
./apachectlstop
重启apache服务器命令
./apachectlrestart
2)build目录
主要是存放apache编译与构建时的相关文件。
3)cgi-bin目录
公共网管接口方式存放的目录。
4)conf目录
相关配置文件所在目录,最常用的配置文件为httpd.conf。
5)error目录
存放一些错误信息,这些错误信息是当请求发生错误时返回给客户端的。
6)htdocs目录
发布网站所在的工作目录。
7)icons目录
icons目录用于存放相关的图标文件。
8)include目录
include目录主要存放着一些封装好的头文件。
9)logs目录
logs目录主要是存放日志文件,包括一些常见的日志文件和一些错误日志文件。
10)modules目录
modules目录主要是存放着apache调用模块的源文件。
Apache配置文件
apache配置文件为httpd.conf,所在位置为conf目录下。任何指令都可以放置在这个配置文件中,但这些修改的指令都只能是在httpd启动或重新启动时才能被识别。
httpd配置文件每行包含一个指令。反斜杠“”可以用作一行的最后一个字符,以指示该指令继续到下一行。反斜杠和行尾之间不得有其他字符或空格。指令的参数由空格分隔。如果参数包含空格,则必须将该参数用引号引起来。
配置文件中的指令不区分大小写,但是指令的参数通常区分大小写。以井号“#”开头的行被视为注释,并被忽略。注释不能与配置指令放在同一行。在指令之前会出现空白,因此为了清楚起见,您可以缩进指令。空行也将被忽略。
可以使用语法在配置文件行中使用Shell环境变量的值${ENVVAR}。如果“ENVVAR”是有效环境变量的名称,则将该变量的值替换为配置文件行中的该位置,然后继续进行处理,就像直接在配置文件中找到该文本一样。(如果找不到ENVVAR变量,则字符“${ENVVAR}”将保持不变,以供配置文件处理中的后续阶段使用。)
在环境变量替换之后,配置文件中一行的最大长度为8192个字符,该变量是在替换环境变量,连接任何连续的行并删除开头和结尾的空白之后。
您可以使用apachectlconfigtest或-t命令行选项在不启动服务器的情况下检查配置文件中的语法错误。
配置文件中常见配置项说明: 1.ServerRoot http-www的Home目录用来存放配置文件、错误文件、记录文件。 2.Listen 用于设置服务器IP地址和端口号,apache默认端口号是80。 3.User 启动apache的相关用户 4.Group: 启动apache相关组 5.PidFile: 表示启动程序进程所在的位置 6.Timeout: 表示连接超时,如果客户端与服务器已连接上,在超时范围内还未发送请求给服务器,那么服务器会自动与客户端断开。 7.KeepAlive: 表示是否保持长连接,即在一个TCP连接下可以发送多个HTTP请求。 语法: KeepAliveOn|Off 默认值: KeepAliveOn HTTP1.0的Keep-Alive扩展功能和HTTP1.1的持久连接功能提供了长期存在的HTTP会话,该会话允许通过同一TCP连接发送多个请求。 8.KeepAliveTimeout: 表示当开启长连接时,请求与请求之间的时间隔。 KeepAliveTimeoutseconds KeepAliveTimeout5 设置KeepAliveTimeout为较高的值可能会导致服务器负载过重的性能问题。超时时间越长,等待与空闲客户端进行连接的服务器进程将被占用的时间越长。 9.MPM相关参数 MPM是多通路处理模块,主要的参数包括:StartServers、MaxClientsServerlimit、MinSpareThreadsMaxSpareThreads、ThreadsPerChildMaxRequestsPerChild。这些参数具体的使用在后面讲MPM调优时会详细来介绍。 10.ServerName 表示服务器的主机名 11.DocumentRoot 表示发布的应用程序所在的位置 DocumentRoot语法: DocumentRootdirectory-path 默认值: DocumentRoot/usr/local/apache/htdocs 该指令设置httpd将从该路径下获取。例: DocumentRoot/usr/web 如果访问http://www.my.host.com/index.html将指向/usr/web/index.html。如果目录路径不是绝对路径,则假定它是相对于的ServerRoot。 12.Directory指令 <Directory>和</Directory>用于封装一组指令使之仅对某个目录及其子目录生效。使用<Directory>…</Directory>设置指定目录的访问权限,其中可包含:Options、AllowOverride、Order、Allow、Deny。 其语法如下: <Directorydirectory-path> ... </Directory> Directory-path可以是目录的完整路径,也可以是使用UnixShell样式匹配的通配符字符串。在通配符字符串中,?匹配任何单个字符,并且*匹配任何字符序列,也可以使用[]约束字符的范围。所有通配符都不匹配'/'字符因此<Directory/*/public_html>将不匹配/home/user/public_html但<Directory/home/*/public_html>将匹配。例: <Directory/usr/local/httpd/htdocs> OptionsIndexesFollowSymLinks </Directory> 除了可以使用通配符匹配路径外,路径也可以支持正则表达式的形式。例如: <Directory~"^/www/[0-9]{3}"> 表示将匹配/www/由三个数字组成的目录。 如果多个(非正则表达式)<Directory>节与包含文档的目录(或其父目录之一)匹配,则将以最短匹配的顺序应用这些指令,并在这些文件中插入.htaccess文件中的指令。例如, <Directory/> AllowOverrideNone </Directory> <Directory/home> AllowOverrideFileInfo </Directory> AllowOverrideNone:表示(禁用.htaccess文件)。 AllowOverrideFileInfo:表示(用于directory/home)。 以访问文档/home/web/dir/doc.html为例,其访问顺序如下: 应用所有FileInfo的指令/home/.htaccess、/home/web/.htaccess、/home/web/dir/.htaccess并按此顺序访问。 13.DirectoryMatch指令 包含适用于与正则表达式及其子目录匹配的文件系统目录的指令。 语法: <DirectoryMatchregex> ... </DirectoryMatch> 这些指令将仅适用于命名目录和该目录的子目录(以及其中的文件)<Directory>。但是,它以正则表达式作为参数。例如: <DirectoryMatch"^/www/(.+/)?[0-9]{3}"> 将匹配/www/由三个数字组成的目录。 14.IfModule指令 语法: <IfModule[!]module-file|module-identifier>...</IfModule> 表示检测特定的模块是否存在,如果存在则执行里面的指令,如果不存在则忽略开始标记到结束标记之间所有的内容。 15.Location指令 语法: <LocationURL-path|URL>...</Location> 该指令是将其附随的参数传递到URL中,location指令后面的参数就是直接应用于URL请求中的,如果需求生效,那么URL路径部分应该满足以下任一条件: 指定的位置与URL的路径部分完全匹配。 以反斜杠结尾的指定位置是URL路径部分的前缀。 指定的位置(带有尾部的斜杠)是URL路径部分的前缀。 如/private1,/private1/和/private1/file.txt将这些目录附随到URL地址中。 该URL可以使用通配符。在通配符字符串中,?匹配任何单个字符,并且*匹配任何字符序列。这两个通配符都不匹配URL路径中的/。 除~字符外,还可以使用正则表达式。例如: <Location~"/(extra|special)/data"> 16.Options指令 options用于配置特定目录中可用的功能 语法: Options[+|-]option[[+|-]option]... 该Options指令用于控制访问服务器目录的权限。选项可以设置为None,在这种情况下,不会启用任何附加功能,或者以下一项或多项: All 表示除MultiViews之外的所有特性,该选项为默认值。 ExecCGI 允许使用mod_cgi模块执行CGI脚本。 FollowSymLinks 服务器允许在此目录中使用符号连接,如果需求将目录链接到其它的路径下就需要使用到符号链接。如果该配置选项位于<Location>配置段中,将会被忽略。即使服务器遵循符号链接,它也不会更改<Directory>指令中的路径名。在FollowSymLinksSymLinksIfOwnerMatchOptions只在<Directory>段中进行工作或针对于.htaccess文件有效。 Indexes 表示匹配的index文件类型,如果输入的网址中有这个index文件,那么就会显示出这个文件内容,如果没有index文件,则会返回由mod_autoindex模块生成的一个格式化的目录列表,并列出该目录下的所有文件。
MultiViews 允许使用mod_negotiation模块提供内容协商的"多重视图"。简而言之,如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件。在HTTP协议中,内容协商是这样一种机制,通过为同一URI指向的资源提供不同的展现形式,可以使用户代理选择与用户需求相适应的最佳匹配(例如,文档使用的自然语言,图片的格式,或者内容编码形式)。 一份特定的文件称为一项资源。当客户端获取资源的时候,会使用其对应的URL发送请求。服务器通过这个URL来选择它指向的资源的某一变体——每一个变体称为一种展现形式——然后将这个选定的展现形式返回给客户端。整个资源,连同它的各种展现形式,共享一个特定的URL。当一项资源被访问的时候,特定展现形式的选取是通过内容协商机制来决定的,并且客户端和服务器端之间存在多种协商方式。
SymLinksIfOwnerMatch 服务器仅在符号连接与目标文件或目录的所有者具有相同的用户ID时才使用它。简而言之,只有当符号连接和符号连接指向的目标文件或目录的所有者是同一用户时,才会使用符号连接。如果该配置选项位于<Location>配置段中,将会被忽略。
Apache允许在一个目录配置中设置多个Options指令。如果一个目录中设置了多个Options指令,那么特性最多的Options指令会被使用。
其它的都会被忽略,默认情况下各个Options指令之间并不会合并,但可能通过"+"或"-"。"+"表示将该选项添加到选中来,"-"选择在选项中删除该选项。 注意:混合使用前面带"+"/"-"和前面不带"+"/"-"的同一可选项,可能会导致出现意料之外的结果。