一篇文在手,Apache虚拟主机全通透

Posted 可乐卷儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文在手,Apache虚拟主机全通透相关的知识,希望对你有一定的参考价值。


一、访问网站的本质

从本质上来看,访问web服务某个主机时,其实访问的是某个IP主机上的某个端口(默认的是80端口),这时就需要访问不同的域名或者端口,来实现对不同网站的访问。
那就要让我们思考一下,如何实现对不同网站的访问,一般分为三种:基于域名、基于端口、基于IP

二、httpd支持的虚拟主机类型

1、基于域名

  • 域名不同-IP相同,端口相同
  • 为每个虚拟主机使用不同的域名,但是其对应的IP地址是相同的

基于域名是最为普遍的虚拟web主机类型

2、基于IP地址

  • IP不同,端口相同
  • 为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同

这种方式需要为服务器配备多个网络接口(加网卡,虚拟网卡),因此应用不是很广泛

3、基于端口

  • IP相同,端口不同
  • 这种方式并不使用域名,IP地址来区分不同的站点内容,而是使用不同的TCP端口号,因此用户在浏览不同的虚拟站点时需要同时制定端口号才能访问

三、基于域名访问虚拟主机

1、 首先安装好apache

tar xf apr-1.7.0.tar.gz
tar xf apr-util-1.6.1.tar.gz
tar xf httpd-2.4.48.tar.bz2
mv apr-1.7.0 httpd-2.4.48/srclib/apr
mv apr-util-1.6.1 httpd-2.4.48/srclib/apr-util
yum -y install gcc gcc-c++ make pcre-devel expat-devel perl
cd /opt/httpd-2.4.48
./configure --prefix=/usr/local/httpd
make && make install
ln -s /usr/local/httpd/conf/httpd.conf /etc/
ln -s /usr/local/httpd/bin/* /usr/local/bin/  ##优化配置文件路径,并把httpd服务的可执行程序文件放入路径环境变量的目录中便于系统识别
cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd
vim /etc/init.d/httpd
#chkconfig: 35 85 21  //35级别自动运行  第85个启动 第21个关闭
#description: Apache is a World Wide Web server
chkconfig --add httpd
vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.35.40:80
ServerName www.klj.com:80

2、为虚拟主机提供域名解析

用于存放不同域名的所对应的不同的页面文件

  1. 部署DNS域名 解析服务器,来提供域名解析( 用于生产环境)
  2. 在/etc/hosts 文件中临时配置域名与IP地址的映射关系( 用于内部测试)
echo "192.168.35.40 www.zyt.com" >> /etc/hosts
echo "192.168.35.40 www.zytklj.com" >> /etc/hosts 
cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhos
::1         localhost localhost.localdomain localhost6 localhos
192.168.35.40 www. zyt.com
192.168.35.40 www.zytklj.com

在这里插入图片描述

3、为虚拟主机准备网页文档

用于存放不同域名的所对应的不同的页面文件

mkdir -p /var/www/html/zyt
mkdir -p /var/www/html/zytklj
echo "<h1>www.zyt.com</h1>" > /var/www/html/zyt/index.html
echo "<h1 >www.zytklj.com</h1>" > /var/www/html/zytklj/index.html

在这里插入图片描述

4、添加虚拟主机配置

vhosts ##虚拟主机
httpd-vhosts.conf ##虚拟主机配置文件
在这里插入图片描述

vim /usr/local/httpd/conf/extra/httpd-vhosts. conf  #源码编译安装的虚拟主机配置文件路径
vim /etc/httpd/ conf .d/vhosts. conf  #RPM或YUM安装的虚拟主机配置文件路径

模板文件要求:
<VirtualHost 192.168.35.40:80> #设置虚拟站点区域
ServerAdmin webmas ter @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_ 1og” common # 设置访问日志文件的路径
#结束标签

PS: combined 表示组合日志:多个通用日子作为一条去显示;common表示通用日志:一般访问日志文件的路径后面会默认添加common;

<VirtualHost 192.168.35.40:80>
    DocumentRoot "/var/www/html/zyt"    ##域名的目录
    ServerName www.zyt.com     ##域名
    ErrorLog "logs/zyt.com-error_log"
    CustomLog "logs/zyt.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.35.40:80>
    DocumentRoot "/var/www/html/zytklj"
    ServerName www.zytklj.com
    ErrorLog "logs/zytklj.com-error_log"
    CustomLog "logs/zytklj.com-access_log" common
</VirtualHost>
<Directory "/var/www/html">     ##设置目录访问权限
    AllowOverride None         ##不启用任何的服务器特性
    Require all granted         ##不允许重写Apache默认配置
</Directory>                    ##允许所有主机访问

配置讲解

  • options指令常用选项
    • None:表示不启用任何的服务器特性
    • FollowSymLinks: 服务器允许在此目录中使用符号连接(软链接)
    • Indexes:如果输入的网址对应服务器上的一个文件目录,而此目录中又没有Apache配置文件中的DirectoryIndex指令指定的文件(例如:DirectoryIndex index .html index.php) ,则列出该目录下的所有文件
    • Multiviews:如果客户端请求的路径可能对应多种类型的文件,那么服务器将根据客户端请求的具体情况自动选择一个最匹配客户端要求的文件(例如:在服务器站点的file文件夹下中存在名为klj. jpg和klj. html的两个文件,此时用户输入http://localhost/file/klj,如果在file文件夹下并没有klj子目录,那么服务器将会尝试在file目录下查找形如klj.*的文件然后根据用户请求的具体情况返回最匹配要求的klj.jpg或者klj.html
    • All: 表示除Multiviews之外的所有特性。这也是Options指令的默认设置
  • Allowoverride指令解释
    • .htaccessy(分布式隐含配置文件):提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含特定指令的文件,其中的指令作用于此目录及其所有子目录当Allooverride设置成None时,相应的配置目录下的.htaccess文件是不被读取的,即无法生效。当Allooverride设置成A11时,每一次请求访问相应目录下的文件时,都会读取. 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地址网络访问。

5、加载独立/扩展的配置文件

vim /usr/local/httpd/cond/httpd.conf  
477 Include conf/extra/httpd-vhosts.conf   ##取消虚拟主机注释
httpd -t
systemctl  restart httpd  ##重启服务

在这里插入图片描述
在这里插入图片描述

6、根据域名的方式访问

www.zyt.com
在这里插入图片描述

www.zytklj.com
在这里插入图片描述

四、基于IP地址访问虚拟主机

1、创建虚拟网

ifconfig ens33:0 192.168.35.100 netmask 255.255.255.0

在这里插入图片描述

2、修改虚拟主机配置

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 
<VirtualHost 192.168.35.40:80>
    DocumentRoot "/var/www/html/zyt"
    ServerName www.zyt.com
    ErrorLog "logs/zyt.com-error_log"
    CustomLog "logs/zyt.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.35.100:80>   ##仅更改ip地址
    DocumentRoot "/var/www/html/zytklj"
    ServerName www.zytklj.com
    ErrorLog "logs/zytklj.com-error_log"
    CustomLog "logs/zytklj.com-access_log" common
</VirtualHost>
<Directory "/var/www/html"> 
    AllowOverride None
    Require all granted
</Directory>

3、修改主配置文件

vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.35.100:80    ##添加一条监听ip
systemctl start httpd   ##重启服务
192.168.35.100  ##基于ip地址访问

在这里插入图片描述

4、验证

在这里插入图片描述

五、基于端口号进行访问虚拟主机

1、修改虚拟主机配置

vim /usr/local/httpd/conf/extra/httpd-vhosts.conf   ##修改虚拟主机配置文件
<VirtualHost 192.168.35.40:80>
    DocumentRoot "/var/www/html/zyt"
    ServerName www.zyt.com
    ErrorLog "logs/zyt.com-error_log"
    CustomLog "logs/zyt.com-access_log" common
</VirtualHost>

<VirtualHost 192.168.35.40:8080>   ##仅修改端口
    DocumentRoot "/var/www/html/zytklj"
    ServerName www.zytklj.com
    ErrorLog "logs/zytklj.com-error_log"
    CustomLog "logs/zytklj.com-access_log" common
</VirtualHost>
<Directory "/var/www/html"
    AllowOverride None
    Require all granted
</Directory>

2、修改主配置文件

vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.35.40:8080  ##添加一条端口记录
systemctl start httpd   ##重启服务

在这里插入图片描述

3、验证

192.168.35.40:8080
在这里插入图片描述

六、Apache知识点

1、为何要保持连接

  • HTTP协议是基于TCP协议之上的,在进行HTTP连接之前,要先进行TCP连接,每个TCP连接都要进行三次握手。建立与关闭连接对于HTTP协议而言会消耗很多的内存与CPU资源。
  • 解决办法是HTTP连接保持。就是尽量地保持客户端的连接,通过一个TCP连接传送多个HTTP请求响应,对于客户端可以提高50%以上的响应时间,对于服务器可以降低建立与关闭连接时的资源消耗。

2、默认配置文件-httpd-default

httpd.default.conf 即默认的http.conf文件,是Apache的配置文件,用于加载模块,指定虚拟机域名和虚拟目录,指定MIME type, 重定向URL等。修改后重命名为http.conf,然后重启apache服务生效。
vim /usr/local/httpd/conf/extra/httpd-default.conf

  • KeepAlive On:设置是否打开连接保持功能,后面接OFF表示关闭,接On表示打开。可以根据网站的并发请求量决定是否打开,即在高并发时打开连接保持功能,并发量不高时关闭此功能。
  • MaxKeepAliveRequests 100:用于设置在一次长连接中可以传输的最大请求数量,超过此最大请求数量就会断开连接,最大值的设置决定于网站中网页的内容,一般设置数量会多于网站中所有的元素。
  • KeepAliveTimeout 5 ##保持长时间连接的间隔时间:设置来自同一个客户端一次连接多次请求之间的最大间隔时间,即两次请求之间超过该时间连接就会自动断开,从而避免客户端占用连接资源。

总结

本文主要讲解Apache虚拟主机的服务本质,以及httpd支持的虚拟主机类型,就三种:基于域名、基于ip地址、基于端口进行实例讲解。

以上是关于一篇文在手,Apache虚拟主机全通透的主要内容,如果未能解决你的问题,请参考以下文章

超值一篇分享,Docker:从入门到实战过程全记录

Apache进一步了解,全方面为人民服务

超值一篇分享,Docker:从入门到实战过程全记录

超值一篇分享,Docker:从入门到实战过程全记录

超值一篇分享,Docker:从入门到实战过程全记录

一篇文带你从0到1了解建站及完成CMS系统编写