Linux之Web服务(2)Httpd服务配置之二html
前言web
在上一篇经过一些简单的案例或说明来介绍了部分关于Httpd2.4中httpd.conf配置文件中的配置选项及对应的功能。主要是对访问控制和在处理对指定目录或文件进行访问控制的一些安全问题性的处理。可是一直没有提到访问控制的具体讲解,本篇列出访问控制的具体使用选项和功能,以及其它高级配置。正则表达式
一、Httpd2.4 文档访问受权具体参数vim
前提:文档访问受权选项配置只适合在如下标签中生效:浏览器
<Directory > <FIles> <Location> <LocationMatch>安全
容许全部地址访问:Require all grantedbash
拒绝全部地址访问:Require all denied服务器
注意:要限制制度访问的主机或IP须要配置RequireAll标签,并在标签里添加控制指令网络
<RequireAll>ide
</RequireAll>
<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 #完整主机名
二、别名路径:
提示:使用别名要在<ifModule alias_module>标签中添加对应的别名Alias指令,并在其标签下嵌套<Directory指令目录>设置访问控制,Alias 指定定义的别名才会生效。实例如:
指令格式:Alias /URL/ “/PATH/TO/SOME_DIR/”
如:
Alias /myweb/ “/web/” #当访问站点/myweb/目录时为访问文件系统的/web/目录 Alias /xx “/test/xx” #当访问站点/xx目录时,访问的为文件系统的/test/xx目录
注意:若是设置的文件系统的目录后面最后添加了/及,好比aa/则Alias的别名指定的URL也要添加斜杠如:my_aa/。
三、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" <Directory "/usr/share/httpd/manual"> Options Indexes AllowOverride None Require all granted </Directory>
解析:这里的配置就是配置了一个决对路径Directory标签,而且和一个支持扩展正则表达式的一个AliasMatch别名标签。访问URLs为 http://站点地址或域名/manual/为查看文档界面的首页。
#可使用浏览器来访问,最好使用图形界面的浏览器
四、查看当前站点状态server-status
说明:当配置好了服务以后想要知道当前Web站点服务的一些状态信息,能够经过加载并配置server-status模块来在查看当前web网络状态。
具体操做:
#查看当前是否有加载server-status模块
[root@root ~]# httpd -M | grep '\<status' status_module (shared)
#固然查看全部(多个用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 <Location /status> SetHandler server-status <RequireAll> Require ip 10.1.249.223 Require all denied </RequireAll> </Location>
#添加完成后,检查语法
[root@root ~]# httpd -t Syntax OK
#而后重载Httpd服务便可
[root@root ~]# systemctl reload httpd.service
#在浏览器打开
[root@root ~]# links http://10.1.249.223/status
五、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文件提供了关于这两个指令的几个例子;
2、LogFormat指令格式为格式指定一个名字(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='<IfModule log_config' #设置为调用日志模块标签开头 end_reg='</IfModule>' #设置为调用日志模块标签结尾 subline "/etc/httpd/conf/httpd.conf" "$start_reg" "$end_reg" #调用函数
说明:上面的函数经过指定一个文件,而后指定其实行和结尾行,能够进行对相似这种有开始和结束的标签的配置文件,进行指定标签内容配置的限定区间输出,相似sed的匹配行与行之间的内容功能。
#执行脚本,会列出/etc/httpd/conf/httpd.conf下的全部日志格式配置
[root@root ~]# ./subline.sh <IfModule log_config_module> LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined LogFormat "%h %l %u %t "%r" %>s %b" common <IfModule logio_module> LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %I %O" combinedio </IfModule>
解析:由于/etc/httpd/conf/httpd.conf默认只有一个日志模块格式配置,因此只会查出单个,可是若是有多个,会所有列出。
日志查看和处理: ???? 未完,持续......