apache配置文件详解

时间:2021-09-28 16:53:52

ServerTokens os     #显示操作系统类型,Prod,只显示apache,其他都不显示.

ServerRoot "/etc/httpd"    #httpd的运行环境

PidFile run/httpd.pid    #pid文件位置

Timeout 60    #不论接收或传送,当持续连线等待超过 60 秒则该次连线就中断

KeepAlive on    

Keep-Alive扩展自HTTP/1.0和HTTP/1.1的持久链接特性。提供了长效的HTTP会话,用以在同一个TCP连接中进行多次请求。在某些情况下,这样的方式会对包含大量图片的HTML文档造成的延时起到50%的加速作用

KeepAliveTimeout 15

Apache在关闭持久连接前等待下一个请求的秒数。一旦收到一个请求,超时值将会被设置为Timeout指令指定的秒数。

对于高负荷服务器来说,KeepAliveTimeout值较大会导致一些性能方面的问题:超时值越大,与空闲客户端保持连接的进程就越多。

MaxKeepAliveRequests 300

MaxKeepAliveRequests指令限制了当启用KeepAlive时,每个连接允许的请求数量。如果将此值设为"0",将不限制请求的数目。我们建议最好将此值设为一个比较大的值,以确保最优的服务器性能。


<IfModule prefork.c>


StartServers       8

StartServers指令设置了服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。

不同的MPM默认值也不一样。对于worker默认值是"3"。对于prefork默认值是"5",mpmt_os2是"2"

MinSpareServers    5

MinSpareServers指令设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。

只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。


MaxSpareServers   20

MaxSpareServers指令设置空闲子进程的最大数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。

只有在非常繁忙机器上才需要调整这个参数。将此参数设的太大通常是一个坏主意。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成"MinSpareServers+1"。


ServerLimit      256

对于preforkMPM,这个指令设置了MaxClients最大允许配置的数值。对于workerMPM,这个指令和ThreadLimit结合使用设置了MaxClients最大允许配置的数值。任何在重启期间对这个指令的改变都将被忽略,但对MaxClients的修改却会生效。

使用这个指令时要特别当心。如果将ServerLimit设置成一个高出实际需要许多的值,将会有过多的共享内存被分配。如果将ServerLimit和MaxClients设置成超过系统的处理能力,Apache可能无法启动,或者系统将变得不稳定。

对于preforkMPM,只有在你需要将MaxClients设置成高于默认值256的时候才需要使用这个指令。要将此指令的值保持和MaxClients一样。

对于workerMPM,只有在你需要将MaxClients和ThreadsPerChild设置成需要超过默认值16个子进程的时候才需要使用这个指令。不要将该指令的值设置的比MaxClients 和ThreadsPerChild需要的子进程数量高。


MaxClients       256

MaxClients指令设置了允许同时伺服的最大接入请求数量。任何超过MaxClients限制的请求都将进入等候队列,直到达到ListenBacklog指令限制的最大值为止。一旦一个链接被释放,队列中的请求将得到服务。

对于非线程型的MPM(也就是prefork),MaxClients表示可以用于伺服客户端请求的最大子进程数量,默认值是256。要增大这个值,你必须同时增大ServerLimit 。

对于线程型或者混合型的MPM(也就是beos或worker),MaxClients表示可以用于伺服客户端请求的最大线程数量。线程型的beos的默认值是50。对于混合型的MPM默认值是16(ServerLimit)乘以25(ThreadsPerChild)的结果。因此要将MaxClients增加到超过16个进程才能提供的时候,你必须同时增加ServerLimit的值。



MaxRequestsPerChild  4000

MaxRequestsPerChild指令设置每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为"0",子进程将永远不会结束。

</IfModule>

prefork模式可以算是很古老但是非常稳定的Apache模式。Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。


MinSpareThreads     25

设置最小空闲线程数,用于处理可能到来的突发请求。不同的MPM对这个指令的处理是不一样的:

worker的默认值是"75"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。

