httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例

1.使用CentOS7来安装httpd

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

[root@localhost ~]# mkdir -pv /data/web/www
[root@localhost ~]# vim /data/web/www/index.html

Main Server

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf DocumentRoot "/data/web/www" AllowOverride None Allow from all [root@localhost ~]# systemctl start httpd.service

成功访问网站


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第1张图片
图片.png

2.持久链接

什么是持久链接

http协议是无状态的,每一次事务是由一次请求和相应报文组成,http又是基于tcp协议的,每次建立链接都要三次握手,四次放开,每次请求后都断开非常消耗资源,所以链接以后持续获取资源不断开,一直响应到把需要获取的资源都获取了为止,叫持久链接。结束持久链接有两个条件,设置长链接的时间和最多链接多少个资源,达到了即断开。

配置持久链接
[root@localhost ~]# vim /etc/httpd/conf.d/keepalive.conf
KeepAlive On
KeepAliveTimeout 30
MaxKeepAliveRequests 100

[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# systemctl restart httpd.service
使用telnet命令测试持久链接
[root@localhost ~]# telnet 192.168.10.11 80
Trying 192.168.10.11...
Connected to 192.168.10.11.
Escape character is '^]'.
GET /index.html HTTP/1.1  #输入
Host:192.168.10.11  #输入

HTTP/1.1 200 OK
Date: Thu, 07 Jun 2018 07:14:37 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 07 Jun 2018 05:44:13 GMT
ETag: "15-56e06c5ed718a"
Accept-Ranges: bytes
Content-Length: 21
Content-Type: text/html; charset=UTF-8

Main Server

Connection closed by foreign host. #等待30秒出现这条信息

3.httpd虚拟主机

什么是httpd虚拟主机

httpd有两类主机,一个叫做中心主机,即主机上只配置一个网站。另一个叫虚拟主机,即在httpd服务器上配置多个虚拟主机,实现一个服务器配置多个网站的服务,其实就是访问同一个服务器上的不同目录。在httpd2.2版本中中心主机和虚拟主机不能同时配置,必须注释掉一个,才能使用另一个。在httpd2.4中启动虚拟主机时中心主机会自动失效。

虚拟主机有三种方式配置多个网站:

  1. 用ip来区分网站
  2. 用端口来区分网站
  3. 用主机名来区分网站
基于IP来配置网站

虚拟主机配置两个网站
www.test1.com 192.168.10.11:80
www.test2.com 192.168.10.110:80

创建首页和添加IP

[root@localhost ~]# mkdir -pv /data/web/{test1,test2}

[root@localhost ~]# vim /data/web/test1/index.html

www.test1.com

1111111111

[root@localhost ~]# vim /data/web/test2/index.html

www.test2.com

2222222222

#给两个网站添加首页 [root@localhost ~]# ip addr add 192.168.10.110/24 dev ens33 #网卡上增加一个ip [root@localhost ~]# ip a l 。。。。。。 2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:9d:a6:14 brd ff:ff:ff:ff:ff:ff inet 192.168.10.11/24 brd 192.168.10.255 scope global ens33 valid_lft forever preferred_lft forever inet 192.168.10.110/24 scope global secondary ens33 valid_lft forever preferred_lft forever inet6 fe80::ab0:a9:3e59:622a/64 scope link valid_lft forever preferred_lft forever #查看网卡上已配置成功两个ip

以模块化的方式对两个网站进行环境配置

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

        ServerName www.test1.com  #网站不是按照这里来区分,添加只是标准做法
        DocumentRoot "/data/web/test1"  #网站目录路径
          #httpd2.4要对目录授权才能访问
                Options None  #不允许返回目录信息
                AllowOverride None  #不允许覆盖配置
                Require all granted  #允许所有人来访问
        
        CustomLog "logs/test1_access_log"   combined  #日志文件路径


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

        ServerName www.test2.com
        DocumentRoot "/data/web/test2"
        
                Options None
                AllowOverride None
                Require all granted
        
        CustomLog "logs/test2_access_log"   combined


[root@localhost ~]# httpd -t  #检测配置文件语法
Syntax OK
[root@localhost ~]# systemctl restart httpd.service

用浏览器访问两个网站IP


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第2张图片
图片.png

httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第3张图片
图片.png
基于端口来配置网站

虚拟主机配置两个网站
www.test1.com 192.168.10.11:80
www.test2.com 192.168.10.11:10080

基于之前的配置修改第二个网站的配置

[root@localhost ~]# vim /etc/httpd/conf.d/test2.conf
Listen 10080

        ServerName www.test2.com
        DocumentRoot "/data/web/test2"
        
                Options None
                AllowOverride None
                Require all granted
        
        CustomLog "logs/test2_access_log"   combined


[root@localhost ~]# ip addr delete 192.168.10.110/24 dev ens33
#删除网卡中的ip192.168.10.110
[root@localhost ~]# systemctl restart httpd.service

浏览器访问和第一个站ip相同,但端口不同的第二个站


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第4张图片
图片.png
基于主机名来配置网站

配置两个网站,域名不同,IP和端口相同
www.test1.com 192.168.10.11:80
www.test2.com 192.168.10.11:80

设置两个网站的配置

[root@localhost ~]# vim /etc/httpd/conf.d/test1.conf
  #把ip替换成*号
        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        
                Options None
                AllowOverride None
                Require all granted
        
        CustomLog "logs/test1_access_log"   combined


[root@localhost ~]# vim /etc/httpd/conf.d/test2.conf
  #把ip替换成*号
        ServerName www.test2.com
        DocumentRoot "/data/web/test2"
        
                Options None
                AllowOverride None
                Require all granted
        
        CustomLog "logs/test2_access_log"   combined


[root@localhost ~]# systemctl restart httpd.service

实际应用中由dns域名服务器来对这两个网站提供解析服务,这里我修改本机的hosts文件达到访问域名指向IP的功能。


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第5张图片
图片.png

httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第6张图片
图片.png
httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第7张图片
图片.png

httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第8张图片
图片.png

4.站点访问控制

httpd会对站点资源映射的url页面或目录路径下的资源做访问控制

  • 在文件系统之上来做控制
  • 在url路径上来做控制

常用的访问控制方式:

  • 客户机地址限制
  • 用户授权限制

Order配置项,定义控制顺序

  • 先允许后拒绝,默认拒绝所有:Order allow,deny
  • 先拒绝后允许,默认允许所有:Order deny,allow

Allow、Deny配置项,设置允许或拒绝的地址

  • Deny from address1 address2 …
  • Allow from address1 address2 …
配置网站允许192.168段访问,禁止192.168.10.10访问
[root@localhost ~]# vim /etc/httpd/conf.d/test1.conf

        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        
                
                        Require not ip 192.168.10.10  #禁止此IP访问
                        Require ip 192.168  #除上面此网段的都可以访问
                
        
        CustomLog "logs/test1_access_log"   combined

httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第9张图片
图片.png

在192.168.10.10上打开网页显示403错误,拒绝访问

[root@localhost ~]# curl http://192.168.10.11/index.html


403 Forbidden

Forbidden

You don't have permission to access /index.html on this server.

配置网站下的图片文件目录
[root@localhost ~]# mkdir /data/web/test1/images
[root@localhost ~]# find /usr/share/ -iname "*.jpg" -exec cp {} /data/web/test1/images/ \;
[root@localhost ~]# ls /data/web/test1/images/
2560x1600.jpg  background.jpg  day.jpg  default.jpg  morning.jpg  night.jpg

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

        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        
                Options Indexes FollowSymLinks #路径下没有index页面,就显示目录
                Require all granted
        
        CustomLog "logs/test1_access_log"   combined

[root@localhost ~]# systemctl restart httpd

此时浏览网站图片路径出现


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第10张图片
图片.png

修改配置文件禁止图片路径以目录显示

[root@localhost ~]# systemctl restart httpd

        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        
                Options FollowSymLinks
                Require all granted
        
        CustomLog "logs/test1_access_log"   combined

[root@localhost ~]# systemctl restart httpd
httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第11张图片
图片.png

此时图片目录不能显示,但是图片可以正常浏览


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第12张图片
图片.png

5.基于用户的访问控制

上面介绍的基于IP地址来做访问控制其实风险很大,也可以用一种更安全的http内置的功能认证来实现基于用户的访问控制,无论任何IP访问特定的资源都要提供账号的密码,登录后才能访问。
认证的方式有两种,一种是协议认证,一种是表单认证,大多数用的都是表单认证,下面叙述一个表单认证的实例。

创建用户认证数据文件并添加用户

[root@localhost ~]# htpasswd -c /tmp/test.users tom
New password:     #输入密码
Re-type new password:   #确认密码
Adding password for user tom

[root@localhost ~]# htpasswd /tmp/test.users jerry
New password: 
Re-type new password: 
Adding password for user jerry

[root@localhost ~]# htpasswd -b -m /tmp/test.users lsh 112233
#创建lsh用户,112233密码,密码用md5加密

[root@localhost ~]# cat /tmp/test.users 
tom:$apr1$CN5Uyv5I$psYF4KyTFAEg0r6VnPlxc0
jerry:$apr1$OjXiFcgl$YsP2VnBEDr0ISVVNWwr14/
lsh:$apr1$FmpnCw7U$j44TAvc0kg1T1cYMUl3XA1

[root@localhost ~]# mv /tmp/test.users /etc/httpd/conf.d/.htpasswd
#拷贝密码文件到httpd配置目录中并设置成隐藏文件

[root@localhost ~]# mkdir /data/web/test1/admin
#创建一个需要登录才能访问的目录

[root@localhost ~]# vim /data/web/test1/admin/index.html

admin Area

#admin目录创建一个首页 [root@localhost ~]# vim /etc/httpd/conf.d/admin.conf Options None #不允许目录显示 AllowOverride None #不允许覆盖配置 AuthType basic #明文类型 AuthName "Admin ......" #用户提示信息 AuthUserFile "/etc/httpd/conf.d/.htpasswd" #账户密码文件路径 Require user jerry lsh #只有jerry和lsh账号才能访问这个目录 #Require valid-user #允许所有用户都能登录,注释掉了此句 [root@localhost ~]# httpd -t Syntax OK [root@localhost ~]# systemctl restart httpd.service

访问网站的admin目录需要先验证,验证成功后才能访问


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第13张图片
图片.png

httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第14张图片
图片.png

还可以把验证用户放在组中,然后对整个组授权验证,以方便管理

[root@localhost ~]# vim /etc/httpd/conf.d/.htgroup
animals:tom jerry

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

        Options None
        AllowOverride None
        AuthType basic
        AuthName "Admin ......"
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"  
        AuthGroupFile "/etc/httpd/conf.d/.htgroup"   #增加组文件路径 
        Require group animals  #添加只允许animals组中的成员才能登录


[root@localhost ~]# systemctl restart httpd.service

输入animals组中的用户,验证通过后成功访问


httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第15张图片
图片.png

httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例_第16张图片
图片.png

你可能感兴趣的:(httpd虚拟主机、站点访问控制、基于用户的访问控制、持久链接等应用配置实例)