Linux之Web服务(2)Httpd服务配置之二

前言

在上一篇通过一些简单的案例或说明来介绍了部分关于Httpd2.4httpd.conf配置文件中的配置选项及对应的功能。主要是对访问控制和在处理对指定目录或文件进行访问控制的一些安全问题性的处理。但是一直没有提到访问控制的具体讲解,本篇列出访问控制的具体使用选项和功能,以及其它高级配置。

 

1、Httpd2.4 文档访问授权具体参数

前提:文档访问授权选项配置只适合在以下标签中生效:

     

允许所有地址访问:Require all granted

拒绝所有地址访问:Require all denied

 

注意:要限制制度访问的主机或IP需要配置RequireAll标签,并在标签里添加控制指令

 

标签配置具体访问范围限定设置:

基于IP控制:

    Require ip ADDRESS        #表示允许指定IP地址访问

   Require not ip ADDRESS     #表示拒绝指定IP地址访问

ADDRESS:

   ip#指定主机IP,如10.1.249.223,  10.1.249.223/16

   network#指定网段IP,支持下面3中写法:

       10.1.0.0/255.255.0.0    #指定掩码

       10.1.0.0/16          #掩码prefix前缀格式

        10.1               #省略写法,表示10.1.0.0所有子网

        

基于主机名控制:

   Require host HOSTNAME          #允许指定主机名的主机

   Require not host HOSTNAME      #拒绝指定主机名的主机

HOSTNAME:

    FQDN      #完整域名

    DOMAIN.TLD  #完整主机名

 

 

2、别名路径:

提示:使用别名要在标签中添加对应的别名Alias指令,并在其标签下嵌套指令目录>设置访问控制,Alias 指定定义的别名才会生效。实例如:

 Linux之Web服务(2)Httpd服务配置之二_第1张图片

指令格式:Alias  /URL/  /PATH/TO/SOME_DIR/

如:

Alias  /myweb/   “/web/”   #当访问站点/myweb/目录时为访问文件系统的/web/目录
Alias  /xx    “/test/xx”   #当访问站点/xx目录时,访问的为文件系统的/test/xx目录

注意:如果设置的文件系统的目录后面最后添加了/及,比如aa/Alias的别名指定的URL也要添加斜杠如:my_aa/

 

3、httpd-manual 本地帮助文档

在某些情况下配置和部署Apache HTTP Server时,一般会去Apache的官方上去找最权威的配置帮助指南,但是如果连上外网,或者网速很慢的情况下这样去获取帮助有些困了。于是Httpd服务也提供了一些插件中自带对应版本的Httpd服务本地帮助文档。可以同安装此帮组文档来在本地浏览帮助信息。

详细操作如下:

#安装httpd-maunal

[root@root ~]# yum -y install httpd-manual

#查看httpd-maunal主配置文件

[root@root ~]# rpm -ql httpd-manual | grep '/conf\>'
/etc/httpd/conf.d/manual.conf

#查看httpd-manual配置文件/etc/httpd/conf.d/manual.conf

[root@root ~]# grep '^[^#]' /etc/httpd/conf.d/manual.conf 
AliasMatch ^/manual(?:/(?:de|en|fr|ja|ko|ru))?(/.*)?$ "/usr/share/httpd/manual$1"

    Options Indexes
    AllowOverride None
    Require all granted

解析:这里的配置就是配置了一个决对路径Directory标签,并且和一个支持扩展正则表达式的一个AliasMatch别名标签。访问URLshttp://站点地址或域名/manual/为查看文档界面的首页。

 

#可以使用浏览器来访问,最好使用图形界面的浏览器

Linux之Web服务(2)Httpd服务配置之二_第2张图片 

 

 

4、查看当前站点状态server-status

说明:当配置好了服务之后想要知道当前Web站点服务的一些状态信息,可以通过加载并配置server-status模块来在查看当前web网络状态。

具体操作:

#查看当前是否有加载server-status模块

[root@root ~]# httpd -M | grep '\ 
    

#当然查看所有(多个用for)默认对应的模块加载配置文件/etc/httpd/conf.modules.d/下添加status模块

[root@root ~]# for i in "/etc/httpd/conf.modules.d/*.conf";do grep 'status' $i | cut -d':' -f2;  done
LoadModule status_module modules/mod_status.so

解析:如果没有在服务器根路径下没有在任何文件中找到对应的配置,或者此模块加载配置被注释,可以手动添加一个配置即可:

LoadModule status_module modules/mod_status.so

#然后添加一个status配置,可以在主配置文件,也可以在/etc/httpd/.conf.d下添加

