Apache默认虚拟主机

一台服务器可以访问多个网站,每个网站都是一个虚拟主机

任何一个域名解析到这台机器,都可以访问的虚拟主机就是默认虚拟主机

#vim /usr/local/apache2.4/conf/httpd.conf/ //搜索httpd-vhost ,去掉#

1.每个VirtualHost *:80 代表一个主机,一个主机就是一个网站,虚拟主机配置文件可以定义多个VirtualHost。

2.在虚拟主机里有一个默认虚拟主机(第一段VirtualHost ),就是无论任何域名解析到这个IP上都会访问这个虚拟主机。当搜索所有配置段,你发现访问的域名没有在配置里面出现,那它就会默认走虚拟主机的配置。

#vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf/ //编辑虚拟主机配置文件

原虚拟主机配置文件:

br/>[email protected]
DocumentRoot "/usr/local/apache2.4/docs/dummy-host.example.com"
ServerNamedummy-host.example.com
ServerAliaswww.dummy-host.example.com
ErrorLog "logs/dummy-host.example.com-error_log"
CustomLog "logs/dummy-host.example.com-access_log" common

br/>[email protected]
DocumentRoot "/usr/local/apache2.4/docs/dummy-host2.example.com"
ServerNamedummy-host2.example.com
ErrorLog "logs/dummy-host2.example.com-error_log"
CustomLog "logs/dummy-host2.example.com-access_log" common

ServerAdmin:指定管理员邮箱,这个没有什么实质作用。
DocumentRoot:为该虚拟主机站点的根目录,网站的程序就放在这个目录下面。
ServerName:为网站的域名,不支持写多个
ServerAlias:为网站的第二域名,只有alias可以写多个域名,用空格分隔。
Errorlog:为站点的错误日志
Customlog:为站点的访问日志。

修改之后的配置文件:


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


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

更改完配置文件之后创建虚拟主机的根目录
#mkdir /data/wwwroot
#mkdir /data/wwwroot/abc.com
#mkdir /data/wwwroot/111.com

在根目录下创建index.php来进行测试
#vim /data/wwwroot/abc.com/index.php

#/usr/local/apache2/bin/apachectl –t //测试语法正确
/usr/local/apache2/bin/apachectl graceful //加载配置文件

然后进行测试
#curl -x192.168.37.130:80 abc.com //测试结果显示abc.com
#curl -x192.168.37.130:80 aaa.com //测试结果显示abc.com

Apache与php结合

httpd的主配置文件/usr/local/apache2.4/conf/httpd.conf

#vim /usr/local/apache2.4/conf/httpd.conf
需要改四处地方:

改ServerName,将#注释掉
Require all denied改为Require all granted //不改会显示状态码403
AddType application/x-httpd-php .php //解析php
DirectoryIndex index.html index.php //索引

#/usr/local/apache2.4/bin/apachectl -t //测试语法
Syntax OK
#/usr/local/apache2.4/bin/apachectl graceful //加载配置文件,报错也不会重启服务

#vim /usr/local/apache2.4/htdocs/1.php //进行测试能否解析php

用浏览器访问,192.168.37.130/1.php

如若解析不成功,有可能是防火墙的原因,此时临时加上iptables规则

#iptables -I INPUT -p tcp --dport 80 -j ACCEPT //临时加上80防火墙规则

#iptables -D INPUT -p tcp --dport 80 -j ACCEPT //删除防火墙规则

#/usr/local/apache2.4/bin/apachectl -t //检测语法是否错误

#/usr/local/apache2.4/bin/apachectl graceful //加载配置文件,报错也不会重启服务

若还是不能解析,则需要看看以下的文件
/usr/local/apache2.4/bin/apachectl -M //是否加载了php模块

ls /usr/local/apache2.4/modules/libphp5.so //是否有php模块文件

#vim /usr/local/apache2.4/conf/httpd.conf //查看配置是否正确