httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接

虚拟主机,站点访问控制,基于用户的访问控制,持久链接

3、详细描述httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例
安装httpd2.4
过程都挺正常的
可以去官网找安装包
安装httpd2.4的时候还需要注意一点,需要在官网多下载两个tar包,apr与apr-util这个是httpd运行环境相关的包,我的也是在官网找的
实验环境
系统 CentOS7
IP 192.168.253.128
httpd 版本 2.4
apr版本 1.6
apr-util版本1.6
systemctl stop firewalld
setenforce 0
cd /usr/local/src/
yum install gcc gcc-c++ gcc-devel pcre pcre-devel expat expat-devel -y
useradd -M -s /sbin/nologin apache
wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.34.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
tar -xf apr-1.6.3.tar.gz tar -xf apr-util-1.6.1.tar.gz tar -xf httpd-2.4.34.tar.gz
这时候需要注意一下 需要吧解压后的apr与apr-util放到httpd源码包的srclib目录下,并分别命名为apr与apr-util,并且./configure 要加上参数–with-included-apr,否则会报错,解决办法是通过看官方文档
mv /usr/local/src/apr-1.6.3 /usr/local/src/httpd-2.4.34/srclib/apr
mv /usr/local/src/apr-util-1.6.1 /usr/local/src/httpd-2.4.34/srclib/apr-util
cd httpd-2.4.34
./configure –prefix=/usr/local/httpd-2.4 –enable-mpms-shared=all –with-included-apr –with-pcre
make && make install
ln -sv /usr/local/httpd-2.4 /usr/local/httpd
PATH=”/usr/local/httpd/bin/:$PATH”
echo ‘PATH=”/usr/local/httpd/bin/:$PATH”‘ > /etc/profile.d/httpd.sh
虚拟主机
部署多个站点,每个站点有不同的域名和站点目录,或者不同端口,不同ip就需要虚拟主机功能,即一个http服务配置多个站点
有多种方式设置虚拟主机这里都稍微讲解一下
  • 基于域名(最重要)
  • 基于端口 一般生产环境中是内部网络
  • 基于ip
基于域名
创建两个域名
www.ice.com 站点目录为/var/www/html/www.ice.com
www.cube.com 站点目录为/var/www/html/www.cube.com
先创建两个站点目录
mkdir -pv /var/www/html/{www.ice.com,www.cube.com} echo “www.ice.com” > /var/www/html/www.ice.com/index.html echo “www.cube.com” > /var/www/html/www.cube.com/index.html
修改虚拟主机的配置文件/usr/local/httpd/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin 835311324@qq.com
DocumentRoot “/var/www/html/www.ice.com”
ServerName www.ice.com ServerAlias ice.com
ErrorLog “logs/www.ice.com-error_log”
CustomLog “logs/www.ice.com-access_log” common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin 835311324@qq.com
DocumentRoot “/var/www/html/www.cube.com”
ServerName www.cube.com ServerAlias cube.com
ErrorLog “logs/www.cube.com-error_log”
CustomLog “logs/www.cube.com-access_log” common
</VirtualHost *:80>

需要修改一下主配置文件/usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf ##吧虚拟主机的配置文件包含进来
Include conf/extra/httpd-vhosts.conf ##下面两项是设置站点目录权限,允许被访问不然会报错403权限不许可
<Directory “/var/www/html/www.ice.com”>
    Options None
    AllowOverride none
    Require all granted
</Directory>
<Directory “/var/www/html/www.cube.com”>
    Options None
    AllowOverride none
    Require all granted
</Directory>
测试一下,出现Syntax OK 即可
apachectl -t
域名没有DNS解析,需要自己修改一下/etc/hosts文件
添加下面一条记录即可
192.168.253.128 www.ice.com www.cube.com
启动httpd
httpd
测试一下
clipboard

这里可以看到已经访问到我们两个站点目录了 所以基于域名做的虚拟主机成功了。
基于端口
和基于域名很类似 就在上个实验的基础上改吧。
用2个端口 1080 和2080 端口
先创建相关的站点目录
mkdir -pv /var/www/html/{port1080,port2080}
echo “1080” >/var/www/html/port1080/index.html
echo “2080” > /var/www/html/port2080/index.html
修改虚拟主机的配置文件/usr/local/httpd/conf/extra/httpd-vhosts.conf
添加下面的部分
<VirtualHost *:1080>
ServerAdmin 835311324@qq.com
DocumentRoot “/var/www/html/port1080”
ErrorLog “logs/port1080-error_log”
CustomLog “logs/port1080-access_log” common
</VirtualHost
<VirtualHost *:2080>
ServerAdmin 835311324@qq.com
DocumentRoot “/var/www/html/port2080”
ErrorLog “logs/port2080-error_log”
CustomLog “logs/port2080-access_log” common
</VirtualHost>
修改主配置文件
添加下面行
Listen 1080
Listen 2080
<Directory “/var/www/html/port1080”>
Options None
AllowOverride none
Require all granted
</Directory>
<Directory “/var/www/html/port2080”>
Options None
AllowOverride none
Require all granted
</Directory>
检查一下配置文件然后重启httpd服务
httpd -t
httpd -k restart
clipboard
这里可以看出基于端口的虚拟主机 完成了。
基于ip
基于ip很少用,但是也说一下吧 步骤类似
创建两个虚拟ip
ip addr add 192.168.253.130/24 dev ens33
ip addr add 192.168.253.131/24 dev ens33