mpm_netware的默认值是"10"。既然这个MPM只运行单独一个子进程,此MPM当然亦基于整个服务器监视空闲线程数。

beos和mpmt_os2的工作方式与mpm_netware差不多,beos的默认值是"1";mpmt_os2的默认值是"5"。


MaxSpareThreads     75

设置最大空闲线程数。不同的MPM对这个指令的处理是不一样的:

worker的默认值是"250"。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。

mpm_netware的默认值是"100"。既然这个MPM只运行单独一个子进程,此MPM当然亦基于整个服务器监视空闲线程数。

beos和mpmt_os2的工作方式与mpm_netware差不多,beos的默认值是"50";mpmt_os2的默认值是"10"。


ThreadsPerChild     25

这个指令设置了每个子进程建立的线程数。子进程在启动时建立这些线程后就不再建立新的线程了。如果使用一个类似于mpm_winnt只有一个子进程的MPM,这个数值要足够大,以便可以处理可能的请求高峰。如果使用一个类似于worker有多个子进程的MPM,每个子进程所拥有的所有线程的总数要足够大,以便可以处理可能的请求高峰。

对于mpm_winnt,ThreadsPerChild的默认值是64;对于其他MPM是25。

User apache

Group apache

ServerAdmin 86...@qq.com     #管理员邮箱


ServerName www.a.com   

ServerName指令设置了服务器用于辨识自己的主机名和端口号。这主要用于创建重定向URL。比如,一个放置web服务器的主机名为simple.example.com ,但同时有一个DNS别名www.example.com 。而您希望web服务器更显著一点,您可以使用如下的指令:

ServerName www.example.com:80

当没有指定ServerName时,服务器会尝试对IP地址进行反向查询来推断主机名。如果在ServerName中没有指定端口号,服务器会使用接受请求的那个端口。为了加强可靠性和可预测性,您应该使用ServerName显式的指定一个主机名和端口号。

如果使用的是基于域名的虚拟主机,在<VirtualHost>段中的ServerName将是为了匹配这个虚拟主机,在"Host:"请求头中必须出现的主机名。

可选的'scheme://'前缀仅在2.2.3以后的版本中可用,用于在代理之后或离线设备上也能正确的检测规范化的服务器URL。

参见UseCanonicalName和UseCanonicalPhysicalPort指令以获得关于自引用URL(比如使用mod_dir模块)是需要指定一个特定端口,还是使用客户端请求的端口号的更详细的信息


UseCanonicalName off    #如果主机有多个主机名,若为on那么appache只接受ServerName指定的主机名

DocumentRoot "/var/www" #资源根目录


ScriptAlias /cgi-bin/  /web/cgi-bin/ 

对http://myserver/cgi-bin/foo的请求会引导服务器执行/web/cgi-bin/foo脚本。ScriptAlias指令的行为与Alias指令相同,但同时它又标明此目录中含有应该由cgi-script处理器处理的CGI脚本。以URL-path开头的(%已解码的)的URL会被映射到由第二个参数指定的具有完整路径名的本地文件系统中的脚本,/web/cgi-bin/这里目录要具有CGI可执行权限


<Directory /web/cgi-bin>


Options ExecCGI  

None,不启用任何特性

All

除MultiViews之外的所有特性。这是默认设置。

ExecCGI

允许使用mod_cgi执行CGI脚本。

FollowSymLinks

服务器允许在此目录中使用符号连接,真实的文件也要在当前目录中,不然不行

Includes

允许使用mod_include提供的服务器端包含。

IncludesNOEXEC

允许服务器端包含,但禁用"#exec cmd"和"#exec cgi"。但仍可以从ScriptAlias目录使用"#include virtual"虚拟CGI脚本。

Indexes

如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会返回由mod_autoindex生成的一个格式化后的目录列表.

MultiViews

允许使用mod_negotiation提供内容协商的"多重视图"(MultiViews)。

SymLinksIfOwnerMatch

服务器仅在符号连接与其目的目录或文件的拥有者具有相同的uid时才使用它。


