设为首页 收藏本站
查看: 2214|回复: 0

[经验分享] Linux运维实战之Apache服务器的高级配置(虚拟主机、status)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-10 08:51:33 | 显示全部楼层 |阅读模式
Apache服务的配置分为三段:
1、全局配置(the 'global environment'):对主服务器或虚拟机都有效,且有些功能是服务器自身工作属性;
2、主服务器(main server):主站属性;
3、虚拟主机(Virtual Hosts):虚拟主机及属性定义
上次博文我们主要讨论了前两段配置,这次博文我们就来重点说说第三段(虚拟主机)的配置及Apache服务器的一些高级配置
【本次博文的主要内容】
  • httpd的虚拟主机
  • httpd的statues
  • curl命令的使用
  • httpd的压缩功能

一、httpd的虚拟主机:
1、什么是虚拟主机:
虚拟主机是在同一台主机中搭建基于不同主机名、端口号及基于不同 IP 的多个网站服务的技术,可以为运行在同一物理机器上的各个网站指配不同的 IP 和端口, 也可让多个网站拥有不同的主机名
虚拟主机的类型:
一共有三种类型的虚拟主机:
  • 基于端口虚拟主机:一个IP、一个主机名对应多个端口
  • 基于IP虚拟主机:一个主机名、同一个端口对应多个IP地址
  • 基于主机名(FQDN)的虚拟主机:一个IP地址、一个端口对应多个主机名