clipboard
创建站点目录和起始页
mkdir -pv /var/www/html/{ip131,ip130}
echo “ip131”>/var/www/html/ip131/index.html
echo “ip130”>/var/www/html/ip130/index.html
修改虚拟主机的配置文件/usr/local/httpd/conf/extra/httpd-vhosts.conf
添加下面的部分
<VirtualHost 192.168.253.131:80>
ServerAdmin 835311324@qq.com
DocumentRoot “/var/www/html/ip131”
ErrorLog “logs/ip131-error_log”
CustomLog “logs/ip131-access_log” common
</VirtualHost>
<VirtualHost 192.168.253.130:80>
ServerAdmin 835311324@qq.com
DocumentRoot “/var/www/html/ip130”
ErrorLog “logs/ip130-error_log”
CustomLog “logs/ip130-access_log” common
</VirtualHost>
主配置文件/usr/local/httpd/conf/httpd.conf添加下面几行
<Directory “/var/www/html/ip130”>
Options None
AllowOverride none
Require all granted
</Directory>
<Directory “/var/www/html/ip131”>
Options None
AllowOverride none
Require all granted
</Directory>
检查一下配置文件,重启服务
httpd -t httpd -k restart
clipboard
可以看出成功了
站点访问控制
httpd2.2和httpd2.4的站点访问控制有点不同,这里先说httpd2.4站点访问控制的方法。不同的地方会区别再说。
  • Option
可以配置在directory标签中,配置文件中,虚拟主机,.htaccess中,有以下选项
    • Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;
    • FollowSymLinks:允许跟踪符号链接文件所指向的源文件;
    • None:都不允许,常用
    • All:都允许
示例:Option Indexes
在站点目录的标签中设置Option Indexes
然后将index.html改个名,当用户访问网站找不到起始页的时候就会返回整个站点目录的结构,这个选项如果是做一些镜像站其实还可以,但是如果不是有列出站点目录结构的需求的最好None关闭。
然后我们用浏览器访问网站看一下

clipboard
示例:Option FollowSymLinks
在站点目录的标签中设置Option Options Indexes FollowSymLinks
这时候我们在站点目录新建一个目录的软链接
ln -sv /etc /usr/local/httpd/htdocs/etc
重启一下服务查看效果
也就是httpd将链接文件也返回了真实的文件,就像这种情况,主机的安全已经不复存在了。因为敏感文件都暴露的差不多了,所以没有特殊需求,最好None

clipboard
  • AllowOverride
与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;常用有以下两个
    • All:
    • None
  • Require(http2.4)
测试认证用户是否被授权提供程序授权。这个是在http2.4里才有的,一般配置在授权容器中,
示例
    • Require all granted 无条件允许访问
    • Require all denied 无条件拒绝
    • Require ip 10 172.20 192.168.2 允许某ip访问
    • Require not ip 10 172.20 192.168.3 拒绝某ip访问
    • Require method http-method [http-method] … 只允许对给定的HTTP方法访问
    • Require group group-name 允许某用户组访问
    • Require user userid [userid] … 只有命名用户才能访问资源。
  • order,allow、deny(httpd2.2)
    • Allow:控制哪些主机可以访问服务器的某个区域
格式:Allow from all|host|env=[!]env-variable [host|env=[!]env-variable]
例子:
      • Allow from 192.168.1.104 192.168.1.205 允许那些ip访问
      • Allow from 10 172.20 192.168.2 允许某些网段
      • Allow from 10.1.0.0/255.255.0.0
    • Deny:控制拒绝访问服务器的主机
格式:Deny from all|host|env=[!]env-variable [host|env=[!]env-variable] …
例如 Deny from 192.168.253.128 拒绝192.168.253.128这个ip访问
    • order:控制默认访问状态以及评估Allow和Deny评估的顺序
      • Allow,Deny,首先,Allow评估所有指令; 至少一个必须匹配,否则请求被拒绝。接下来,Deny 评估所有指令。如果匹配,则拒绝该请求。最后,默认情况下拒绝任何与指令Allow或Deny指令不匹配的请求。
      • Deny,Allow首先,Deny评估所有指令; 如果匹配,则拒绝该请求, 除非它也与Allow指令匹配。任何与任何Allow或Deny指令不匹配的请求都是允许的。
