Apache访问控制和Web虚拟主机
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache访问控制和Web虚拟主机相关的知识,希望对你有一定的参考价值。
一、httpd服务的访问控制
- 可对特定的网站目录添加访问授权,对客户机地址限制、用户授权做限制;两种控制方式都应用与httpd.conf配置文件中的目录区域<Directory 目录位置>...</Directory>范围内
1.客户机地址限制
- 通过配置项Order、Deny from、Allow from,根据客户机的主机名或IP地址决定是否允许客户端访问;其中Order配置项用于设置限制顺序,Deny from和Allow from用于设置具体限制内容
Apache-2.2.x
- Allow,deny:先“允许”后“拒绝”,默认拒绝所有未明确允许的客户机地址
-
Deny,allow:先“拒绝”后“允许”,默认允许所有未明确拒绝的客户机地址
-
使用Allow from和Deny from配置项时,需要设置客户机地址以构成完整的限制策略,地址的形式可以是IP地址、网络地址、主机名或域名,使用名称“all”时表示任意地址。限制策略格式如下
Deny from address1 address2 ...
Allow from address1 address2 ... - 通常情况,网站服务器对所有客户机开放,网页文档未作任何限制,因此使用的是“Allow from all”的策略,表示允许从任何客户机访问,策略格式如下
<Directory “/usr/local/httpd/htdocs”> .. //省略部分内容 Order Allow,deny Allow from all </Directory>
- 需要使用“仅允许”的限制策略时,应将处理顺序改为“allow,deny”,并明确设置允许策略,只允许一部分主机访问。例如,若只希望IP地址为173.17.17.173的网管工作用机能够访问AWStats系统,则针对AWStats系统的目录区域做如下设置
<Directory “/usr/local/awstats/wwwroot:”> ... //省略部分内容 Order allow,deny //先允许后拒绝 Allow from 173.17.17.173 //只允许此IP访问 </Directory>
- 反之,需要使用“仅拒绝”的限制策略时,应将处理顺序改为“deny,allow”,并明确设置拒绝策略,只禁止一部分主机访问。例如,若只希望禁用来自两个内网网段192.168.0.0/24和192.168.1.0/24的主机访问,但允许其它任何主机访问,可以使用如下限制策略
<Directory “/usr/local/awstats/wwwroot”> ... //省略部分内容 Order deny,allow Deny from 192.168.0.0/24 192.168.1.0/24 </Directory>
当通过未被授权的客户机访问网站目录时,将会被拒绝访问
Apache-2.4.x
(1)允许所有
Require all granted
(2)拒绝所有
Require all denied
(3)只允许指定IP访问
Require ip <允许的IP地址>
(4)只拒绝指定IP访问
<RequireAll>
Require all granted
Require not ip xxx
</RequireAll>
例:
- 允许所有人访问/usr/local/httpd/htdocs/
<Directory “/usr/local/httpd/htdocs”>
Require all granted
</Directory> - 拒绝所有人访问/usr/local/httpd/htdocs/
<Directory “/usr/local/httpd/htdocs”>
Require all denied
</Directory> - 只允许192.168.1.10主机访问/usr/local/httpd/htdocs/,相当于白名单
<Directory “/usr/local/httpd/htdocs”>
Require ip 192.168.1.10
</Directory> - 拒绝192.168.1.10主机访问/usr/local/httpd/htdocs/,其余主机全部允许,相当于黑名单
<Directory “/usr/local/httpd/htdocs”>
<RequireAll>
Require all granted
Require not ip 192.168.1.10
</RequireAll>
</Directory>
2.用户授权限制
- httpd服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证需要在编译httpd之前添加“--enable-auth-digest”选项,但并不是所有的浏览器都支持摘要认证。而基本认证是httpd服务的基本功能,不需要预先配置特别选项
- 基于用户的访问控制包括认证(Authentication)和授权(Authorization)两个过程。认证是指识别用户身份的过程,授权是指允许特定用户访问特点目录区域的过程
(1)创建用户认证数据文件
- httpd的基本认证通过校验用户名、密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
- 使用htpasswd时,必须指定用户数据文件的位置,添加“-c”选项表示新建立此文件。例如,执行以下操作可以新建数据文件/usr/local/httpd/conf/.awspwd,其中包含一个名为webadmin的用户信息
cd /usr/local/httpd //进入httpd安装目录方便执行命令
bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin //创建用户账号webadmin(只能用于登录web界面)
cat /usr/local/httpd/conf/.awspwd //查看用户账号数据文件
- 若省略“-c”选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。例如,需要向.awspwd数据文件中添加一个新用户tsengyia时,可以执行以下操作
bin/htpasswd /usr/local/httpd/conf/.awspwd tsengyia cat /usr/local/httpd/conf/.awspwd
(2)添加用户授权配置
- 有授权用户账号以后,还需修改httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置允许哪些用户访问。例如,若只允许.awspwd数据文件中的任一用户访问AWStats系统,可以执行以下操作
vim /usr/local/httpd/conf/httpd.conf <Directory "/usr/local/awstats/wwwroot"> ··· AuthName "AWStats Directory" AuthType Basic AuthUserFile /usr/local/httpd/conf/.awspwd require valid-user </Directory>
注释
AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示
AuthType:设置认证的类型,Basic表示基本认证
AuthUserFile:设置用户保存用户账号、密码的认证文件路径
required valid-user:要求只有认证文件中的合法用户才能访问。其中valid-user表示所有合法用户,若只授权给单个用户,可改为指定的用户名(如require user webadmin)
(3)验证用户访问授权 - 再次访问AWStats系统时,浏览器会首先弹出认证对话框。只有输入正确的用户名和密码后才能查看日志分析报告,否则将拒绝访问
二、构建虚拟Web主机
- 虚拟Web主机指的是在同一台服务器中运行多个Web站点。其中的每个站点实际上并不独立占用整个服务器,因此被称为“虚拟Web主机”,通过虚拟Web主机服务可以充分利用服务器的硬件资源,降低网络构建及运行程序
- 基于域名:为每个虚拟主机使用不同的域名,但是对应IP地址相同;同IP、同端口、不同域名
- 基于IP地址:为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同,需要为服务器配置多个网络接口;不同IP、同端口、不同域名
- 基于端口:不使用域名、IP来区分不同站点内容,使用不同TCP端口号;同域名、同IP、不同端口
1.基于域名的虚拟主机
(1)为虚拟主机提供域名解析(搭建DNS,测试使用)
yum -y install bind bindg -chroot bind-utils //安装bind软件包
vim /etc/named.conf //修改named服务主配置文件
cp /var/named/named.empty /var/named/hiahia.org.zone //拷贝模板文件
vim /var/named/hiahia.org.zone //编辑正向解析文件
chown named:named /var/named/hiahia.org.zone //设置文件属主和属组为named
/etc/init.d/named start && 8mchkconfig --level 35 named on
(2)为虚拟主机准备网页文档
每个虚拟Web主机准备网站目录及网页文档。mkdir -p /usr/local/httpd/htdocs/www mkdir -p /usr/local/httpd/htdocs/blog echo "<h1>www.xueluo.org</h1>">/usr/local/httpd/htdocs/www/index.html echo "<h1>blog.xueluo.org</h1>">/usr/local/httpd/htdocs/blog/index.html
(3)添加虚拟主机配置
- 监听地址:使用NameVirtualHost配置项指定提供虚拟主机服务的IP地址,也就是进行域名查询时各虚拟Web主机的IP地址
- 虚拟主机区域:使用<VirtualHost 监听地址>...</VirtualHost>区域配置,为每一个虚拟Web主机建立独立的配置内容。其中至少应包含虚拟主机的网站名称、网页根目录的配置项
- 目录权限:使用<Directory 目录位置>...</Directory>区域配置,为每一个虚拟Web主机的网站目录设置访问权限;目录访问可继承其父目录的授权许可
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf <Directory "/usr/local/httpd/htdocs/"> Order allow,deny Allow from all (httpd2.4.x这里的两行换成Require all granted) </Directory> <VirtualHost 192.168.1.151> DocumentRoot "/usr/local/httpd/htdocs/www" ServerName www.hiahia.com ErrorLog "logs/www.hiahia.com_error_log" CustomLog "logs/www.hiahia.com_access_log" common </VirtualHost> <VirtualHost 192.168.1.151> DocumentRoot "/usr/local/httpd/htdocs/blog" ServerName blog.hiahia.com ErrorLog "logs/blog.hiahia.com_error_log" CustomLog "logs/blog.hiahia.com_access_log" common </VirtualHost>
vim /usr/local/httpd/conf/httpd.conf Include conf/extra/httpd-vhosts.conf //删除开头#号,读取虚拟主机配置文件
/etc/init.d/httpd restart
(4)客户机中访问虚拟Web主机
2.基于IP地址的虚拟主机
(1)添加虚拟接口IP或新增加网卡配置IP地址
(2)添加虚拟主机配置
vim /var/named/xueluo.org.zone //修改dns正向解析文件,更改其中一个IP地址为新增网卡IP
/etc/init.d/named restart //重启namd服务
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/httpd/htdocs/">
Order allow,deny
Allow from all
(httpd2.4.x这里的两行换成Require all granted)
</Directory>
<VirtualHost 192.168.1.151>
DocumentRoot "/usr/local/httpd/htdocs/www"
ServerName www.hiahia.com
ErrorLog "logs/www.hiahia.com_error_log"
CustomLog "logs/www.hiahia.com_access_log" common
</VirtualHost>
<VirtualHost 192.168.1.152>
DocumentRoot "/usr/local/httpd/htdocs/blog"
ServerName blog.hiahia.com
ErrorLog "logs/blog.hiahia.com_error_log"
CustomLog "logs/blog.hiahia.com_access_log" common
</VirtualHost>
/etc/init.d/httpd restart //重启httpd服务
(3)客户机访问虚拟Web
3.基于端口的虚拟主机
(1)添加虚拟主机配置
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/httpd/htdocs/">
Order allow,deny
Allow from all
(httpd2.4.x这里的两行换成Require all granted)
</Directory>
<VirtualHost 192.168.1.100:80>
DocumentRoot "/usr/local/httpd/htdocs/www"
ServerName www.xueluo.org
ErrorLog "logs/www.xueluo.org_error_log"
CustomLog "logs/www.xueluo.org_access_log" common
</VirtualHost>
<VirtualHost 192.168.1.200:81>
DocumentRoot "/usr/local/httpd/htdocs/blog"
ServerName blog.xueluo.org
ErrorLog "logs/blog.xueluo.org_error_log"
CustomLog "logs/blog.xueluo.org_access_log" common
</VirtualHost>
(2)加载额外配置文件,并设置监听端口
vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.1.151:999
Listen 192.168.1.152:888
/etc/init.d/httpd restart
(3)客户机访问虚拟Web
以上是关于Apache访问控制和Web虚拟主机的主要内容,如果未能解决你的问题,请参考以下文章