【实验环境】:
一台CentOS6.4虚拟机作为web服务器兼DNS服务器,一台windows 7的虚拟机做客户端规划如下:
域名:webtest.com      192.168.1.0/24
DNS:ns1.webtest.com        192.168.1.58     CentOS6.4
Web:httpd.webtest.com(别名:apache.webtest.com)   192.168.1.58   CentOS6.4
win7客户端:192.168.1.201    DNS指向192.168.1.58
2.1:DNS和Apache2.2的基本配置:
2.1.1:在192.168.1.58的CentOS虚拟机上安装并配置好DNS服务,配置文件的内容如下图所示:
wKiom1V2-O3QTabAAAA0UY8XGjw874.jpg
区域解析文件webtest.com.zone的内容如下图所示:
wKiom1V2-O_ybhsKAACZa_WjCII594.jpg
说明:DNS的配置参考我前面的博文,这里不再赘述(参考博文:http://www.iyunv.com/thread-40070-1-1.html)。
2.1.2:在192.168.1.58的CentOS虚拟机上通过yum安装好httpd2.2,做好基本配置并在DocumentRoot目录下创建好默认的index.html文件(Apache2.2的基本配置参见博文:http://www.iyunv.com/thread-73317-1-1.html
wKiom1V2-PGRlofTAAA89pTbjnY141.jpg
2.1.3:在win7虚拟机上配置好网络,特别注意将DNS指向我们配置好的DNS服务器(192.168.1.58):
wKiom1V2-PTwThO1AAGBuJPP3zQ721.jpg
2.1.4:在win7客户端的浏览器中输入相应网址测试两台web服务器及DNS的配置结果:
直接输入Apache服务器的IP地址的访问结果:
wKiom1V2-PfQD0w6AACukUE2JEI178.jpg
输入网址的访问结果:
wKiom1V2-PmDU7grAADcwVZuMMU534.jpg
上面的网址即为我们DNS里设置的web服务器的主机A记录,因此可以看到DNS和Web服务工作正常哈。
2.2:配置虚拟主机:
2.2.1:配置虚拟主机的前提条件:
虚拟主机与主服务器不能并存,因此需要先关闭主服务器,即找到主服务器段的DocumentRoot,将其注释掉:
wKiom1V2-PryowNxAAAlDUk-Q1A710.jpg
然后用一个容器类指令来定义虚拟主机:
1
2
3
4
5

    ServerName
    DocumentRoot ""

#说明:ServerName和DocumentRoot就是一个虚拟主机最基本的两个配置,但可以为每个虚拟主机定义更多的属性:日志、用户访问控制等等



2.2.2:配置基于端口的虚拟主机:
1、在Apache2.2上的配置如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#(1)找到httpd.conf文件中虚拟主机段,做如下配置:

     ServerName  www.80.com          #不是根据主机名来定义,因此此处可任意写
     DocumentRoot "/website/host1"   #80端口的虚拟主机网站根目录设置为此处   


     ServerName  www.8080.com
     DocumentRoot "/website/host2"   #8080端口的虚拟主机网站根目录设置为此处

#(2)配置监听端口(同时监听80、8080端口):
Listen 80
Listen 8080
#(3)保存退出并检查语法:
[iyunv@Centos ~]# httpd -t
Warning: DocumentRoot [/website/host1] does not exist   #网站根目录不存在啊,创建即可
Warning: DocumentRoot [/website/host2] does not exist
Syntax OK
#(4)创建网站根目录:
[iyunv@Centos ~]# mkdir -pv /website/{host1,host2}
mkdir: created directory `/website'
mkdir: created directory `/website/host1'
mkdir: created directory `/website/host2'
#(5)在上面创建的host1、host2目录下创建默认主页面:
[iyunv@Centos ~]# mkdir -pv /website/{host1,host2}
mkdir: created directory `/website'
mkdir: created directory `/website/host1'
mkdir: created directory `/website/host2'
[iyunv@Centos ~]# vim /website/host1/index.html
www.80.com
[iyunv@Centos ~]# vim /website/host2/index.html
www.8080.com
#(6)重新启动httpd服务(因为改动了端口号)
[iyunv@Centos ~]# service httpd restart



在客户端浏览器中验证配置:
wKiom1V2-Pvhn1_AAABxvfeLAmI163.jpg wKiom1V2-P3gZxaAAADT_NqKpIo371.jpg
wKioL1V2-qPy5zrEAABw4i02kaA424.jpg wKioL1V2-qajEmYAAADH9jTqLOc052.jpg
说明:基于端口号的虚拟主机配置在生产环境中用的不多,因为客户端访问Web服务器都是用的80端口,客户端并不知道所配置的其他端口是什么。
2.2.3:配置基于IP的虚拟主机:
1、在Apache2.2上的配置如下所示:
(1)为当前虚拟机添加一个地址,IP的配置结果如下:
wKioL1V2-qmR60fYAAJ7gMIZIPk172.jpg
(2)在/var/named/webtest.com.zone区域解析文件中添加一条主机A记录:
wKioL1V2-qvjWZODAACzeAjo4UM583.jpg
保存退出,并从新加载DNS的配置文件和区域解析文件;
(3)编辑httpd.conf,找到虚拟主机配置段做如下配置:
1
2
3
4
5
6
7
8

     ServerName www.a.com
     DocumentRoot "/website/host1"


     ServerName www.b.org
     DocumentRoot "/website/host2"




(4)修改host1/index.html和host2/index.html,内容如下:
wKioL1V2-q6groq5AAApobygGaI854.jpg wKiom1V2-QviR_B6AAAkuDUUGQE279.jpg
(7)重启httpd服务并在win7虚拟机的浏览器中测试结果:
wKiom1V2-RCiWCz0AAHaL9fvF7w674.jpg
可以看到,因为DNS轮询的结果,我们实现了基于IP的虚拟主机。
说明:
1、基于IP的虚拟主机配置在生产环境中用的也不多,因为公网IP日益短缺并且没分配一个公网IP就意味着多支付一笔昂贵的费用哈。
2、基于IP的虚拟主机是通过DNS的轮询机制来实现的。

2.2.4:配置基于主机名(FQDN)的虚拟主机:
正是因为上面2种虚拟主机不常用,因此有了第三种虚拟主机:基于主机名的虚拟主机
1、原理:
思考一个问题:我们在浏览器中输入域名访问网站,最终结果是域名被DNS解析成了IP地址,主机和主机之间只能通过IP来通信。如此不同的主机名对应同一个IP如何实现?
【答】:基于主机名(多个主机名对应一个IP)的虚拟主机,是通过HTTP协议中请求报文首部的Host属性来实现的哈,因此也被称作基于主机头的虚拟主机。参见下图:
wKiom1V2-RPDqDLxAAF0m67cVHs463.jpg
2、配置步骤:
(1)编辑httpd.conf,找到虚拟主机配置段做如下配置:
wKiom1V2-RSzAC0kAAEV8nz3MeA902.jpg   
说明:NameVirtualHost指令只用在Apache2.2及其以前的版本中,Apache2.4以后的版本就不需要该指令了。
(2)创建网站目录并提供默认主页面文件:
wKioL1V2-rnDCy-lAADmGoPhF1g233.jpg
(3)在DNS的区域解析库文件/var/named/webtest.com.zone中修改主机记录文件,如下图所示:
wKioL1V2-rqBnAdVAAEDy5qw-Jw977.jpg
(4)重启DNS服务和httpd服务:
wKioL1V2-rvQ0x9AAACAvMHp0WI793.jpg
(5)在win7虚拟机的浏览器中测试结果:
查看访问www.webtest.com的结果:
wKiom1V2-Rvghr6LAAB9LfceMY0953.jpg
wKiom1V2-SDTu4vGAAFu3Pl_rNs928.jpg
查看访问httpd.webtest.com的结果(用开发者工具查看消息头信息):
wKiom1V2-SXgnI0yAANWcy4u5lQ571.jpg
说明:
1、基于主机名(FQDN)的虚拟主机是用的最多的一种虚拟主机。
2、对于Apache2.2及其以前的版本,基于主机名的虚拟主机的定义需要通过NameVirtualHost指令来定义,Apache2.4以后的版本则不需要。
3、基于主机名的虚拟主机是通过HTTP协议请求报文首部的Host属性来实现的,故而也称为基于主机头的虚拟主机。

2.2.5:配置混合类型的虚拟主机:
以上三种虚拟主机可以混合使用,具体过程如下所示:
1、编辑httpd.conf文件:
(1)定义监听端口:
wKioL1V2-srj7BZ5AAAV5r36dGo516.jpg
(2)定义虚拟主机:
wKioL1V2-s3C2nrVAAG1s5UWUGY376.jpg
2、创建不同虚拟主机的网站根目录及默认页面:
wKioL1V2-s2hUGcFAAB3of6ozkA356.jpg
3、修改DNS的区域解析文件/var/named/webtest.com.zone:
wKioL1V2-s_CtBd9AAC50sPWn3g963.jpg
4、重启DNS服务和httpd服务:
wKioL1V2-s-Qr8AXAAB6iBSc13M419.jpg
5、在win7虚拟机的浏览器中测试结果:
基于主机名的虚拟主机:
wKiom1V2-S6xHw8pAAHoAuv4aRE984.jpg
基于IP的虚拟机:
wKioL1V2-teQN1YWAAEf_MxxBcU020.jpg
基于端口号的虚拟主机:
wKioL1V2-tmxyq-tAADeIGUQArU247.jpg
6、为基于端口号的虚拟主机配置基于组的访问控制:
每个虚拟主机的配置互不影响,可以单独为指定的虚拟主机单独配置诸如日志、用户访问控制等属性。下面就以基于端口号的虚拟主机为例,为其配置基于组的访问控制:
(1)修改httpd.conf配置文件:
wKioL1V2-trDV1HyAAEqjqerRhg120.jpg
(2)创建用户认证文件:
wKioL1V2-tvSfKzNAADh0hlDi_c016.jpg
(3)创建组文件/website/vhost_PORT/.htgroup:
wKioL1V2-tyiaFLBAABYgkS-0LI143.jpg
(4)重读httpd配置文件:
wKioL1V2-t3Bo2fDAAAvmQ0BivU875.jpg
(5)在win7虚拟机的浏览器中测试结果:
wKioL1V2-t-hDxScAAGFzA2EiXI070.jpg
提供用户名和密码后就可以看到访问页面了哈:
wKioL1V2-uGi-UkyAADeIGUQArU286.jpg
wKioL1V2-uSimid9AAIMdtdN5co834.jpg
wKioL1V2-ubBM911AADtZQ5TKxE247.jpg


二、httpd的status(服务器状态信息):
开启原则:status在需要时才开启,就算需要开启,也尽量以最少的信息输出为原则(因为开启status会影响服务器性能)
开启方法:通过开启status_module模块允许Apache服务器生成状态报告
1、查看当前Apache服务器是否启用了mod_status模块:
wKioL1V2-ubgXSWMAABatVRY9Og973.jpg
2、status是通过容器类指令来定义的,具体如下所示:
1
2
3
4
5
6
7
    #Locaton容器类指令表示:我们要通过哪个URL路径访问下面定义的status(URL可以自定义)
    SetHandler server-status    #server-status是处理器名称,SetHandler指令用于设置处理器
    AuthName "Status"    #定义用户访问控制(服务器状态信息不能让所有人查看)
    AuthType Basic
    AuthUserFile /etc/httpd/conf/.statuspass
    Require valid-user




通过ExtendedStatus指令可以查看更为详细的status信息:
1
ExtendedStatus On|Off    #开启或关闭扩展的status信息(默认是关闭的)



3、举例说明:
(1)编辑httpd.conf文件,启用status_module模块(默认就是启用的):
wKioL1V2-ueS-FWMAAAj5aqpB1w175.jpg
(2)找到,取消注释:
wKioL1V2-uih9mDAAACV2hsus0g470.jpg
(3)保存退出后重读配置文件:
wKioL1V2-uiAGuwXAAAsclrQL2E396.jpg
(4)在win7虚拟机的浏览器中访问/server-status:
wKioL1V2-uuzmzHMAASN5eJiK3c174.jpg
(5)开启ExtendedStatus以查看更为详细的status信息:
wKiom1V2-UjQW9ZMAAAeq_VsTuY481.jpg
(6)保存退出并重读配置文件,然后在客户端浏览器再次访问server-status页面:
wKiom1V2-UuBGMPjAAQ88U-gi_c239.jpg
说明:
1、服务器的status会影响服务器的性能,如果没有必要建议关闭。就算需要开启,也尽量让其输出最基本的信息;
2、服务器的status信息一般不允许所有用户查看,因此建议设置用户访问控制;

三、curl命令的使用:

curl是基于URL语法在命令行方式下工作的文件传输工具,它支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE及LDAP等协议。curl支持HTTPS认证,并且支持HTTP的POST、PUT等方法, FTP上传, kerberos认证,HTTP上传,代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,上载文件断点续传,,http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,,通过http代理服务器上传文件到FTP服务器等等,功能十分强大(类似于迅雷,但curl还是一个基于命令行的浏览器)。
1
2
3
4
5
6
7
8
9
10
11
12
curl的常用选项:
    -A/--user-agent  设置用户代理发送给服务器
    -basic 使用HTTP基本验证
    --tcp-nodelay 使用TCP_NODELAY选项
    -e/--referer  来源网址
    --cacert  CA证书 (SSL)
    --compressed 要求返回是压缩的形势
    -H/--header 自定义头信息传递给服务器
    -I/--head 只显示响应报文首部信息
    --limit-rate  设置传输速度
    -u/--user 设置服务器的用户和密码
    -0/--http1.0 使用HTTP 1.0



举例说明:
1、只显示响应报文首部信息:
wKiom1V2-UyDD0YtAAESvu9BiAk433.jpg
2、模拟Referer(从某个页面跳转过来):
wKioL1V2-vLDykUfAAGz6ecksgI890.jpg

四、httpd支持压缩功能:
使用deflate_module模块可以压缩页面以优化网络传输速度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

    # Restrict compression to these MIME types
    # 指定对某些MIME的格式文件进行压缩
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
  
    # Level of compression (Highest 9 - Lowest 1)
    # 配置压缩等级(1-9),9为最高等级,压缩比例最大,但消耗CPU资源也越多
    DeflateCompressionLevel 9
     
    # 对某些不支持压缩的浏览器进行部分压缩或不压缩
    # Netscape 4.x has some problems.
    BrowserMatch ^Mozilla/4 gzip-only-text/html
      
    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4.0[678] no-gzip
      
    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch MSI[E] !no-gzip !gzip-only-text/html





小结:
【httpd配置的注意点】:
1、指令的分类:指令与容器类指令
首字母大写,形如ServerRoot  “”被称为指令
用一对尖括号括起来形如:被称为容器类指令
2、指令的继承性:
httpd的指令是有继承特性的,例如我们先定义了一个容器类指令,如下所示:
1
2
3
4
5
6

        Options  Indexes  FollowSymLinks
#随后,我们又定义了一个容器类指令:

        Options   Indexes    #这里没有显式定义FollowSymLinks,会继承上面的定义哈
# [+-] 指令:  +FollowSymLinks明确添加该属性   -FollowSymLinks明确说不使用该属性




本次博文的内容就这么多哈,欢迎各位大大拍砖~~ 下次我们来讨论下加密/解密、CA及通过https来实现基于SSL协议的Apache。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-75671-1-1.html 上篇帖子: Apache两种工作模式切换 下篇帖子: http2.2常用配置(虚拟主机,访问控制,压缩,缓存,压力测试) web服务器 虚拟主机 IP地址 status server
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表