apache虚拟主机解决在一台主机上可以使用不同的域名、端口和IP来提高不同的服务
一、基于域名访问虚拟主机
为每个虚拟主机使用不用的域名,但是其对应的IP地址是相同的。
域名不同 IP相同 端口相同。
基于域名是最为普遍的虚拟web主机类型。
1、为虚拟主机提供域名解析
方法一: 部署DNS域名解析服务器,来提供域名解析
方法二: 在/etc/hosts 文件中临时配置域名与IP 地址的映射关系
echo "192.168.100.22 www.benet.com" >> /etc/hosts
echo "192.168.100.22 www.ddyyff.com" >> /etc/hosts
2、为虚拟主机准备网页文档
[root@localhost ~]# mkdir -p /var/www/html/benet
[root@localhost ~]# mkdir -p /var/www/html/ddyyff
[root@localhost ~]# echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html
[root@localhost ~]# echo "<h1>www.ddyyff.com</h1>" > /var/www/html/ddyyff/index.html
3、添加虚拟主机配置
源码编译安装的虚拟主机配置文件路径的情况下
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
到子配置文件中找到vhosts虚拟主机配置文件
模板文件:
<VirtualHost *:80> #设置虚拟站点区域
ServerAdmin webmaster@dummy-host.example.com #设置管理员邮箱,这行可注释掉
DocumentRoot "/usr/local/httpd/docs/dummy-host.example.com" #设置网站根目录
ServerName dummy-host.example.com #设置Web站点的完整域名(主机名+域名)
ServerAlias www.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log" #设置错误日志文件的路径
CustomLog "logs/dummy-host.example.com-access_log" common #设置访问日志文件的路径
</VirtualHost> #结束标签
PS:combined 表示组合日志 common表示通用日志
options指令常用选项
1、None :表示不启用任何的服务特性
2、FollowSymLinks :服务器允许在此目录中使用符号连接(软链接)
3、Indexes:如果输入的网址对应服务器上的一个文件目录,而此目录中又没有Apache配置文件中的DirectoryIndex指令指定的文件(例如:DirectoryIndex index.html index.php) ,则列出该目录下的所有文件
4、Multiviews:如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择
一个最匹配客户端要求的文件。例如,在服务器站点的file文件夹下中存在名为hello.jpg和hello.html的两个文件,此时用户输入http://localhost/file/hello ,如果在file文件夹下并没有hello子目录,那么服务器将会尝试在file目录下查找形如hello.*的文件然后根据用户请求的具体情况返回最匹配要求的hello.jpg或者hello.html
5、All:表示除Multiviews之外的所有特性。这也是Options指令的默认设置
Allowoverride指令解释:
.htaccessy(分布式隐含配置文件):提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含特定指令的文件,其中的指令作用于此目录及其所有子目录当Allooverride设置成None时,相应的配置目录下的.htaccess文件是不被读取的,即无法生效。当Allooverride设置成All时,每一次请求访问相应目录下的文件时,都会读取.htaccess文件的配置,意味着原Apache指令会被.htaccess文件中的指令重写。
从性能和安全性考虑,一般都尽可能避免使用.htaccess文件,任何希望放在.htaccess文件中的配置,都可放在主配置文件(httpd.conf )的段中,而且高效。因此Allowoverride属性一般都配置成None
地址限制策略:
Require all granted:允许所有主机访问。
Require all denied:拒绝所有主机访问,
Require local:仅允许本地主机访问。
Require [not] host <主机名或域名列表>:允许或拒绝指定主机或域名访问。
Require [not] ip <IP地址或网段列表>:允许或拒绝指定IP地址网络访问。
RPM或YUM安装的虚拟主机配置文件路径的情况下
#vim /etc/httpd/conf.d/vhosts.conf
4、加载虚拟的配置文件
[root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf
5、重启httpd服务
结果
二、基于IP地址访问虚拟主机
1、添加虚拟网卡
ifconfig ens33:0 192.168.100.23 netmask 255.255.255.0
2、修改httpd虚拟主机配置
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
3、修改主配置文件
vim /usr/local/httpd/conf/httpd.conf
结果
三、基于端口号访问虚拟主机
1、修改子配置文件中虚拟主机配置信息
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
2、修改主配置文件
vim /etc/httpd/conf/httpd.conf
3、重启httpd
结果
Apache连接保持
HTTP是基于TCP协议上的可靠传输,每次在HTTP连接之前都要经过TCP连接,每个TCP连接都需要进行三次握手与四次挥手,每次建立与关闭连接对于HTTP而言都消耗更多的内存与cpu资源,解决方法就是保持连接
vim /usr/local/httpd/conf/extra/httpd-default.conf
或者
把http.conf文件中这个注释去掉 ,默认开启长连接,最大连接数,最大连接间隔的配置。
Apache日志分割
vim /usr/local/httpd/conf/httpd.conf 访问日志分割设置
#273行,分割错误日志
ErrorLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/error_log_%Y%m%d.log 86400"
#305行,分割访问日志
CustomLog "| /usr/local/bin/rotatelogs -l /var/log/httpd/access_%Y%m%d.log 86400" combined
PS:
-l:表示使用本地时间
/error_log:日志名称
%Y-%m-%d:年-月-日
86400:表示日志分隔的间隔是1天,单位是秒
结果
总结
在创建虚拟主机时,通过基于域名的情况下需要修改自己的域名转换、httpd.conf、http-vhosts.conf 通过IP和端口的访问虚拟主机只需要修改配置文件:httpd.conf 和http-vhosts.conf。httpd.conf只需修改监听地址和端口。httpd-vhosts.conf需要修改ip和域名的映射。
注意:在主配置文件中引入虚拟主机配置文件让httpd识别