首页 > 服务器学习 > Linux > apache服务配置介绍及访问日志设置
2016
12-17

apache服务配置介绍及访问日志设置

服务器的工作模式 (MPM: Multi-Processing Modules)

apache2主要的优势就是对多处理器的支持更好,在编译时同过使用--with-mpm=NAME选项来决定apache2的工作模式。可以通过httpd -l命令列出apache的所有模块,就可以知道其工作方式:

prefork:如果httpd -l列出prefork.c,则需要对下面的段进行配置:prefork为默认缺省设置,即不使用参数--with-mpm指定时的默认模式。

<IfModule prefork.c>

StartServers 5 #启动apache时启动的httpd进程个数。

MinSpareServers 5 #服务器保持的最小空闲进程数。

MaxSpareServers 10 #服务器保持的最大空闲进程数。

MaxClients 150 #最大并发连接数。

MaxRequestsPerChild 1000 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。

</IfModule>

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

worker:如果httpd -l列出worker.c,则需要对下面的段进行配置:

<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:如果httpd -l列出perchild.c,则需要对下面的段进行配置:

<IfModule perchild.c>

NumServers 5 #服务器启动时启动的子进程数

StartThreads 5 #每个子进程启动时启动的线程数

MinSpareThreads 5 #内存中的最小空闲线程数

MaxSpareThreads 10 #最大空闲线程数

MaxThreadsPerChild 2000 #每个线程最多被请求多少次后退出。0不受限制。

MaxRequestsPerChild 10000 #每个子进程服务多少次后被重新fork。0表示不受限制。

</IfModule>

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

apache的常见配置信息

NameVirtualHost *:80 :在配置文件中加入这句话可以配置多个网站

ServerRoot "/usr/local/apache" :Apache的安装目录

ServerName localhost :服务名称,可以填主机名

Listen 80 :服务监听端口,默认80

LoadModule :服务启动需要加载的模块

User daemon :apache进程执行者

Group deamon :执行者的属组

ServerAdmin you@example.com :管理员的邮箱地址

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/

<Directory "/var/www/download"> #对该目录进行访问控制设置

Options Indexes MultiViews

AllowOverride AuthConfig

Order allow,deny

Allow from all

</Directory>

个人主页的设置 (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的文件大小,而不是指定回卷时间或时差。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。