整体举个例子,以http2.4为例
允许192.168.253.0/24网段访问,拒绝其中的192.168.253.129主机访问
<Directory “/usr/local/httpd-2.4/htdocs”>
Options None
AllowOverride None
<RequireAll>
Require ip 192.168.253.0/24
Require not ip 192.168.253.129
</RequireAll>
</Directory>
重启服务测试
再192.168.253.128主机

重启服务测试
再192.168.253.128主机
clipboard
再192.168.253.129主机上测试

clipboard

基于用户的访问控制
实验环境
IP 192.168.253.128
系统 CentOS7
httpd版本2.4
先在主配置文件/usr/local/httpd/conf/httpd.conf修改
<Directory “/usr/local/httpd-2.4/htdocs”>
Options None
AllowOverride None
AuthType Basic
AuthName “Admin” ##提示字符串
AuthUserFile “/usr/local/httpd/htdocs/.user” ##认证的配置文件,等等我们会创建
Require user hal ##允许用户hal访问
</Directory>
创建/usr/local/httpd/htdocs/.user文件
使用专用命令完成此类文件的创建及用户管理
格式:htpasswd [options] /PATH/TO/HTTPD_PASSWD_FILE username
  • -c:自动创建此处指定的文件,因此,仅应该在此文件不存在时使用;
  • -m:md5格式加密
  • -s: sha格式加密
  • -D:删除指定用户

[root@www htdocs]# htpasswd -c /usr/local/httpd/htdocs/.user hal
New password:
Re-type new password:
检查配置文件,重启服务
httpd -t
httpd -k restart
测试

clipboard

基于用户组的访问控制
我们假设有2个组 amdin 和user组
admin组员有ice和cube
user组内有hal
这时候 我们允许admin访问但是不允许user组访问
修改一下配置文件/usr/local/httpd/conf/httpd.conf
<Directory “/usr/local/httpd-2.4/htdocs”>
Options None
AllowOverride None
AuthType Basic
AuthName “Admin”
AuthUserFile “/usr/local/httpd/htdocs/.user”
AuthGroupFile “/usr/local/httpd/htdocs/.group”
Require group admin
</Directory>
创建用户账号和组账号文件;
格式为:GRP_NAME: username1 username2 …每行定义一个组
创建后的文件如下

[root@www htdocs]# cat /usr/local/httpd/htdocs/.group
admin:ice cube
user:hal
创建ice和cube用户 上一个实验我们已经创建了 hal用户了就不用重复创建了。因为我们现在是添加用户所以不用-c
[root@www htdocs]# htpasswd /usr/local/httpd/htdocs/.user ice
New password:
Re-type new password:
Adding password for user ice
[root@www htdocs]# htpasswd /usr/local/httpd/htdocs/.user cube
New password:
Re-type new password:
Adding password for user cube

现在查看一下/usr/local/httpd/htdocs/.user文件
[root@www htdocs]# cat /usr/local/httpd/htdocs/.user hal:$apr1$UK1I0KDQ$GEKjDw5WX6H5UBqHP20P0/ ice:$apr1$2Mnv.mAd$Klyabjl4mu/BLxrZRw5130 cube:$apr1$kc6vlxgz$.eH3KJ4alapHG69JEYDs0.
检查一下配置文件重启服务
httpd -t httpd -k restart
我们现在用ice用户登陆,再用hal用户登陆。如果ice可以登陆而hal不能登陆,则试验成功
用hal登陆 不能登陆

用ice登陆 成功 测试成功

长连接KeepAlive
httpd的持久链接主要依靠KeepAlive
有以下几个相关的指令‘
  • KeepAlive On|Off #是否开启KeepAlive长连接
  • KeepAliveTimeout 15 #长连接多久算是超时,超时之后自动断开长连接
  • MaxKeepAliveRequests 100 #长连接最多接受多少个请求。请求数量大于改值则自动断开。
在主配置文件/usr/local/httpd/conf/httpd.conf添加
KeepAlive On|Off KeepAliveTimeout 15 MaxKeepAliveRequests 100
检查一下配置文件并重启
httpd -t
httpd -k restart
用telnet模拟请求 测试一下是否超时会断开

httpd -t
httpd -k restart
用telnet模拟请求 测试一下是否超时会断开
yum install telnet -y
[root@www ~]# telnet 192.168.253.128 80 ##访问的服务器IP 端口
Trying 192.168.253.128…
Connected to 192.168.253.128.
Escape character is ‘^]’.
GET /index.html HTTP/1.1 ##格式 请求方法 URL http协议版本
Host:192.168.253.128 ##本地主机IP
HTTP/1.1 200 OK
Date: Thu, 26 Jul 2018 15:03:22 GMT
Server: Apache/2.4.34 (Unix)
Last-Modified: Thu, 26 Jul 2018 11:08:09 GMT
ETag: “c-571e502aa9cbd”
Accept-Ranges: bytes
Content-Length: 12
Content-Type: text/html
www.ice.com
Connection closed by foreign host

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/112328

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code