[root@root ~]# vim /etc/httpd/conf.d/status.conf 

  SetHandler server-status
  
     Require ip 10.1.249.223
     Require all denied
  

#添加完成后,检查语法

[root@root ~]# httpd -t
Syntax OK

#然后重载Httpd服务即可

[root@root ~]# systemctl reload httpd.service

#在浏览器打开

[root@root ~]# links http://10.1.249.223/status

Linux之Web服务(2)Httpd服务配置之二_第3张图片 

 

5、Httpd服务日志配置

 

错误日志:

ErrorLog  “/var/log/httpd/error_log” #错误日志的路径
LogLevel  warn                 #错误日志的显示级别

LogLevel错误日志级别:

Possible values include: debug, info, notice, warn, error, crit, alert, emerg.

注意:日志的路径如果写于相对路径,则相对于ServerRoot指定的服务根路径下,如错误日志设置为logs/arror_log,则服务根路径配置为ServerRoot  /etc/httpd/,则日志将会在/etc/httpd/logs/下生成error_log文件,并保存错误日志。访问日志同理。 

 

访问日志:

    LogFormat  FORMAT_STRINGS  LOG_FORMAT_NAME

 CoustomLog /PATH/TO/LOG_FILE LOG_FORMAT_NAME

 

访问日志格式format_strings介绍:

说明提示:

1、定制日志的格式设计到两个指令,既LogFormat指令和CustomLog指令,默认httpd.conf文件提供了关于这两个指令的几个例子;

2LogFormat指令格式为格式指定一个名字(LOG_FORMAT_NAME),以后直接引用这个名字即可。CustomLog 指令设置日志文件,并指明日志文件所用的格式及LogFormat指令定制的格式名字(LOG_FORMAT_NAME)。如:

#配置一个定义的格式,名字为serverlog

LogFormat "%h %l %u %t \"%r\" %>s %b"   serverlog

#当需要使用serverlog格式,指定此名称即可

CustomLog "logs/acess _serverlog"  serverlog

 

具体文档格式参数介绍:

%h:远程主机。
%l:远程登录名,有效登录名时,日志显示为 - 符号。
%u:http洗衣额认证时有客户端输入的用户名。
%t:以公共日志时间格式表示的时间(或称为标准英文格式)。
%r:请求的第一行。
%s:状态码。对于进行内部重定向请求,这是“原来”请求的状态;否则用%>s表示“后来”请求的状态。
%b:CLF格式的已发送字节数量,不包含HTTP头。当没有发送数据时,写入’-’而不是0。
%{VARNAME}i:记录由VARNAME所表示请求报文首部的值,例如%{Referer}i,则表示记录请求报文中Referer首部的值。

补充:如果想看更多关于格式变量的信息,可以根据上面介绍的安装本地帮助文档manual来查看具体的配置信息,然后通过浏览器访问本地html文档即可,如:

http://servername/manual/mod/mod_log_config.html

 

查看对应的日志参考:

#可以通过命令查看目前站点的错误日志和访问日志路径

[root@root ~]# grep '^[[:space:]]*\(ErrorLog\|CustomLog\)'  /etc/httpd/conf/httpd.conf
ErrorLog "logs/error_log"
CustomLog "logs/access_log" combined

#需要查看指定文件下有多少中访问日志格式,可以编写个脚本或者使用sed来实现。

[root@root ~]# vim ./subline.sh 
#!/bin/bash
#
subline() {
   path=$1              #接收定义有日志格式模块的配置文件
   start=$2             #标签开头
   end=$3               #标签结尾
   while read line; do        #执行循环对指定的配置文件逐行读取
       #如果此行调用日志模块其实标签,则设置标记变量i=0
       if `echo $line | grep "$start"  &> /dev/null`; then      
           i=0;
       fi
       #如果i被赋值,则执行
       if [ -n "$i" ] ;then
           echo $line | grep '^[^#]' | grep -v '^[[:space:]]$'   #输出非注释配置
           if `echo $line | grep "$end" &> /dev/null`; then      #此行为结尾则i为空
               i='';
           fi
       fi
   done < $path
}
start_reg=' 
    

说明:上面的函数通过指定一个文件,然后指定其实行和结尾行,可以进行对类似这种有开始和结束的标签的配置文件,进行指定标签内容配置的限定区间输出,类似sed的匹配行与行之间的内容功能。

#执行脚本,会列出/etc/httpd/conf/httpd.conf下的所有日志格式配置

[root@root ~]# ./subline.sh 

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

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio

解析:因为/etc/httpd/conf/httpd.conf默认只有一个日志模块格式配置,所以只会查出单个,但是如果有多个,会全部列出。

 

日志查看和处理: ????  未完,持续......