M25-12

    💙14、虚拟主机
        站点标识:socket                 `用户访问的内容是根据socket来判断各类各样内容`
            IP相同,但端口不同
            IP不同,但端口均为默认端口
            FQDN不同;
            请求报文中首部
            Host: www.abc.com
        有三种实现方案:
            基于ip:为每个虚拟主机准备至少一个ip地址
            基于port:为每个虚拟主机使用至少一个独立的port
            基于FQDN:为每个虚拟主机使用至少一个FQDN
        注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机
            禁用方法:注释中心主机的DocumentRoot指令即可() CentOS 6的2.2版本
        虚拟主机的配置方法:
            <VirtualHost IP:PORT>
                ServerName FQDN
                DocumentRoot "/path"
            </VirtualHost>
            建议:上述配置存放在独立的配置文件中
        其它可用指令:
            ServerAlias:虚拟主机的别名;可多次使用
            ErrorLog:错误日志
            CustomLog:访问日志
            <Directory "/path">
            </Directory>
            Alias
        
            添加虚拟主机设置:   `解决访问量不大,给公司内部建立小网站/客服网站等等`
            https不能在同一个IP地址建立多个虚拟主机,需要用不相同的地址解决;一般虚拟主机不会用https来做站

        示例:

            cd /app                                                 `👇👇👇以下基础调整`
            mkdir website1
            mkdir website2
            mkdir website3
            echo /app/website1/index.html > website1/index.html
            echo /app/website2/index.html > website2/index.html
            echo /app/website3/index.html > website3/index.html
            ip a a 172.18.16.10/16 dev eth2
            ip a a 172.18.16.20/16 dev eth2
            ip a a 172.18.16.30/16 dev eth2                         
            vim /etc/httpd/conf/httpd.conf  `将### Section 3: Virtual Hosts相关功能开启或单独写到conf.d配置路径里,用户打开虚拟主机功能`
                <VirtualHost *:80>                                                                     `每个虚拟主机需要独立的一条virtualhost配置`
                    ServerAdmin webmaster@dummy-host.example.com                                        `管理员的邮箱`
                    DocumentRoot /www/docs/dummy-host.example.com                                       `各自首页的主目录`
                    ServerName dummy-host.example.com                                                   `若基于ip地址,该条域名定义不重要`
                    ErrorLog logs/dummy-host.example.com-error_log                                      `错误日志`
                    CustomLog logs/dummy-host.example.com-access_log common                             `日常日志`
                </VirtualHost>
            service httpd reload
                                                                    `👆👆👆以上基础调整`
      🌙基于IP的虚拟主机示例:

            <virtualhost 172.18.253.12:80>
                    documentroot "/app/website1"
            </virtualhost>
            <virtualhost 172.18.16.10:80>
                    documentroot "/app/website2"
            </virtualhost>
            <virtualhost 172.18.16.20:80>
                    documentroot "/app/website3"
            </virtualhost>

            <VirtualHost 172.16.100.6:80>
                ServerName www.a.com
                DocumentRoot "/www/a.com/htdocs"
            </VirtualHost>
            <VirtualHost 172.16.100.7:80>
                ServerName www.b.net
                DocumentRoot "/www/b.net/htdocs"
            </VirtualHost>
            <VirtualHost172.16.100.8:80>
                ServerName www.c.org
                DocumentRoot "/www/c.org/htdocs"
            </VirtualHost>
        
      🌙基于端口的虚拟主机:可和基于IP的虚拟主机混合使用

            listen 172.18.253.12:81
            listen 172.18.253.12:82
            listen 172.18.253.12:83
            <virtualhost 172.18.253.12:81>
                    documentroot "/app/website1"
            </virtualhost>
            <virtualhost 172.18.253.12:82>
                    documentroot "/app/website2"
            </virtualhost>
            <virtualhost 172.18.253.12:83>
                    documentroot "/app/website3"
            </virtualhost>

            listen 808
            listen 8080
            <VirtualHost172.16.100.6:80>
                ServerName www.a.com
                DocumentRoot "/www/a.com/htdocs"
            </VirtualHost>
            <VirtualHost 172.16.100.6:808>
                ServerName www.b.net
                DocumentRoot "/www/b.net/htdocs"
            </VirtualHost>
            <VirtualHost 172.16.100.6:8080>
                ServerName www.c.org
                DocumentRoot "/www/c.org/htdocs"
            </VirtualHost>

                疑问:在偶然情况下出现,并且端口也并未在监听状态;在重启服务之后恢复正常
                    [Fri Sep 29 00:04:12 2017] [error] (EAI 2)Name or service not known: Failed to resolve server name for 172.18.253.12 (check DNS) -- or specify an explicit ServerName
       
      🌙基于FQDN的虚拟主机:    基于域名,启动后主战点即失效;根据ip查地址,排前排的默认先搜索到
                NameVirtualHost *:80                        `httpd2.2需要打开才能使用虚拟主机;httpd2.4不需要此指令;配置方法照旧,主配置文件或者conf.d下`

            namevirtualhost *:80
            <virtualhost *:80>
                    servername www.a.com
                    documentroot "/app/website1"
                    customlog logs/www.a.com-access_log combined    `增加系统日志记录功能`
                    ErrorLog logs/www.a.com-error_log combined      `定义错误日志,格式按照combined`
            </virtualhost>
            <virtualhost *:80>
                    servername www.b.com
                    documentroot "/app/website2"
                    customlog logs/www.b.com-access_log combined
                    ErrorLog logs/www.b.com-error_log combined
            </virtualhost>
            <virtualhost *:80>
                    servername www.c.com
                    documentroot "/app/website3"
                    customlog logs/www.c.com-access_log combined
                    ErrorLog logs/www.c.com-error_log combined
            </virtualhost>
                后续补充hosts/DNS服务端等相关信息即可(需要详细调整查看之前的bind笔记即可)
                    yum install bind
                    vim /etc/named.conf
                    vim /etc/named.rfc1912.zones
                        42 zone "a.com" {
                        43     type master;
                        44     file "a.com.zone";
                        45 };  
                        46 zone "b.com" {
                        47     type master;
                        48     file "b.com.zone";
                        49 };  
                        50 zone "c.com" {
                        51     type master;
                        52     file "c.com.zone";
                        53 };
                    vim /etc/named/a.com.zone(补充b和c的完成;在能解析到172.18.12.22地址即可)
                        1 $TTL 86400  ;   1 day  
                        2 @           IN  SOA dns1 admin.a.com. (
                        3                 2017010101  ;   serial
                        4                 86400       ;   refresh (1 day)
                        5                 3600        ;   retry (1 hour)
                        6                 604800      ;   expire (1 week)
                        7                 10800       ;   minimum (3 hours)
                        8                 )
                        9                 NS          dns1
                        10 dns1            A           172.18.56.53
                        11 websrv          A           172.18.12.22     `虚拟主机的ip是172.18.12.22,只要能解析到该地址,内容皆可访问`
                        12 www             CNAME       websrv
                    chown :named a.com.zone
                    cp -p a.com.zone b.com.zone
                    ...                        
                    systemctl start named
                    dig www.a.com @127.0.0.1        `测试成功`
                客户机调整dns后开始测试网页/etc/resolv.conf
                    能ping,能curl www.a.com         `完成搭建`
                    telnet 172.18.12.12
                        GET / HTTP/1.1
                        host:www.a.com
                    ...
                    
            <VirtualHost*:80>
                ServerName www.a.com
                DocumentRoot "/www/a.com/htdocs"
            </VirtualHost>
            <VirtualHost*:80>
                ServerName www.b.net
                DocumentRoot "/www/b.net/htdocs"
            </VirtualHost>
            <VirtualHost *:80>
                ServerName www.c.org
                DocumentRoot "/www/c.org/htdocs"
            </VirtualHost>
        
    💙15、status页面   httpd.conf的921行
        LoadModule status_module modules/mod_status.so  `在/etc/httpd/conf/httpd.conf里加载的其中一个模块`
        
        <Location /server-status>                       `在虚拟目录显示当前站点信息http://servername/server-status;域后边的虚拟目录可自定义`
            SetHandler server-status                    `内部机制调用了SetHandler功能调用server-status模块`
            Order allow,deny
            Allow from .example.com                     `使用了访问控制,拒绝所有,除了.example.com这个域可访问`
        </Location>
        ExtendedStatus On 显示扩展信息                  `去掉注释开启功能后显示更多信息;228行`
    
        实验:根据之前搭建的地址进行开放status状态信息查询()
            vim /etc/httpd/conf/httpd.conf
                <Location /server-status>
                    SetHandler server-status
                    Order deny,allow
                    Deny from all
                    Allow from 172.18
                </Location>
            service httpd reload
            浏览器:
                http://172.18.253.12/server-status
                    服务器版本:Apache / 2.2.15(Unix)DAV / 2
                    服务器构建:2017年3月22日06:52:55
                    当前时间:2011年9月29日,星期五03:02:06 CST
                    重新启动时间:2017年9月29日,星期五02:59:59 CST
                    父服务器生成:2    `达到一定量将杀死某些进程,并递增新代`
                    服务器正常运行时间:2分7秒
                    目前正在处理1个请求,7个空闲工作人员
                    w ^ _______................................................. ....
                    .................................................. ..............
                    .................................................. ..............
                    .................................................. ..............
                    记分牌的关键:
                    "_"等待连接 "S"启动          "R"读取请求时
                    "W"发送回复 "K"保持连接(读)"D" DNS查找
                    "C"关闭连接 "L"日志          "G"优雅地完成/不能暴力,类似kill -15
                    "I"工作人员空闲清理,        "."打开没有当前进程的槽/无打开socket状态的

                    PID键: 
                    36281状态:W,  36282状态:_,  6283状态:_ 
                    36284状态:_,  36285状态:_,  36286状态:_ 
                    36287状态:_,  36288状态:_,
                    要获取具有当前状态信息的完整报告,您需要使用该ExtendedStatus On指令。
                    Apache Server在172.18.253.12端口80

                开启ExtendedStatus On功能显示的内容

                    Srv	PID	    Acc	    M	CPU	    SS	Req	Conn	Child	Slot	Client	        VHost	    Request
                    2-0	36634	0/0/0	W	0.00	0	0	0.0	    0.00	0.00	172.18.252.127	www.a.com	GET /server-status HTTP/1.1
                    Srv	    子服务器编号 - 代
                    PID	    操作系统进程ID
                    Acc	    此连接的访问​​次数/此子进程/此插槽
                    M	    操作模式
                    CPU	    CPU使用率,秒数
                    SS	    从最近的请求开始以来的二分之一秒
                    Req	    处理最近的请求所需的毫秒数
                    Conn	千字节转移了这个连接
                    Child	兆字节转移了这个子进程
                    Slot	传输这个插槽的总兆字节数

  

posted @ 2017-10-07 11:51  illinux  阅读(211)  评论(0编辑  收藏  举报