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 传输这个插槽的总兆字节数