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
<h1>Main Server</h1>

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/data/web/www"
<Directory "/data/web/www/">
    AllowOverride None
    Allow from all
</Directory>

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

成功访问网站


图片.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

<h1>Main Server</h1>
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
<h1>www.test1.com</h1>
<h2>1111111111</h2>
[root@localhost ~]# vim /data/web/test2/index.html
<h1>www.test2.com</h1>
<h2>2222222222</h2>
#给两个网站添加首页

[root@localhost ~]# ip addr add 192.168.10.110/24 dev ens33
#网卡上增加一个ip
[root@localhost ~]# ip a l  
。。。。。。
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> 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
<VirtualHost 192.168.10.11:80>
        ServerName www.test1.com  #网站不是按照这里来区分,添加只是标准做法
        DocumentRoot "/data/web/test1"  #网站目录路径
        <Directory "/data/web/test1">  #httpd2.4要对目录授权才能访问
                Options None  #不允许返回目录信息
                AllowOverride None  #不允许覆盖配置
                Require all granted  #允许所有人来访问
        </Directory>
        CustomLog "logs/test1_access_log"   combined  #日志文件路径
</VirtualHost>

[root@localhost ~]# vim /etc/httpd/conf.d/test2.conf
<VirtualHost 192.168.10.110:80>
        ServerName www.test2.com
        DocumentRoot "/data/web/test2"
        <Directory "/data/web/test2">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/test2_access_log"   combined
</VirtualHost>

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

用浏览器访问两个网站IP


图片.png

图片.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
<VirtualHost 192.168.10.11:10080>
        ServerName www.test2.com
        DocumentRoot "/data/web/test2"
        <Directory "/data/web/test2">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/test2_access_log"   combined
</VirtualHost>

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

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


图片.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
<VirtualHost *:80>  #把ip替换成*号
        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        <Directory "/data/web/test1">
                Options None
                AllowOverride None
                Require all granted
        </Directory>
        CustomLog "logs/test1_access_log"   combined
</VirtualHost>

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

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

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


图片.png

图片.png
图片.png

图片.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
<VirtualHost 192.168.10.11:80>
        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        <Directory "/data/web/test1">
                <Requireall>
                        Require not ip 192.168.10.10  #禁止此IP访问
                        Require ip 192.168  #除上面此网段的都可以访问
                </Requireall>
        </Directory>
        CustomLog "logs/test1_access_log"   combined
</VirtualHost>
图片.png

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

[root@localhost ~]# curl http://192.168.10.11/index.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /index.html
on this server.</p>
</body></html>
配置网站下的图片文件目录
[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
<VirtualHost 192.168.10.11:80>
        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        <Directory "/data/web/test1">
                Options Indexes FollowSymLinks #路径下没有index页面,就显示目录
                Require all granted
        </Directory>
        CustomLog "logs/test1_access_log"   combined
</VirtualHost>
[root@localhost ~]# systemctl restart httpd

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


图片.png

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

[root@localhost ~]# systemctl restart httpd
<VirtualHost 192.168.10.11:80>
        ServerName www.test1.com
        DocumentRoot "/data/web/test1"
        <Directory "/data/web/test1">
                Options FollowSymLinks
                Require all granted
        </Directory>
        CustomLog "logs/test1_access_log"   combined
</VirtualHost>
[root@localhost ~]# systemctl restart httpd
图片.png

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


图片.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
<h1>admin Area</h1>
#admin目录创建一个首页

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

[root@localhost ~]# httpd -t
Syntax OK
[root@localhost ~]# systemctl restart httpd.service

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


图片.png

图片.png

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

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

[root@localhost ~]# vim /etc/httpd/conf.d/admin.conf 
<Directory "/data/web/test1/admin" >
        Options None
        AllowOverride None
        AuthType basic
        AuthName "Admin ......"
        AuthUserFile "/etc/httpd/conf.d/.htpasswd"  
        AuthGroupFile "/etc/httpd/conf.d/.htgroup"   #增加组文件路径 
        Require group animals  #添加只允许animals组中的成员才能登录
</Directory>

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

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


图片.png

图片.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容