很久之前就手动配置过apache了,今天遇到一个需要在阿里云服务器上配置apache路由多个域名到不同的服务器根目录这样的问题,研究了一段时间,得出了下面的心得,分享给大家~
*以windows系统为例子
下面要会说到的内容:
1 开启多个apache实例,监听多个端口(作用就是方便读取不同的配置文件)
2 单个apache实例监听多个端口
3 单个apache实例监听一个端口(80),实现不同域名访问80端口的时候,指向不同的服务器根目录
1 开启多个apache实例
httpd.exe -k install -n “服务名” -f “d:/apache2.2/conf/web2.conf” 切换到apache的安装目录下bin目录,httpd.exe -k install -n “服务名” -f “新配置路径/配置.conf”
添加新服务之后会提示test失败,原因是添加后没有开启,可以手动开启服务,开启方法可以使用apache提供的ApacheMonitor,选择实例开启~~~
有了多个实例之后,就可以分别去配置实例对应的conf文件了~注意不同实例监听的端口不能相同
2 单个实例监听多个端口
在配置文件找到Listen 80(服务器默认监听80),直接在下行加上Listen8080就可以监听第二个端口了
3 为同个端口配置不同的服务器根目录
这个是重点要说的,在配置文件中添加
#默认虚拟主机 NameVirtualHost *:80 <VirtualHost *:80> ServerName * DocumentRoot "C:/htdocs" <Directory "C:/htdocs"> Options FollowSymLinks IncludesNOEXEC Indexes DirectoryIndex index.html index.htm default.htm index.php default.php index.cgi default.cgi index.pl default.pl index.shtml AllowOverride None Order Deny,Allow Allow from all </Directory> </VirtualHost> #新增虚拟主机 NameVirtualHost *:80 <VirtualHost *:80> ServerName www.hello.com DocumentRoot "C:/hello" <Directory "C:/hello"> Options FollowSymLinks IncludesNOEXEC Indexes DirectoryIndex index.html index.htm default.htm index.php default.php index.cgi default.cgi index.pl default.pl index.shtml AllowOverride None Order Deny,Allow Allow from all </Directory> </VirtualHost>
上面Direcotory不是必要项~
说明:域名可以在提供商处绑定到指定IP,访问域名的时候DNS会将域名解析到指定的IP(访问域名默认为*:80端口),所在IP上的服务器(默认监听80端口)就可以响应访问请求,同时服务器可以知道用户是通过哪个域名访问到服务器的
比如
www.hello.com域名绑定到服务器1.1.1.1
www.welcome.com域名也绑定到服务器1.1.1.1
这样子当有请求来是,服务器是可以知道请求是通过hello.com还是welcom.com进来的,所以就有了上面虚拟主机的配置方法
VirtualHost指定了一个ServerName,就是请求来自哪个域名
上面的配置效果就是,如果有来自www.hello.com的请求,则服务器的根目录为C:/hello,其它域名的根目录就是C:/htdocs了