很多站长在购买虚拟主机的时候,会看虚拟主机的一些参数,其中最重要的就是支持的程序语言。现在很多IDC商家都在宣称全能主机。
最好笑的一个事情就是,笔者刚建站的时候,购买了国内一家小主机商(名叫主机屋)的虚拟主机,他们宣传就是全能主机,什么语言都支持。这样的幌子去骗一些菜鸟还可以,对于一个懂技术的,就只能对他们的伎俩投以鄙视的眼光。后来询问之后,才知道他们所谓的全能主机,也就仅仅只支持PHP和ASP同时运行(使用IIS运行PHP),连ASP.net都不支持,对于这事,笔者还和他们理论了半天,现在估计再也不敢宣称全能主机了,这样的商家,希望所有站长都能远离,太没有道德了。
首先说说,什么是全能主机。
所谓的全能主机,就是一台服务器上面同时支持多个不同的应用服务器运行,并且能通过外部独立域名访问的主机。这里的多个,要至少大于等于三个。
因为目前来讲,Apache,IIS,Tomcat是目前被广泛使用的三种Web服务器软件,其中Apache,tomcat是开源软件,不仅用于Unix系统,也有基于Win32平台的版本。
IIS是Windows操作系统自带的组件,也提供了强大的Internet和Intranet服务功能。这三种服务器软件各有特色,IIS对ASP+Access的支持比较好,而Apache是PHP+MySQL平台不二的选择,Tomcat是运行java语言程序的服务器。
大家都知道,http只有一个开放端口,就是80端口。外部通过独立域名访问网站的时候,如果不加端口,会默认访问服务器中80端口下面的网站。很现实,这几个应用服务器不可能只用一个端口。如果要访问,则必须通过域名加端口号才能访问,这样显然不利于推广。因此,我们就需要想办法让用户输入简单域名,而我们在后台截获域名,然后动态的解析到不同的端口网站上。
按照这样的思路,笔者想了很多办法,传统的就是重新配置IIS,使其支持PHP+MySQL,或者重新配置Apache使其能支持ASP+Access。但考虑到这两种方法虽然从技术上都能够实现,但配置过程较复杂,不易于推广,不利于初学者使用。况且如果你还搭建了java程序,那就更复杂了。
笔者也没有从事过IDC行业的工作,没有这方面的经验。同时也在思考现在那些全能功能是如何实现的。根据笔者的经验,他们是有一个80端口的服务器做代理分发,将不同的域名分发到不用的应用服务器的网站上。
通过这样的思路,笔者想到了使用Apache的虚拟主机功能和反向代理模块来实现。
什么是Apache虚拟主机。在apache的官方技术网站上是这样定义的。
虚拟主机指的是在单一机器上运行多个网站 (例如 www.company1.com 和 www.company2.com) 。 虚拟主机可以“基于 IP”,即每个 IP 一个站点; 或者“基于名称”, 即每个 IP 多个站点。这些站点运行在同一物理服务器上的事实不会明显的透漏给最终用户。
Apache 是第一个支持基于 IP 的虚拟主机的服务器。 Apache 版本 1.1 和更新的版本同时支持基于 IP 和基于名称的虚拟主机。 基于名称的虚拟主机有时候称为基于主机或非 IP的虚拟主机。
详细地址:http://httpd.apache.org/docs/2.2/vhosts/ 注:本文是基于名称的虚拟主机配置。
什么是反向代理。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个web服务器。
那么我们就将Apache服务器做为一个代理web服务器,用它来处理从外部访问过来的任何请求并且返回给外部。
有兴趣的朋友可以了解下什么是正向代理。
名词术语大概介绍完了,那么本文主要通过一个例子来为大家简述配置的具体方法。
前言:仍然以笔者的www.bxw001.com这个域名为例。这个网站是一个ASP+Access网站,建立在IIS6.0下,端口设置为81。如果不使用反向代理,则用户访问这个网站时,必须使用www.bxw001.com:81 才能正常访问,很麻烦。
通过反向代理设置后,用户仍然使用www.bxw001.com域名网站,但首先会进入到Apache服务器,然后再调转到IIS下的正式网站去。
设置步骤如下:
1、加载Apache的代理模块
打开httpd.conf文件,放开以下几行代码的注释,(将前面的#去掉即可),此时Apache就是一个web代理服务器了。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
2、建立虚拟主机,进行端口重定向
为需要代理的网站建立一个虚拟主机,在此笔者强烈建议,都通过虚拟主机来单独配置。有些朋友可能直接在httpd.conf文件里修改,这样虽然也能实现,但是所有的访问,包括不是代理域名的访问都会进入被代理的网站去。
因为Apache虚拟主机的加载顺序是按照顺序来加载的,如果访问的url配置了虚拟主机,则进行代理访问,如果没有,默认是以第一个的。
因此,需要引入虚拟主机单独的配置文件,在这里面增加虚拟主机配置。
在httpd.conf文件中找到这行代码,Include conf/extra/httpd-vhosts.conf,去掉#注释。
以下关于虚拟主机的配置都在httpd-vhosts.conf下进行。
默认Apache提供了两个样例,不用管,直接注释掉,或者在原来上面修改也可以。
我们是要将站点www.bxw001.com域名的所有访问转向IIS下面的81端口,先增加一个虚拟主机。代码如下:
<VirtualHost *:80>
ServerAdmin webmaster@a.com
DocumentRoot "d:/wwwroot/www.bxw.com"
ServerName bxw001.com
ServerAlias www.bxw001.com
ErrorLog "logs/bxw001.com.log"
CustomLog "logs/bxw001.com.log" common
<Directory "d:/wwwroot/www.bxw.com">
Require all granted
</Directory>
ProxyPass / http://localhost:81/
ProxyPassReverse / http://localhost:81/
</VirtualHost>
解释:
ServerAdmin:这个就是邮箱,可以默认
DocumentRoot:这个是你被代理的网站的根目录地址。我们这就是IIS6.0下面的ASP网站目录。注意目录斜杠的方向。
ServerName :被代理的域名,这里就是你IIS下ASP网站的独立域名。
ServerAlias:同上,别名,一般可以写成一级或者二级域名。
ErrorLog :日志文件地址和名称。一般以域名作为文件名,方便区分,默认存放在apache的logs目录下。
<Directory > 设置虚拟主机的目录的访问权限。笔者建议权限的设定都在虚拟主机下单独设置,而不是在httpd.conf中统一设置成所有都可以访问,这样不安全。
ProxyPass :这个是关键,表示IIS下面ASP网站的真实访问地址,这里写成localhost,也可以写成域名+端口,这要看你在IIS设置的主机头地址了。如果主机头默认,那么这里就是localhost。
ProxyPassReverse :反向代理地址,返回给用户的信息。
同时不要忘记在所有虚拟主机的一开始位置,增加默认虚拟主机配置。
<VirtualHost *:80>
ServerAdmin prograsliu@gmail.com
DocumentRoot "D:/wamp/www"
ServerName localhost
ServerAlias localhost
<Directory "d:/wamp/www">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
这个默认,你可以设置成Apache的www目录。
以上两步操作完成后,保存后重启Apache服务。你可以试着访问ASP网站的域名www.bxw001.com,不要加端口号,看看是否可以正常访问了。呵呵。
如果要增加多个IIS网站或者JAVA网站,只要按照上面的步骤2中的代码增加虚拟主机即可,同时将代理域名写成你需要被代理的网站的URL即可。
通过这样操作,就可以完美实现一个全能主机了,你可以随便在服务器上搭建多个不同环境的网站了。
来源:sixdosoft投稿。