1 概述

本文主要介绍了http常见的15中常见配置。为了后期维护方便,建议不要更改etc/httpd/conf/httpd.conf,只需要在路径/etc/httpd/conf.d/增加子配置文件,以.conf结尾的后缀的文件,因为在主配置文件里有配置Include conf.d/*.conf,将子配置文件包括进去。

本文介绍了如下15中常见配置

1、显示服务器版本信息

2、修改监听的IP和Port

3、持久连接

4、MPM(Multi-Processing Module)多路处理模块

5、DSO:Dynamic Shared Object

6、定义'Main' server的文档页面路径

7、定义站点主页面

8、站点访问控制常见机制

9、<Directory>中“基于源地址”实现访问控制

10、日志设定

11、设定默认字符集

12、定义路径别名

13、基于用户的访问控制

14、虚拟主机

15、status页面

2 httpd配置文件的组成

主要是由三部分组成,全局配置,主服务器配置和虚拟主机配置

.# grep "Section"/etc/httpd/conf/httpd.conf

### Section 1: Global Environment

### Section 2: 'Main' serverconfiguration

### Section 3: Virtual Hosts,一个主机建立多个网站,要用到这个配置,2.2版本默认不支持,需要手动加

.配置格式:directivevalue

配置格式:指令值

directive:不区分字符大小写

value:为路径时,是否区分大小写,取决于文件系统

3  Httpd 2.2常见配置

3.1、显示服务器版本信息

格式如下

ServerTokens   Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

显示其他信息,可以查看帮助文档的ServerTokens,配置相应头部,影响的是回应的服务包

如果不配置这行,默认是ServerTokens full

此设置适用于整个服务器,并且无法在虚拟主机by-virtualhostbasis上启用或禁用此设置。

2.0.44版本后,该指令还控制由ServerSignaturedirective提供的信息。

建议配置成ServerTokensprod,比较安全 相关配置和结果如下

ServerTokens  Prod[uctOnly]  #Server:Apache
ServerTokens  Major  #Server: Apache/2
ServerTokens  Minor   #Server: Apache/2.0
ServerTokens  Min[imal]  #Server: Apache/2.0.41
ServerTokens  OS #Server: Apache/2.0.41 (Unix)
ServerTokens  Full (or not specified) #Server:Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

3.2、修改监听的IP和Port

Listen [IP:]PORT

(1)省略IP表示为0.0.0.0;

listen80是指监听所有ip的80端口,可以指定对应和对外的访问权限,大小写不敏感

改配置为192.168.32.61 8080。这样就只能监听在192.168.32.61的8080端口,默认的80端口就不能访问了

(2) Listen指令至少一个,可重复出现多次

说明不能缺省,至少有一项。重启服务会影响现在的连接。所有能用reload实现的尽量不要用重启操作

Listen 80
Listen 8080

服务器可以同时监听多个ip的不同端口

配置listen 80的基础上添加配置listen

192.168.32.61 8080,同时监听192.168.23.106的8080端口和所有ip的80端口

(3)修改监听socket,重启服务进程方可生效.怎么修改?

3.3、持久连接

指建立连接后每次接收多个资源的请求,如果只接收一个资源的请求,就不是持久连接

Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认关闭持久连接

断开条件:数量限制:100

时间限制:httpd-2.2以秒为单位,httpd-2.4支持毫秒级

副作用:对并发访问量较大的服务器,持久连接功能会使用有些请求得不到响应

折衷:使用较短的持久连接时间

设置:KeepAlive  On|Off

如果注释这行,默认是on

KeepAliveTimeout  15

以秒为单位,默认是15秒

MaxKeepAliveRequests  100

这里是指请求数

测试:telnetWEB_SERVER_IP PORT

GET  /URL  HTTP/1.1
Host: WEB_SERVER_IP(这里要写对方的域名,冒号后面要要有空格)
Host这行回车后后还要多一个回车(产生一个空行)

这样才能得到正确的结果,这是http的请求报文语法决定的。

这里是通过GET /index.heml http/1.1来构造数据包报文,服务器配置KeepAlive

off则一个连接是访问一个资源,访问完成后端口,例子如下

开启KeepAlive  on就可以一次连接多次请求,连接在超时时间内或者请求此时内,不会断开

3.4、MPM(Multi-Processing Module)多路处理模块

三种服务器的工作模式,默认是用prefork这个

httpd -l(字母l)可以查看到当前正在用的模块

/etc/sysconfig/httpd配置里的这行HTTPD=/usr/sbin/httpd.worker配置决定了用哪个模块,默认是用prefork

httpd-2.2不支持同时编译多个模块,所以只能编译时选定一个;rpm安装的包提供三个二进制程序文件,分别用于实现对不同MPM机制的支持

重启后确认方法:ps  aux | grep  httpd查看当前的进程

curl -I 192.168.32.61结果Content-Type是响应报头,根据文档里的内容,模数头部来进行判断类型

ab命令用来测试性能,该命令在httpd这个包提供

ab  -c 10 -n 100  http://192.168.32.63/

表示总共发了100个请求,每一次的并发数是10个请求,即100个请求仅仅发送了10次就完成了

-c是并发数,一次执行的多个请求数。 默认是一次一个请求。

执行命令ulimit   -a查看本机的并发连接数open files

执行命令ulimit -n  2048(要调整的并发数),修改本机的并发数open files

-n是总共发送多少个请求,执行基准测试会话的请求数。 默认情况是仅仅形成单一请求,通常会导致非代表性的基准测试结果。

.查看模块列表

httpd-l:查看静态编译的模块

httpd–M :查看加载的模块,静态编译及动态装载的模块

.动态模块加载:不需重启即生效

.动态模块路径:/usr/lib64/httpd/modules/

.更换使用的httpd程序,即更改MPM模式:

vim  /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker

重启服务生效

pstree  -p|grep   httpd查看进程和线程

.Httpd2.4与2.2切换worker不同

以动态模块方式提供

httpd  -M |grep   mpm  #查看是否加载模块了

pstree  -p|grep  httpd查看进程和线程

vim  /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_worker_module modules/mod_mpm_worker.so

重启服务生效。如果重启时报错,可能是php模块的问题,暂时未解决。


prefork的默认配置:

.prefork的默认配置:
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256 最多进程数,最大20000
MaxClients 256 最大并发
MaxRequestsPerChild 4000 子进程最多能处理的请求数量。在处理MaxRequestsPerChild个请求之后,子进程将会被父进程终止,该子进程会被杀掉,这时候子进程占用的内存就会释放(为0时永远不释放)
</IfModule>
.worker的默认配置:
<IfModule worker.c>
StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0 无限制
</IfModule>


3.5、DSO:Dynamic SharedObject

加载动态模块配置

/etc/httpd/conf/httpd.conf

配置指定实现模块加载格式:

LoadModule  <mod_name> <mod_path>

LoadModule   名称      模块路径(模块文件路径是相对于路径相对于ServerRoot,即默认为/etc/httpd/)

例子

LoadModule   version_module   modules/mod_version.so
LoadModule  auth_basic_module   modules/mod_auth_basic.so

3.6、定义'Main'

server的文档页面路径

DocumentRoot“/path”

文档路径映射:

DocumentRoot指向的路径为URL路径的起始位置

示例:

DocumentRoot   "/app/data“
http://HOST:PORT/test/index.html-->/app/data/test/index.html

注意:SELinux和iptables的状态可能会影响访问

3.7、定义站点主页面

定义默认主页面的查看内容

DirectoryIndex  index.html index.html.var

当网页出错的时候,默认的错误弹出的页面是定义在/etc/httpd/conf.d/welcome.conf这个文件下的,

如网站没有默认的主页时,默认/etc/httpd/conf.d/welcome.conf这个文件是将错误页面跳转到/var/www/error/noindex.html

noindex.html这个文件就是centOS上默认显示的测试页面,如果将/etc/httpd/conf.d/welcome.conf的内容修改,可以将没有首页调整到指定的页面,而不一定是noindex.html这个页面。

修改这两个文件可以将默认的错误信息进行修改

3.8、站点访问控制常见机制

对用户访问某些页面的时候加以控制,具体的例子看第9项

可基于两种机制指明对哪些资源进行何种访问控制

访问控制机制有两种:客户端来源地址,用户账号

注意,有match的关键字,如filesmatch,locationmatch都是基于正则表达式匹配的

没有match,如files,location是基于通配符进行匹配

控制各种资源的访问,

.文件系统路径:

.文件系统路径:
<Directory   "/path">
...
</Directory>
Directory针对的是系统里的文件夹进行控制
 
<File “/path/file”> 
...
</File>
<FileMatch    "PATTERN">
...
</FileMatch>
FileMatch表示正则表达式匹配的文件名称来控制
 
.URL路径:
基于url进行控制
<Location "url路径">
...
</Location>
 
 
<LocationMatch   "">
...
</LocationMatch>

.示例:

<FilesMatch  "\.(gif|jpe?g|png)$"> 基于正则表达式匹配
<Files “?at.*”> 基于通配符匹配
<Location /status>  :  /status表示的是路径,表示为 /www/var/html/status
Location后面跟着url路径表示 http://www.sunny.com/status
<LocationMatch   "/(extra|special)/data">
<Files "?at.*">

3.9、中“基于源地址”实现访问控制

.(1) Options:后跟1个或多个以空白字符分隔的选项列表

在选项前的+,-表示增加或删除指定选项

常见选项:

Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户

表示当前目录下没有index的时候,是否显示文件夹的目录,为了安全考虑,这一项一般是要禁止,即设置为-indexes

FollowSymLinks:允许访问符号链接文件所指向的源文件,如在对应目录下有一个软链接,

该软链接默认情况下是支持FollowSymLinks

例子:

ln -s /etc/fstab   a.html

这样该目录下有a.html指向/etc/fstab这个文件,默认是支持访问的,但是如果配置-FollowSymLinks,则访问a.html就的得不到结果

None:全部禁用,为了安全,一般设置为none

All:全部允许,包括indexes

.示例:

<Directory /web/docs>
Options Indexes FollowSymLinks
</Directory>
 
<Directory   /web/docs/spec>
Options   FollowSymLinks
</Directory>
 
<Directory  /web/docs>
Options Indexes FollowSymLinks
</Directory>
 
<Directory /web/docs/spec>
Options +includes  -indexes
</Directory>

.(2) AllowOverride

与访问控制相关的哪些指令可以放在指定目录下的.htaccess(由AccessFileName指定)文件中,覆盖之前的配置指令。在配置文件里,配置AllowOverride...指定对应目录允许用户可以通过.htaccess文件的配置覆盖配置文件的权限,即使得.htaccess的权限比配置文件高,其实时相关于给.htaccess文件授权,指定对应目录的.htaccess能做什么事。

在要设置权限对应的目录下新建.htaccess,然后将配置命令写入.htaccess这个下面

.htaccess文件,注意这个文件的写法, 不需要再指定...,因为这个文件就是用来专门控制某个文件夹下的相关权限,必须是放在对应目录下,为了安全,建议将.htaccess这个文件的权限设置为600,chmod 600 .htaccess。同时,设置acl使得apache这个账号可以访问该权限setfacl -mu:apache:r .htaccess

例子如下

例子一

options indexes#控制目录能否有索引

例子二

在对应目录下写入.htaccess文件

authtype basic
authname "sunny admin"
authuserfile "/etc/httpd/conf.d/httpusers"
require valid-user

以上语句控制了该目录具有basic认证

AllowOverride  All:所有指令都有效,但是只能写在语句里面有效

http主站点默认是不允许用户访问.htaccess,因为这个是配置文件里写入了如下的语句

<Files ~
"^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>


AllowOverride None #效果是导致了.htaccess文件无效

AllowOverride  AuthConfig   Indexes除了AuthConfig和Indexes的其它指令都无法覆盖

父目录的设置会影响子目录的设置,本来这里子目录不允许索引,但是父目录允许了,导致子目录也允许索引

.(3) order和allow、deny

order:定义生效次序;写在后面的表示默认法则,写在后面的优先级高,如allow,deny,deny的优先级比allow高。注意主配置文件上有对家目录的设置

Order allow,deny
Order deny,allow
Allow from
Deny from
来源地址:IP
网络:
根据地址进行判断,地址有如下的写法
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0

.示例:

<files "*.txt">

如果是txt后缀的文件,进行设置

order deny,allow
deny from 172.16. 100.100
allow from 172.16
此时172.16.100.100是被allow的
</files>
<files "*.txt">
order allow,deny
deny from 172.16.100.100
allow from 172.16
此时172.16.100.100是被deny的

</files>

拒绝所有人访问以.conf结束的文件。

这种规则不建议加,因为通配符做匹配时会消耗服务器的资源,降低了性能

3.10、日志设定

日志类型:

          访问日志:访问的日志

           错误日志:报错的日志

访问日志:

配置文件里定义了访问日志的路径和格式,访问日志路径/etc/httpd/logs/access_log

错误日志:

报错的日志,

 ErrorLog   logs/error_log;即路径是/etc/httpd/logs/error_log

Log    Levelwarn

loglevel可选值:

debug, info, notice, warn,error,crit,alert, emerg

.访问日志:

.定义日志格式:LogFormat  format strings

LogFormat  "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined

.使用日志格式:

CustomLog    logs/access_log    combined

该语句定义了日志的路径,以及日志的格式,这个格式应用了模板combined,这个combined的格式是可以调整的,也是定义在配置文件中,日志的参数可以见官方的文档

参考帮助:

http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

 或者是安装日志手册,yum -y install httpd-manual,然后见  http://http-server-ip/manual/mod/mod_log_config.htmlhttp://172.18.50.61/manual/mod/mod_log_config.html

.%h 客户端IP地址

.%l 远程用户,启用mod_ident才有效,通常为减号“-”

.%u 验证(basic,digest)远程用户,非登录访问时,为一个减号“-”

.%t 服务器收到请求时的时间

.%r First line of request,即表示请求报文的首行;记录了此次请求的“方法”,“URL”以及协议版本

.%>s 响应状态码

.%b 响应报文的大小,单位是字节;不包括响应报文http首部

.%{Referer}i 请求报文中首部“referer”的值;即从哪个页面中的超链接跳转至当前页面的。具体指上一次从哪个网站跳转过来的,即有做链接的的那个网站叫referer,这个字段可以在请求的报头里看到。跳转后的那个页面叫做infer <a href=http://172.18.50.75/a.txt>Welcome to sunnyhome</a>这个语句,网页上点击Welcome to sunny home就会跳转到http://172.18.50.75/a.txt这个文件,其中,Welcome to sunny home所在的页面就是referer。http://172.18.50.75/a.txt这个页面就叫infer

.%{User-Agent}i 请求报文中首部“User-Agent”的值;即发出请求的应用程序,一般指浏览器的类型,报头类型的一种

3.11、设定默认字符集

配置语句:AddDefault   Charset  UTF-8

UTF-8各国语言都支持,包括支持中文字符

中文字符集:GBK, GB2312, GB18030

3.12、定义路径别名

格式:Alias  /URL/  "/PATH/"

表示访问URL的时候跳转到PATH来

注意这里的/url是指http的url,如配置为/bbs,表示网站 http://172.18.50.75/bbs

/PATH/ 是指要调整到本地的那个具体的路径下,如配置为/var/www/html/os,表示当用户访问http://172.18.50.75/bbs的时候会直接跳转到路径/var/www/html/os来

3.13、基于用户的访问控制

.认证质询:WWW-Authenticate:响应码为401,拒绝客户端请求,并说明要求客户端提供账号和密码

.认证:Authorization:客户端用户填入账号和密码后再次发送请求报文;认证通过时,则服务器发送响应的资源

.认证方式两种:

basic:明文,默认走http协议,输入用户名和密码来验证

digest:消息摘要认证,兼容性差

.安全域:需要用户认证后方能访问的路径;应该通过名称对其进行标识,以便于告知用户认证的原因

.用户的账号和密码

虚拟账号:仅用于访问某服务时用到的认证标识,这里用的账号是虚拟账号,给服务用的,不是登录操作系统的账号

存储:账号的存储路径,文本文件,SQL数据库,ldap目录存储,nis等

.basic认证配置示例:

(1) 定义安全域

<Directory “/path">
   Options None
    AllowOverride None
     AuthType Basic
     AuthName "String“
#string是提示字符串,类似欢迎词
AuthUserFile"/PATH/HTTPD_USER_PASSWD_FILE"
#/PATH/HTTPD_USER_PASSWD_FILE虚拟账号放在的路径,通过工具来生成这个文件,工具是htpasswd
Requireuser username1 username2 ...
#Require user表示只有/PATH/HTTPD_USER_PASSWD_FILE里特定的几个账号才能访问,不是/PATH/HTTPD_USER_PASSWD_FILE所有账号都能访问。如果这句配置改为Require valid-user,那么/PATH/HTTPD_USER_PASSWD_FILE的所有用户都能访问
</Directory>

 

以上的配置是写如配置文件,例子如下

vim /etc/httpd/conf.d/test.conf
<directory  /var/www/html/secret>
authtype  basic
authname  "sunny auth"
authuserfile  "/etc/httpd/conf.d/httpusers"
require  user httpuser
</directory>

   

然后重启httpd服务器就可以启动,以上配置表示要访问/var/www/html/secret这个目录,需要通过基于basic的认证,允许的用户是在/etc/httpd/conf.d/httpusers这个文件下,但是只有该文件里的用户httpuser才能访问

(2)提供账号和密码存储(文本文件)

使用专用命令完成此类文件的创建及用户管理

htpasswd  [options] /PATH/HTTPD_PASSWD_FILE username

-c:自动创建文件,该选项仅在该文件不存在时使用,如第一次创建文件,文件的路径没有指定,用户可以自己指定,文件以及存在的情况下不能使用-c选项,否则之前的账号密码信息会被覆盖

-m:md5格式加密,默认是md5算法,建议加上-m选项

-s: sha格式加密

-D:删除指定用户

 

.基于组账号进行认证

注意,这里和基于用户的认证基本一样,要求要通过htpasswd生成指定的用户,同时,多了两个配置,要生成一个组文件,将指定的用户加到对应的组里,同时还要再配置文件里指定哪些组可以访问。以下定义安全域事一种方法,同时也可以指定.htaccess文件来指定权限,再配置文件里将对应目录增加allowoverride的配置即可。

方法一(1)定义安全域

<Directory “/path">
AuthType  Basic
AuthName  "String“
AuthUserFile   "/PATH/HTTPD_USER_PASSWD_FILE"
AuthGroupFile  "/PATH/HTTPD_GROUP_FILE"
Require group grpname1 grpname2 ...
</Directory>

 

例子

<directory /var/www/html/admin>
authtype basic
authname "sunny admin"
authuserfile "/etc/httpd/conf.d/httpusers"
authgroupfile "/etc/httpd/conf.d/httpgrp"
require group grp1grp2
</directory>

 

.(2) 创建用户账号和组账号文件;

这个是虚拟组,和虚拟用户一样的概念,不是系统的组或用户

基于组的验证,实现要准备好一个文件

/PATH/HTTPD_GROUP_FILE  组文件:每一行定义一个组 

GRP_NAME: username1 username2 ...

 例子

vim /etc/httpd/conf.d/httpgrp
grp1:http sunny http5
grp2:httpuser http6

重启服务即可

 

方法二,再目录/var/www/html/admin下创建一个.htaccess文件,内容如下

authtype basic
authname "sunny admin"
authuserfile "/etc/httpd/conf.d/httpusers"
authgroupfile "/etc/httpd/conf.d/httpgrp"
require group grp1grp2

然后在子配置文件下添加子配置内容,写入如下的内容,允许目录/var/www/html/admin可以

allowoverride authconfig
<directory/var/www/html/admin>
allowoverrideauthconfig
</directory>

然后再添加组和用户文件 /etc/httpd/conf.d/httpusers 和 /etc/httpd/conf.d/httpgrp,重启服务即可

允许特定的机器访问特定目录,以下例子只有61这台机器可以访问。这样设置后,可以运行在特定机器上的特定用户才能访问了,这是且关系。必须是172.18.50.61且用户是再basic用户认证的用户才能访问

<directory/var/www/html/admin>
order deny,allow
deny from all
allow from 172.18.50.61
allowoverride authconfig
</directory>

.Satisfy   ALL|Any

ALL 客户机IP和用户验证都需要通过才可以

Any客户机IP和用户验证,有一个满足即可

如果在以下配置加上SatisfyAny 是两个验证二选一就可以,或的关系,来自172.18.50.61的访问或者通过了basic验证的用户都可以访问

<directory /var/www/html/admin>
order deny,allow
deny from all
allow from 172.18.50.61
allowoverride authconfig
satisfy any
</directory>

3.14、虚拟主机

.站点标识:socket

一个主机上有多个主页,就叫虚拟主机,由IP+端口组合来实现,可以通过customlog分别记录不同主机的log

有三种实现方案:

基于ip:

为每个虚拟主机准备至少一个ip地址,IP不同,但端口均为默认端口

在子配置文件写写配置,三个不同的ip访问不同的主站点,这些站点是虚拟主站点。如果站点访问量不大,可以在一个主机上建立多个虚拟主站点,减少物理主机的数量,节约成本。整个仅适合企业内部来用,因为是需要用ip来访问。

这里如果不需要默认的主站点,可以把主站点的网页配置注释。默认主站点和虚拟站点可以共存

基于port:

为每个虚拟主机使用至少一个独立的port,IP相同,但端口不同

基于FQDN:

为每个虚拟主机使用至少一个FQDN,基于名称,FQDN不同;

基于FQDN,要启用dns服务,如果不启用dns服务器,可以在对应服务器上/etc/hosts文件把对应的ip  和url 添加上

基于名称的虚拟主机,要把配置文件中的NameVirtalHost*:80这句话启用

基于名称的使用,主站点默认是会被禁止的,此时返回的结果是第一个虚拟主站点,(根据配置文件中虚拟主机的排序来决定,排在第一位的是默认主站点)这个和基于ip的使用不一样。

.注意:基于FQDN的虚拟机不要与main主机混用;因此,要使用虚拟主机,先禁用main主机,即注释中心主机的DocumentRoot指令即可

 测试的时候,把客户机的dns指向dns服务器进行测试

 .其它可用指令:

ServerAlias:虚拟主机的别名;可多次使用
ErrorLog:错误日志
CustomLog:访问日志
<Directory “/path">
</Directory>
Alias

 例子

.基于IP的虚拟主机示例

实验中,我们给eth0添加三个ip

ip address add 192.168.32.10/24 deveth0
ipaddress add 192.168.32.20/24 dev eth0
ip address add 192.168.32.30/24 deveth0

注意,删掉网卡上的一个子ip,语句如下。或者重启网络服务,会把所有的子ip都删掉

ip address del 192.168.32.30/24 deveth0

然后添加子配置文件

vim/etc/httpd/conf.d/test.conf
<virtualhost 192.168.32.10:80>
Documentroot "/var/www/html/web1"
</virtualhost>
<virtualhost 192.168.32.20:80>
Documentroot "/var/www/html/web2"
</virtualhost>
<virtualhost 192.168.32.30:80>
Documentroot "/var/www/html/web3"
</virtualhost>

重启http服务,注意,重启会比较慢,进行测试

.基于端口的虚拟主机

可和基于IP的虚拟主机混和使用

这里是同一个ip上不同的端口,得到不一样的网页

listen 888
listen 808
listen 8080
<virtualhost 192.168.32.10:888>
Documentroot "/var/www/html/web1"
</virtualhost>
<virtualhost 192.168.32.10:808>
Documentroot "/var/www/html/web2"
</virtualhost>
<virtualhost 192.168.32.10:8080>
Documentroot "/var/www/html/web3"
</virtualhost>

.基于FQDN的虚拟主机:

a 注释主配置文件的Documentroot

vim /etc/httpd/conf/httpd.conf 
#DocumentRoot  "/var/www/html"

b 再dns上配置这三个主站点的dns解析

比如dns服务器是172.18.50.61

再该服务器上配置如下的配置

vim/etc/named.rfc1912.zones
zone "a.com" IN {
    type master;
    file"a.com.zone";
};
vim /var/named/a.com.zone
$TTL 1D
@   IN    SOA masterdns  admin.a.com. (
                   2017092113  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
           NS  masterdns
masterdns        A   192.168.32.61
www              A    192.168.32.63

 

www.b.comwww.c.com 上同样定义区域和dns解析文件

c 编写子配置文件

以下例子把log功能也启用了,分别记录不同虚拟主机的log

vim/etc/httpd/conf.d/test.conf
NameVirtualHost*:80  #注意httpd2.4不需要此指令
 <virtualhost *:80>
servername www.a.com
Documentroot "/var/www/html/web1"
customlog logs/www.a.com-access_log combined
</virtualhost>
<virtualhost *:80>
servername www.b.com
Documentroot "/var/www/html/web2"
customlog logs/www.b.com-access_log combined
</virtualhost>
<virtualhost *:80>
servername www.c.com
Documentroot "/var/www/html/web3"
customlog logs/www.c.com-access_log combined
</virtualhost>

重启http服务,再客户端修改dns为172.18.50.61,进行测试即可

3. 15、status页面

/server-status这个是虚拟目录,用这个目录来显示当前站点的信息

监控web服务器的工作状态,需要加载模块status_module,源码编译需要编译该模块才能使用这个功能

源码编译的时候,要把status_module模块加进去,配置中语句如下

LoadModule status_module modules/mod_status.so

基于安全,一般要加权限设置,如配置只允许以下的网段访问,allow from 192.168.32

Location  /server-status是可以自己随便指定,建议改掉这个名称,更加安全。但是SetHandler 后的server-status是固定的,不能更改,模块的名称

通过server-status这个网页可以作为判断服务器状态的网页,如果该页面可以打开,说明当前服务器工作状态正常,curl http://172.18.50.63/server-status,然后echo $?如果返回值是0.说明当前网页正常

加上 ExtendedStatus On这个配置使得该网页显示更加详细的信息

例子:

vim /etc/httpd/conf.d/status.conf
<Location/sunny-server>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 172.18
</Location>
   ExtendedStatus On

 

4 总结

本文主要是介绍2http  .2相关的常用配置,后续如果工作中有涉及,且认为是常用的,将会继续做更新