11.16/11.17 Apache默认虚拟主机
时间:2022-04-27
本文章向大家介绍11.16/11.17 Apache默认虚拟主机,主要内容包括httpd的默认虚拟主机目录概要、虚拟主机常识、测试虚拟主机、总结、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
httpd的默认虚拟主机目录概要
- 一台服务器可以访问多个网站,每个网站都是一个虚拟主机
- 概念:域名(主机名)、DNS、解析域名、hosts
- 任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机
- vim /usr/local/apache2/conf/httpd.conf //搜索httpd-vhost,去掉#
- vim /usr/local/apache2/conf/extra/httpd-vhosts.conf //改为如下 <VirtualHost *:80> ServerAdmin admin@aminglinux.com DocumentRoot "/data/wwwroot/aming.com" ServerName aming.com ServerAlias www.aming.com ErrorLog "logs/aming.com-error_log" CustomLog "logs/aming.com-access_log" common
</VirtualHost> <VirtualHost *:80> DocumentRoot "/data/wwwroot/www.123.com" ServerName www.123.com </VirtualHost> - /usr/local/apache2/bin/apachectl –t - /usr/local/apache2/bin/apachectl graceful ## 默认虚拟主机 - 默认虚拟主机,可以理解成Apache(也就是httpd),一个服务下面跑多了多个网站,跑了多个域名 - 例子,假如在服务器上,它既能访问百度,又能访问谷歌,这是两个不同的网站,但同时都在一台服务器运行着,就用了一个httpd的服务,这个就是一个网站多个域名,每一个域名对着一个虚拟主机 ## 更改hosts - 在windows下去写hosts 1. hostsl路径地址,这个和linux下的hosts类似 1. 打开物理机C盘 2. 然后选择Windows 3. 再选择System32 4. 选择dirvers 5. 选择etc 6. 选择hosts
- 可以在这个里面定义一个IP,定义一个域名,然后让这个域名指向到这个IP上去
- 打开方式选择 记事本
- 打开文件,会看到windows下的hosts
- 然后在hosts文件中,任何一处位置加入一行,然后保存!
- 格式:先IP,然后空格,加域名——>域名可以写多个,一行里面可以有多个域名
- 这个IP地址为虚拟机的IP
192.168.202.130 www.abc.com www.123.com
- 然后物理机去ping 网址,能看到都能ping通
- 正常情况下,不写hosts,去ping——>将hosts中添加的一行注释掉
# 192.168.202.130 www.abc.com www.123.com
- 然后再去物理机去ping www.abc.com,会看到IP是公网IP
- 这个就是hosts的作用,它的目的就是让你临时访问到一个服务器上去
- 比如用www.abc.com,用www.123.com把这个域名指向到这台机器上去——>这是在DNS还没有生效的时候使用
- 这时候在将hosts中加入的那一行# 去掉
192.168.202.130 www.abc.com www.123.com
- 然后用物理机中的浏览器去访问www.abc.com或www.123.com,会看到正常访问
- 浏览器去访问www.123.com/1.php,会看到正常访问
- 或许会有一个疑问,123.com和abc.com,包括这个IP并没有在httpd的配置文件中去定义它,在配置文件中仅仅定义了 www.example.com这个域名,这个叫做Apache的默认主机 ,也就是说,任何一个域名,指向到这个 IP ,它都会访问到这个站点,这个站点就叫做默认虚拟主机——>注意:是虚拟主机
- 如果没有做任何操作,仅仅使用了httpd.conf,它实际上就是主配置文件定义的这个ServerName,以DocumentRoot ,但这样不太好管理,毕竟一台服务器上可以跑多个域名,若不想域名都指向到这里,所以需要打开一个虚拟主机配置文件
- 打开虚拟主机,在/usr/local/apache2.4/conf/httpd.conf 配置文件中
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/httpd.conf
搜索/extra 关键词,这一行就做虚拟主机
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
把#Include conf/extra/httpd-vhosts.conf前面的 #号 去掉 Include conf/extra/httpd-vhosts.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
- 因为配置文件仅仅能定义一个ServerName,所以现在打开一个二级配置文件
- 二级配置文件就是虚拟主机配置文件
- 在这个配置文件里,是可以定义多个ServerName的
[root@hf-01 ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //虚拟主机配置文件
在打开配置文件,会发现有两个<VirtualHost *:80> ,每一个<VirtualHost >都是一对出现的,每一个<VirtualHost >都代表着一个主机,一个主机就是一个网站
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com //定义管理员的邮箱——>可删除
DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com" //定义网站的根目录在哪里
ServerName dummy-host.example.com //服务器名字
ServerAlias www.dummy-host.example.com //定义别名,别名就是一个网站可以有多个域名访问,比如可以是abc.com访问,也可以是www.abc.com访问,访问的内容是一致的
ErrorLog "logs/dummy-host.example.com-error_log" //错误日志
CustomLog "logs/dummy-host.example.com-access_log" common //访问日志
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2.example.com
DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com"
ServerName dummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
- 在打开虚拟主机配置文件后,做一个更改
- 更改后
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com www.123.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com //验证
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
然后保存退出
- 更改完配置文件,就去创建对应的目录
[root@hf-01 ~]# mkdir /data/wwwroot/
[root@hf-01 ~]# mkdir /data/wwwroot/abc.com
[root@hf-01 ~]# mkdir /data/wwwroot/111.com
[root@hf-01 ~]#
- 在对应的站点根目录下创建,定义一个php
[root@hf-01 ~]# vim /data/wwwroot/abc.com/index.php
在文件中写入
<?php
echo "abc.com";
并保存退出
- 然后在/data/wwwroot/111.com/index.php中也定义一个php
[root@hf-01 ~]# vim /data/wwwroot/111.com/index.php
在文件中写入
<?php
echo "111.com";
并保存退出
- 在定义完之后,去检查服务是否有错误
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@hf-01 ~]#
- 然后重新加载配置文件
[root@hf-01 ~]# /usr/local/apache2.4/bin/apachectl graceful
[root@hf-01 ~]#
- 定义一个网站最核心的参数就是网站的根目录在哪里,访问的域名是什么,ServerName只能写一个,而ServerAlias可以写多个域名
虚拟主机常识
- 一旦让虚拟主机配置文件生效了,那么之前定义的www.example.com就会失效了
测试虚拟主机
- curl -x命令
- 比如说,现在要访问abc,com,若不去绑定hosts,那么在虚拟机中ping www.abc.com会ping到外网上去,并没有在这台机器上。若想要访问abc.com在在这台机器上,可以编辑/etc/hosts文件去指定下,或者使用curl -x选项
[root@hf-01 ~]# curl -x192.168.74.129:80 abc.com
abc.com[root@hf-01 ~]# curl -x192.168.74.129:80 www.abcd.com
abc.com[root@hf-01 ~]# curl -x192.168.74.129:80 www.abcde.com
abc.com[root@hf-01 ~]#
- 在访问abcd.com,会发现访问的还是abc.com,这个之前无论把任何域名指向到192.168.74.129这台机器上,都会访问到htdocs目录下面去,但现在发生了转变,无论什么域名指向过来,它都会访问到abc.com,abc.com是我们虚拟主机配置文件里边的第一个虚拟主机,它就是默认虚拟主机。
- 默认虚拟主机,就是无论访问什么域名,只要解析到192.168.74.129IP上,它都会访问这个网站对应的虚拟主机配置(这个默认虚拟主机就是abc.com)
- 这时再来访问www.example.com
abc.com[root@hf-01 ~]# curl -x192.168.74.129:80 www.example.com
111.com[root@hf-01 ~]#
- 在httpd主配置文件中有定义,在Virtual hosts虚拟主机中也有定义,结果访问到了111.com
总结
- 在主配置文件中,httpd.conf里面,打开了虚拟主机配置文件,也就是删除到 # 号,那虚拟主机配置就生效了,一旦虚拟主机配置文件生效,那主配置文件里面所定义的DocumentRoot以及ServerName失效
- 虚拟主机配置文件一旦打开,可以定义很多个VirtualHost,每一个VirtualHost都都有一个对应的 DocumentRoot 和 ServerName ,每一个VirtualHost都代表着一个站点,都是一个虚拟主机。在虚拟主机里面有一个特殊的默认虚拟主机,所谓默认虚拟主机就是无论任何域名解析到这个IP上,都会去访问默认虚拟主机
- ASP.NET SignalR 2.0入门指南介绍SignalRSignalR和WebSocket传输和回滚HTML5 传输协议Comet transports传输协议选择过程监测传输指定传输协议连接
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用Grunt和Gulp使用Grunt准备项目配置NPM配置Grunt集成起来监测文件变化与V
- 有趣的算法(三)——Hash算法
- JavaScript中的数据类型
- Logistic回归算法及Python实现
- <script>元素在XHTML中的用法
- 有趣的算法(四)——一致性Hash算法模拟redis集群
- ASP.NET5 中静态文件的各种使用方式服务端的静态文件开启目录浏览呈现默认文件使用UseFileServer方法文件类型基于IIS的考虑最佳实践
- 使用ASP.NET Identity以手机短信实现双重验证创建一个ASP.NET 5项目运行应用程序使用SMS短信进行双重验证开启双重验证使用双重验证登陆应用程序禁用账户来防止暴力破解
- ASP.NET 5 之 错误诊断和它的中间件们配置错误处理页面在Development阶段使用错误页面运行时信息页面欢迎页面
- 有趣的算法(五) ——Dijkstra双栈四则运算
- CSS深入理解学习笔记之float
- 轻松初探 Python 篇(五)—dict 和 set 知识汇总
- 全面解析C#中的异步编程为什么要异步过去糟糕的体验一个新的方式Tasks基于任务的异步编程模型Async和await时间处理程序和无返回值的异步方法结束语
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 在java中使用SPI创建可扩展的应用程序
- java安全编码指南之:基础篇
- Java并发必知必会第三弹:用积木讲解ABA原理 |老婆居然又听懂了!
- CTO写的代码,真是绝了!
- 用 BERT 精简版 DistilBERT+TF.js,提升问答系统 2 倍性能
- docker浅入深出
- 一篇文章快速搞懂Qt文件读写操作
- C++核心准则T.20:避免定义没有明确语义的“概念”
- 机器学习之独热编码(One-Hot)详解(代码解释)
- TypeScript 实战算法系列(四):实现集合和各种集合运算
- 不知道怎么封装代码?看看这几种设计模式吧!
- 百分浏览器快捷键
- 深度神经网络权值初始化的几种方式及为什么不能初始化为零(1)
- Python_doc.1
- (24)Bash预定义变量