Apache httpd.conf配置文件 3(虚拟主机)
### Section 3: Virtual Hosts 第三部分 虚拟主机
注意:在使用虚拟主机前,请先检查 http.conf 的 辅助配置文件httpd-vhosts.conf 是否注释
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
此命令是否被注释,若被注释,请先去除 Include前的 #,使虚拟主机配置生效。
然后打开Apache目录下 /conf/extra/httpd-vhosts.conf 此文件 开始配置
# VirtualHost: If you want to maintain multiple domains/hostnames on your 虚拟主机:如果你想维持多个域名和主机在你的机器上,你可
# machine you can setup VirtualHost containers for them. Most configurations 设置虚拟主机。大多数配置信息只使用基于名字的虚拟主机
# use only name-based virtual hosts so the server doesn't need to worry about 因此服务器 不必担心IP地址的问题
# IP addresses. This is indicated by the asterisks in the directives below. 下面的命令以*号代替虚拟主机名
#
# Please see the documentation at 请参看文档 地址……
# <URL:http://httpd.apache.org/docs/2.2/vhosts/>
# for further details before you try to setup virtual hosts. 在你设置虚拟主机前请了解详细情况
#
# You may use the command line option '-S' to verify your virtual host 你可以用命令行选项 -S 来核实你虚拟主机的配置
# configuration.
#
# Use name-based virtual hosting. 使用基于名字的虚拟主机
#
#NameVirtualHost *:80
如果您要配置基于域名的虚拟主机,如果是基于ip地址的可以将本行注释。
NameVirtualHost
指令就是您必须的指令之一。尽管addr参数可以使用主机名,但建议您还是使用IP地址。比如:
NameVirtualHost 111.22.33.44
请注意,<VirtualHost>指令的参数必须与NameVirtualHost指令的参数完全匹配。
NameVirtualHost 1.2.3.4
<VirtualHost 1.2.3.4>
#
# NOTE: NameVirtualHost cannot be used without a port specifier 注意:命名虚拟主机没有指定端口不能使用
# (e.g. :80) if mod_ssl is being used, due to the nature of the 例如(xxx:80) 如果使用ssl模块,是因为SSL协议的性质
# SSL protocol.
#
#
# VirtualHost example: 虚拟主机 例子
# Almost any Apache directive may go into a VirtualHost container. 几乎任何apache指令都可以加入 虚拟主机容器
# The first VirtualHost section is used for requests without a known 第一个虚拟主机用于 没有已知服务器域名的请求
# server name.
#
#<VirtualHost *:80> 添加实例
# ServerAdmin webmaster@dummy-host.example.com 管理员邮箱
# DocumentRoot /www/docs/dummy-host.example.com 文档根目录
# ServerName dummy-host.example.com 服务器名字(域名)
# ErrorLog logs/dummy-host.example.com-error_log 错误日志
# CustomLog logs/dummy-host.example.com-access_log common 对服务器的请求进行记录的日志
#</VirtualHost>
补充:虚拟主机有三种配置方式 基于IP 基于端口 基于域名
1.基于不同IP
说明:在实际环境中,一般服务器没那么多公网IP,而且大家一般都是用域名访问的.所以这个实际用处不大.但是可以用来测试和学习,以便深入理解apache运行原理。
1. 假设服务器有个IP地址为192.168.1.1,使用ifconfig在同一个网络接口eth0上再绑定3个IP:(这些子接口ip都为临时增加,重启后消失)
(可以将这些命令加入开机启动项中,也可以在/etc/sysconfig/network-scripts中增加一个文件ifcfg-eth0:1)
[root@localhost root]# ifconfig eth0:2 192.168.1.3 netmask 255.255.255.0
[root@localhost root]# ifconfig eth0:3 192.168.1.4 netmask 255.255.255.0
如果是旧版本的apache 则要修改httpd.conf 文件,查找 Include conf/extra/httpd-vhosts.conf 将前面的#号去掉,
然后修改虚拟主机配置文件 Apache/Conf/extra/httpd-vhosts.conf 添加以下代码 (新版本的apache直接修改httpd.conf文件,添加以下代码)
ServerAdmin webmaster@dummy-host.example.com (可以省略,省略后按默认设置)
DocumentRoot /www/test1
ServerName 192.168.1.2
ErrorLog logs/dummy-host.example.com-error_log (可以省略,省略后按默认设置)
CustomLog logs/dummy-host.example.com-access_log common(可以省略,省略后按默认设置)
<Directory "/www/test1"> (可以省略或修改访问权限,默认允许)
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow From All
</Directory>
</VirtualHost>
DocumentRoot /www/test2
ServerName 192.168.1.2
</VirtualHost>
DocumentRoot /www/test3
ServerName 192.168.1.3
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow From All
</Directory>
</VirtualHost>
在实际操作中,在这种情况下并不需要域名访问,采用的是完全以实际IP进行访问.相应的ServerName这个字段应该是没有意义的.事实也表明了我们配置任何值都是可以通过的.
重启http时可能报错
1.Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName (不能确定服务器主域名,请使用localhost.localdomain 做为服务器名)
解决方法:这个问题就在于没有在httpd.conf 中設定 ServerName ,如果你真没有域名的话,找到#ServerName www.example.com:80 把#去掉,再重启apache 就好了。如果有的话,根据你的实际情况修改为本机的IP或者域名
2.Name or service not known: Failed to resolve server name for 10.0.7.101 (check DNS) -- or specify an explicit ServerName
(未知的名字或服务:处理10.0.7.101服务器域名失败。检查DNS设置,或指定一个详细的服务器域名)
解决方法:检查在上面的虚拟主机设置中,有没有ServerName选项,并将其值改为虚拟主机IP
2.基于不同的端口
一次性的执行命令setenforce 0,这样不用重启,也可以生效。
重启http时可能报错
1.Permission denied: make_sock: could not bind to address
解决方法:查看上述两个防火墙是否关闭,一般为防火墙问题;还有就是用户权限问题,查看当前用户有无权限。
3.基于不同的域名
这是在实际应用中最常遇到的,一个apache服务器上放置多个网站,以不同的域名来区分
在测试环境中,我们修改/etc/hosts文件 添加我们域名解析的信息,方便我们测试
10.0.7.100 www.example.com
10.0.7.100 www1.example.com
10.0.7.100 www2.example.com
修改httpd.conf的配置
# Use name-based virtual hosting.
#
NameVirtualHost *
这是非常重要的一条指令,正是该指令激活了基于名字的虚拟主机的功能
表示在apache监听的所有IP和所有端口(此时只有80)上做多域名虚拟主机,也可以单独设定开启域名虚拟主机的ip(NameVirtualHost 10.0.7.100:80)
<VirtualHost *:80>
ServerAdmin xxx@xxx.com
DocumentRoot /var/www/7.100
ServerName www.example.com
ErrorLog logs/ error_log
TransferLog logs/ access_log
</VirtualHost>
<VirtualHost *:80>
ServerAdmin xxx@ixxx.com
DocumentRoot /var/www/7.101
ServerName www1.example.com
ErrorLog logs/error_log
TransferLog logs/access_log
</VirtualHost>
<VirtualHost *:80>
ServerAdmin xxx@ixxx.com
DocumentRoot /var/www/7.102
ServerName www2.example.com
ErrorLog logs/error_log
TransferLog logs/access_log
</VirtualHost>
这里要重点说明的就是 NameVirtualHost * 选项的设置,它表示在apache监听的哪个IP和哪个端口上做多域名虚拟主机
#NameVirtualHost *:80
如果您要配置基于域名的虚拟主机,
NameVirtualHost
指令就是您必须的指令之一。尽管addr参数可以使用主机名,但建议您还是使用IP地址。比如:
NameVirtualHost 111.22.33.44
请注意,<VirtualHost>指令的参数必须与NameVirtualHost指令的参数完全匹配。
NameVirtualHost 1.2.3.4:80
<VirtualHost 1.2.3.4:80>
注意:命名虚拟主机没有指定端口不能使用
配置实例:
我用三种方法同时配置一台apache,以此来对比其中差异
10.0.7.100:80
10.0.7.100:8001
10.0.7.101:80 www.example.com www1.example.com www2.example.com
在10.0.7.100上使用基于不同端口的虚拟主机(两个端口)
在10.0.7.101上使用基于不同名字的虚拟主机(三个域名)
这也是两个IP地址
共五台虚拟主机,均使用最简配置
首先增加一个IP地址:
ifconfig eth0:1 10.0.7.101 netmask 255.255.255.0(也可以在/etc/sysconfig/network-scripts中增加一个文件ifcfg-eth0:1)
增加各个虚拟主机对应的文件夹
修改/etc/hosts文件 添加我们域名解析的信息,方便我们测试
10.0.7.101 www.example.com
10.0.7.101 www1.example.com
10.0.7.101 www2.example.com
修改httpd.conf 文件,监听本机所有ip地址的80和8001端口:
Listen 80
Listen 8001
配置虚拟主机部分:
NameVirtualHost 10.0.7.101:80 指定在这个ip的80端口上启动基于不同域名的虚拟主机
<VirtualHost 10.0.7.100:80>
DocumentRoot /var/www/html
ServerName 10.0.7.100
</VirtualHost>
<VirtualHost 10.0.7.100:8001>
DocumentRoot /var/www/8001
ServerName 10.0.7.100
</VirtualHost>
<VirtualHost 10.0.7.101:80>
DocumentRoot /var/www/www
ServerName www.example.com
</VirtualHost>
<VirtualHost 10.0.7.101:80>
DocumentRoot /var/www/www1
ServerName www1.example.com
</VirtualHost>
<VirtualHost 10.0.7.101:80>
DocumentRoot /var/www/www2
ServerName www2.example.com
</VirtualHost>
重启apache
service httpd restart
结果





