apache服务配置介绍及访问日志设置
服务器的工作模式 (MPM: Multi-Processing Modules)
apache2主要的优势就是对多处理器的支持更好,在编译时同过使用--with-mpm=NAME选项来决定apache2的工作模式。可以通过httpd -l命令列出apache的所有模块,就可以知道其工作方式:
prefork:如果httpd -l列出prefork.c,则需要对下面的段进行配置:prefork为默认缺省设置,即不使用参数--with-mpm指定时的默认模式。
StartServers 5 #启动apache时启动的httpd进程个数。
MinSpareServers 5 #服务器保持的最小空闲进程数。
MaxSpareServers 10 #服务器保持的最大空闲进程数。
MaxClients 150 #最大并发连接数。
MaxRequestsPerChild 1000 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。
在该工作模式下,服务器启动后起动5个httpd进程(加父进程共6个)。当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers。该模式是为了兼容一些旧版本的程序。
worker:如果httpd -l列出worker.c,则需要对下面的段进行配置:
StartServers 2 #启动apache时启动的httpd进程个数。
MaxClients 150 #最大并发连接数。
MinSpareThreads 25 #服务器保持的最小空闲线程数。
MaxSpareThreads 75 #服务器保持的最大空闲线程数。
ThreadsPerChild 25 #每个子进程的产生的线程数。
MaxRequestsPerChild 0 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。
该模式是由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。服务器在启动时启动两个进程,每个进程产生的线程数是固定的(ThreadsPerChild决定),因此启动时有50个线程。当50个线程不够用时,服务器自动fork一个进程,再产生25个线程。
perchild:如果httpd -l列出perchild.c,则需要对下面的段进行配置:
NumServers 5 #服务器启动时启动的子进程数
StartThreads 5 #每个子进程启动时启动的线程数
MinSpareThreads 5 #内存中的最小空闲线程数
MaxSpareThreads 10 #最大空闲线程数
MaxThreadsPerChild 2000 #每个线程最多被请求多少次后退出。0不受限制。
MaxRequestsPerChild 10000 #每个子进程服务多少次后被重新fork。0表示不受限制。
该模式下,子进程的数量是固定的,线程数不受限制。当客户端连接到服务器时,有空闲的线程提供服务。 如果空闲线程数不够,子进程自动产生线程来为新的连接服务。该模式用于多站点服务器。
apache的常见配置信息:
NameVirtualHost *:80:在配置文件中加入这句话可以配置多个网站
ServerRoot "/usr/local/apache" :Apache的安装目录
ServerName localhost :服务名称,可以填主机名
Listen 80 :服务监听端口,默认80
LoadModule :服务启动需要加载的模块
User daemon :apache进程执行者
Group deamon :执行者的属组
ServerAdmin [email protected] :管理员的邮箱地址
DocumentRoot "/usr/local/apache/htdocs" :网站根目录
ErrorLog "logs/error_log" :Apache运行产生的错误日志文件
LogLevel warn :指定ErrorLog会记录的错误的级别
DirectoryIndex index.php index.html :网站目录索引文件
HTTP返头回信息配置:
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 #持续连接多长时间,该连接没有再请求数据,则断开该连接。缺省为15秒。
别名设置
对于不在DocumentRoot指定的目录内的页面,既可以使用符号连接,也可以使用别名。别名的设置如下:
Alias /download/ "/var/www/download/" #访问时可以输入:http://www.domain.com/download/
Options Indexes MultiViews
AllowOverride AuthConfig
Order allow,deny
Allow from all
个人主页的设置 (public_html)
UserDir public_html :主机通过域名访问的文件的相对根目录的路径。
访问日志设置
日志的缺省格式有如下几种:
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog logs/access_log common
LogFormat :参数定义一个日志格式,前面是日志的格式,最后是该定义的日志格式的名字。
CustomLog :定义访问日志的保存文件路径及使用的格式名
格式中的参数如下:
%{X-Forwarded-For}i :使用代理的真实IP
"%{Referer}i" :此项指明了该请求是从被哪个网页提交过来的。
"%{User-Agent}i" :此项是客户浏览器提供的浏览器识别信息。
%% :百分号(Apache2.0.44或更高的版本)
%a :客户端IP地址
%A :本机IP地址
%B :除HTTP头以外传送的字节数
%b :除HTTP头以外传送的字节数,当没有字节传送时显示‘-‘而不是0。
%D :服务器处理本请求所用时间,以微为单位。
%f :文件名
%h :客户端的主机名或ip地址
%H :请求使用的协议
%l :远端登录名(由identd而来,如果支持的话),除非IdentityCheck设为"On",否则将得到一个"-"。
%m :请求的方法
%p :服务器服务于该请求的标准端口。
%P :为本请求提供服务的子进程的PID。
%q :查询字符串(若存在则由一个"?"引导,否则返回空串)
%r :请求的第一行
"%r" 引号中是客户发出的包含了许多有用信息的请求内容。
%s :状态。对于内部重定向的请求,这个状态指的是原始请求的状态,
%>s 则指的是最后请求的状态,即服务器返回给客户端的状态码。
%t :服务器完成对请求的处理时的时间,用普通日志时间格式(标准英语格式)
%{format}t :时间,用strftime(3)指定的格式表示的时间。(默认情况下按本地化格式)
%T :处理完请求所花时间,以秒为单位。
%u :远程用户名(根据验证信息而来;如果返回status(%s)为401,可能是假的)
%U :请求的URL路径,不包含查询字符串。
%v :对该请求提供服务的标准ServerName。
%V :根据UseCanonicalName指令设定的服务器名称。
日志的分隔:
使用apache自带的日志分隔工具,在单独的网站配置文件中加入下面语句
CustomLog "|/usr/local/httpd2/bin/rotatelogs /wwwroot/web_dir/logs/%Y_%m_%d 86400 480" web
其中/usr/local/httpd2/为apache的安装路径、/wwwroot/web_dir/logs/%Y_%m_%d为日志的存放路径,后面的%Y_%m_%d代表年月日(之间用_隔开),86400代表日志分隔的时间间隔(单位为秒),480表示相对于UTC的时差分钟数,默认为0,中国是第八时区,相差480分钟,不设置会导致日志记录时间和服务器时间相差8小时,web为日志的格式名称。
附rotatelogs说明
rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]
logfile
它加上基准名就是日志文件名。如果logfile中包含’%‘,则它会被视为用于的strftime(3)的格式字串;否则,它会被自动加上以秒为单位的.nnnnnnnnnn后缀。这两种格式都表示新的日志开始使用的时间。
rotationtime
日志文件回卷的以秒为单位的间隔时间
offset
相对于UTC的时差的分钟数。如果省略,则假定为0,并使用UTC时间。比如,要指定UTC时差为-5小时的地区的当地时间,则此参数应为-300。
filesizeM
指定回卷时以兆字节为单位的后缀字母M的文件大小,而不是指定回卷时间或时差。