AllowOverride None 

当服务器发现一个.htaccess文件(由AccessFileName指定)时,它需要知道在这个文件中声明的哪些指令能覆盖在此之前指定的配置指令。

仅允许存在于<Directory>配置段

AllowOverride仅在不包含正则表达式的<Directory>配置段中才是有效的。在<Location>, <DirectoryMatch>, <Files>配置段中都是无效的。

如果此指令被设置为None ,那么.htaccess文件将被完全忽略。事实上,服务器根本不会读取.htaccess文件。

当此指令设置为 All时,所有具有".htaccess"作用域的指令都允许出现在.htaccess文件中。



Order allow,deny 

Deny,Allow

Deny指令在Allow指令之前被评估。默认允许所有访问。任何不匹配Deny指令或者匹配Allow指令的客户都被允许访问。

Allow,Deny

Allow指令在Deny指令之前被评估。默认拒绝所有访问。任何不匹配Allow指令或者匹配Deny指令的客户都将被禁止访问。

Mutual-failure

只有出现在Allow列表并且不出现在Deny列表中的主机才被允许访问。这种顺序与"Order Allow,Deny"具有同样效果,不赞成使用。

关键字只能用逗号分隔;它们之间不能有空格。注意在所有情况下每个Allow和Deny指令语句都将被评估。


Allow from all

Allow指令控制哪些主机可以访问服务器的该区域。可以根据主机名、IP地址、 IP地址范围或其他环境变量中捕获的客户端请求特性进行控制。

这个指令的第一个参数总是"from",随后的参数可以有三种不同形式:如果指定"Allow from all",则允许所有主机访问,按照下述Deny和Order指令的配置。若要只允许特定的主机或主机群访问服务器,host可以用下面任何一种格式来指定:

一个(部分)域名:

Allow from apache.org

主机名与给定字符串匹配或者以给定字符串结尾的主机允许访问。只有完整的名字组成部分才被匹配,因此上述例子将匹配foo.apache.org但不能匹配fooapache.org 。这样的配置将导致Apache不管HostnameLookups指令是如何设置的,对一个对客户IP地址都要执行两次DNS查询:一次正查询保证IP没有伪造,一次反查询保证主机名没有伪造。只有两次查询的结果都吻合,并且主机名能够被匹配,访问才被允许


完整的IP地址:

Allow from 10.1.2.3

Allow from 192.168.1.104 192.168.1.205


部分IP地址:

Allow from 10.1
Allow from 10 172.20 192.168.2


网络/nnn无类别域间路由规则

Allow from 10.1.0.0/16


AuthType Basic 

此指令选择了一个目录的用户认证类型。目前只实现了Basic(mod_auth_basic)和Digest(mod_auth_digest)。

AuthName "Please input username and password:" # 认证时提示的信息

AuthUserFile /etc/httpd/conf/htpasswd # 认证时用户的账号密码文件,文件名为htpasswd

AuthGroupFile /etc/httpd/conf/htgroup #基于组的认证

Require user tom # 只有tom用户才能登录 (这是tom即为htpasswd中的帐号)
Require group myusers # 允许哪个组中的用户登录
Require valid-user # 出现在账号密码文件中的用户都能登录

这个指令指定哪些认证用户允许访问该资源。这些限制由授权支持模块实现。语法如下:

Require user userid [userid] ...

只有指定的用户可以访问此目录。

Require group group-name [group-name] ...

只有隶属于指定组的用户可以访问此目录。

Require valid-user

所有有效用户都可以访问此目

DirectoryIndex test.html指定这个目录的主页和nginx里的index一样

</Directory>


创建/etc/httpd/conf/htpasswd文件,及用户

使用htpasswd命令创建用户,在第一次创建时加-c可创建文件

# htpasswd -c -m /etc/httpd/conf/htpasswd  tom

# htpasswd -m /etc/httpd/conf/htpasswd  jerry

创建组文件/etc/httpd/conf/htgroup

在文件中写入一行

myusers:  tom  jerry