现在要求不能使用ip地址访问,只能使用域名访问
<VirtualHost 10.0.7.101:80>
DocumentRoot /var/www/error(将error下的index.html内容改为 “请使用域名访问,域名是……”)
ServerName 10.0.7.101 (这里一定将域名改为IP地址)
</VirtualHost>
解决2:使用apache网络容器 <Location>
新增加一台虚拟主机,将ip访问定位到这里
<VirtualHost 10.0.7.101:80>
DocumentRoot /var/www/www
ServerName 10.0.7.101 (这里一定将域名改为IP地址)
<Location /> (配置location网络容器)
Order allow,deny
Deny from all
</Location>
</VirtualHost>
一定将这个虚拟主机放在 基于名称访问的所有虚拟主机 最前的位置
解决3:使用apache文件容器 <Directory>
新增加一台虚拟主机,将ip访问定位到这里
<VirtualHost 10.0.7.101:80>
DocumentRoot /var/www/www
ServerName 10.0.7.101 (这里一定将域名改为IP地址)
<Directory /var/www/www> (配置Directory容器)
Order allow,deny
Deny from all
</Directory>
</VirtualHost>
也将这个虚拟主机放在 基于名称访问的所有虚拟主机 最前的位置
apache的容器 <Location> <Directory>放在另一篇中讲
注意:主配置文件中的域名如果也需要访问,可以使用下列方法
<VirtualHost 10.0.7.101:80>
DocumentRoot /var/www/www
ServerName *
</VirtualHost>
Apache httpd.conf配置文件 3(虚拟主机)的更多相关文章
- Apache httpd.conf配置文件 2(Main server configuration)
### Section 2: 'Main' server configuration # # The directives in this section set up the values used ...
- [原]生产环境下的nginx.conf配置文件(多虚拟主机)
[原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在 ...
- Apache httpd.conf配置文件 1(Global Environment )
Apache 版本: Server version: Apache/2.2.15 总计 1000行左右 英文前带井号的是注释,不起作用. 但很多注释去掉前方的 # 即可生效. # # This i ...
- Apache httpd.conf配置文件主要内容解释
1 ServerRoot 配置 ["ServerRoot" 主要用于指定Apache的安装路径,此选项参数值在安装Apache时系统会自动把Apache的路径写入.Windows安 ...
- Apache httpd.conf 配置文件语法验证
Apache 的 httpd.conf文件改动之后,必须重新启动server才干生效. 有时server在提供服务的时候,直接更改配置,重新启动服务.会带来非常大的危急性. 假设能在改动配置之后,先验 ...
- Apache httpd.conf的翻译
本人初学,15年暑假翻译了一些,前几天翻译完,有机器翻译,也有自己翻译的内容,不准确之处请指出. --------------------------------------------------- ...
- httpd基础配置和虚拟主机的配置方法
RedHat6.5 httpd实验的大概步骤 #解包 tar zxf httpd-2.2.17.tar.gz -C /usr/src#切换到目录 cd /usr/src/httpd-2.2.17/# ...
- Apache2 httpd.conf配置文件中文版详解
Apache2 httpd.conf配置文件中文版详解## 基于 NCSA 服务的配置文件.##这是Apache服务器主要配置文件.#它包含服务器的影响服务器运行的配置指令.#参见以取得关于这些指令的 ...
- apache WEB服务器安装(包括虚拟主机)
一.apache下载编译安装 yum install apr apr-devel apr-util apr-util-devel gcc-c++ wget tar -y cd /usr/src wge ...
随机推荐
- Java配置文件读取中文乱码问题
背景 这是我之前在做的用友服务对接开发,昨天领导拿给财务测试时告诉我有乱码,当时我第一想法是用友那边的编码格式有问题,因为还在做其他任务,我说等问一下用友他们用的什么编码格式我们这边改一下,然后今天早 ...
- Linux内存管理解析(一) : 分段与分页机制
背景 : 在此文章里会从分页分段机制去解析Linux内存管理系统如何工作的,由于Linux内存管理过于复杂而本人能力有限.会尽量将自己总结归纳的部分写清晰. 从实模式到保护模式的寻址方式的不同 : 1 ...
- 玩转Django2.0---Django笔记建站基础七(表单与模型)
第七章 表单与模型 表单是搜集用户数据信息的各种表单元素的集合,作用是实现网页上的数据交互,用户在网站输入信息,然后提交到网站服务器端进行处理(如数据录入和用户登录.注册等). 用户表单是web开发的 ...
- 《Sequence Models》课堂笔记
Lesson 5 Sequence Models 这篇文章其实是 Coursera 上吴恩达老师的深度学习专业课程的第五门课程的课程笔记. 参考了其他人的笔记继续归纳的. 符号定义 假如我们想要建立一 ...
- 安装 Xen
安装 Xen 安装支持 Xen 的相关工具: $ sudo apt-get install ubuntu-xen-server 下载和安装支持 Xen 的 Linux 内核: http://secur ...
- Python3之json文件操作
json函数 使用json函数之前,首先需要导入json模块,import json 1).json.dumps()函数 该函数是将 Python 对象编码成 JSON 字符串,例如: import ...
- CF990G
题意 https://codeforces.com/contest/990/problem/G 思考 在200000以内,因数个数最多的数位166320,共有160个因数.可以知道,从一个节点向下走最 ...
- Centos7搭建FastFDS----分布式文件服务系统服务端
一.FastDFS介绍 FastDFS开源地址:https://github.com/happyfish100 参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件系统 1.1简 ...
- 爬虫之 cookie , 验证码,模拟登陆,线程
需求文档的定制 糗事百科的段子内容和作者(xpath的管道符)名称进行爬取,然后存储到mysql中or文本 http://sc.chinaz.com/jianli/free.html爬取简历模板 HT ...
- centos7+ docker 实践部署docker及配置direct_lvm
转载于博客园:http://www.cnblogs.com/Andrew-XinFei/p/6245330.html 前言 Docker现在在后端是那么的火热..尤其当笔者了解了docker是什么.能 ...