配置apache + tomcat 绑定泛域名

    技术2022-07-05  147

    转载于:

    http://blog.csdn.net/antitest/archive/2008/01/27/2067975.aspx

     

    前段时间,写了关于如何将Apache与tomcat整合起来一起提供服务,Apache提供静态网页的访问支持,tomcat则提供动态页面如jsp,servlet的支持能力。这几天有一个同仁在邮件里面问我关于如何配置apache + tomcat 绑定泛域名,这几天也考完试了,所以就整理整理了思维,开始解决这个问题。在解决之前,需要对几个概念作一些解释:什么是泛域名比如说你有一个域名:yuan.hust 那么,你希望所有的以yuan.hust结尾的URL都指向同一个地方,比如说你的主网是www.yuan.hust,你希望你的test.yuan.hust,test2.yuan.hust 也都指向www.yuan.hust,这个就是泛域名解析,即 *.域名 解析到同一独立IP,在域名前添加任何子域名,均可访问到所指向的WEB地址。OK,现在知道了什么是泛域名解析了,我们现在开始来进行泛域名解析的工作。要完成泛域名解析,需要我们做两个方面的工作,第一方面,域名那部分的处理,第二方面,就是服务器的处理。在域名的管理部分,要对域名进行泛域名解析的设置,这个是在你申请的域名服务那里进行操作。各个服务商的操作可能不太会一样,但其核心都是一致的,即将*.你的域名 映射到你的服务器的IP。上一部分完成之后,就开始了下一部分的工作,如何对Apache服务器进行设置,让其能够满足泛域名解析。在这里还要提到一点,这里实现泛域名解析与TOMCAT的关系不大。APACHE与TOMCAT的配合在之前的文章已经讲过,配合的核心就是设置什么样的请求会转交给TOMCAT进行处理,所以这里基本就不再提TOMCAT。要对Apache进行泛域名设置,那么就要先了解如何对Apache进行域名绑定。这里先解释一样,什么是域名绑定。域名绑定通俗的讲,就是将你的域名与你的服务器绑定到一起。比如说,你有两个域名 www.yuana.com  www.yuanb.com,但是,你只有一台服务器,这个服务器只有一个IP,那么如何做到www.yuana.com访问到的是你设置的a网站,www.yuanb.com访问到的是你设置的b网站呢? 在域名管理的时候,设置域名的时候,只是将一个域名和一个IP绑定到一起,你访问www.yuana.com与访问www.yuanb.com都是指向的同一个IP,你如何保证其访问到的是不同的站点? 这个就是域名绑定的问题了。当然,要做到域名绑定,还需要做另外一个事情,那就是在Apache中建立虚拟主机,当建立虚拟主机的时候,将域名与你建立的虚拟主机进行对应,那么就可以做到域名绑定了。这个过程的基本思想就是:浏览器访问URL->域名服务器对URL进行解析,找到对应的IP,向对应IP的机器发送请求->Apache服务器接收到请求,分析URL,找到对应的虚拟主机->访问完成现在原理基本上清楚了,我们开始进行虚拟主机与域名绑定的操作,其实挺简单,几句话就搞定。我是在UBANTU下面进行的操作,之前在WINDOWS下面,那个配置文件太散乱了,并不如LINUX下面清楚,这也是网上曾经有个兄弟说Apache泛域名解析不成功的一个重要原因(在这里,也小鄙视下微软这个垃圾)。在UBANTU下面,打开 /etc/apache2/sites-available/default 文件,这个文件就是对于Apache的虚拟主机进行配置的文件。里面内容如下:NameVirtualHost *<VirtualHost *>    ServerAdmin webmaster@localhost    DocumentRoot /var/www/    ServerName localhost    <Directory />        Options FollowSymLinks        AllowOverride None    </Directory>    <Directory /var/www/>        Options Indexes FollowSymLinks MultiViews        AllowOverride None        Order allow,deny        allow from all        # This directive allows us to have apache2's default start page                # in /apache2-default/, but still have / go to the right place                #RedirectMatch ^/$ /apache2-default/    </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/    <Directory "/usr/lib/cgi-bin">        AllowOverride None        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch        Order allow,deny        Allow from all    </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,    # alert, emerg.    LogLevel warn

        CustomLog /var/log/apache2/access.log combined    ServerSignature On

        Alias /doc/ "/usr/share/doc/"    <Directory "/usr/share/doc/">        Options Indexes MultiViews FollowSymLinks        AllowOverride None        Order deny,allow        Deny from all        Allow from 127.0.0.0/255.0.0.0 ::1/128    </Directory>

    </VirtualHost>在这里,*表示了进行动态IP绑定,因为有的时候,服务器的IP会更换,如果设置了动态IP绑定,那么只要是指向本机的IP的请求,都会得到服务器的响应(关于IP绑定的请参考其它资料,这里不详细讲明)在这里的配置,是Apache安装好后的一个默认的主机配置,ServerName可以设置成我们的域名,那么发送过来的请求就可以对应到相应的虚拟主机了,DocumentRoot /var/www/  说明了虚拟主机对应的访问文件目录。我们对这个文件进行修改如下:NameVirtualHost *<VirtualHost *>    ServerAdmin webmaster@localhost    DocumentRoot /var/www/    #yuana.vicp.net是我申请的域名,添加了A记录到我的IP    ServerName yuana.vicp.net    <Directory />        Options FollowSymLinks        AllowOverride None    </Directory>    <Directory /var/www/>        Options Indexes FollowSymLinks MultiViews        AllowOverride None        Order allow,deny        allow from all        # This directive allows us to have apache2's default start page                # in /apache2-default/, but still have / go to the right place                #RedirectMatch ^/$ /apache2-default/    </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/    <Directory "/usr/lib/cgi-bin">        AllowOverride None        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch        Order allow,deny        Allow from all    </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,    # alert, emerg.    LogLevel warn

        CustomLog /var/log/apache2/access.log combined    ServerSignature On

        Alias /doc/ "/usr/share/doc/"    <Directory "/usr/share/doc/">        Options Indexes MultiViews FollowSymLinks        AllowOverride None        Order deny,allow        Deny from all        Allow from 127.0.0.0/255.0.0.0 ::1/128    </Directory>

    </VirtualHost>

    <VirtualHost *>    DocumentRoot /home/yuan/program/tomcat-6.0.14/webapps/yuan/    #hustyuana.vicp.net是我申请的域名,添加了A记录到我的IP    ServerName hustyuana.vicp.net    DirectoryIndex index.html        <Directory />                Options FollowSymLinks                AllowOverride None        </Directory>        <Directory /home/yuan/program/tomcat-6.0.14/webapps/yuan/>                Options Indexes FollowSymLinks MultiViews                AllowOverride None                Order allow,deny                allow from all                # This directive allows us to have apache2's default start page                # in /apache2-default/, but still have / go to the right place                #RedirectMatch ^/$ /apache2-default/        </Directory></VirtualHost>

    在这里,虚拟主机,及其访问目录都已经设置完毕,现在将Apache重启,sudo /etc/init.d/apahce2 restart在Firefox里面输入 http://yuana.vicp.net 及输入http://hustyuana.vicp.net ,可以看到现在访问到的内容已经不一样了。注:我是在www.oray.cn上面申请的免费域名进行的测试,在配置进,也可以到这个网站上面申请域名服务进行测试。

    完成前面的工作之后,可以开始最重要的工作了,当然,这个工作其实也挺简单的。在前面说到,我们在域名管理的时候,可以对域名进行泛域名解析,即*.yuan.hust都发向同一个IP地址,到了这里,我们的工作其实已经很明确了,即发过来的*.yuan.hust,如何对应到我想要它们对应的虚拟主机上。这里就要对虚拟主机进行配置ServerName 要配置成 *.yuan.hust ,它的含义就是所有的 *.yuan.hust之类的url都对应到这个主机上面,如test.yuan.hust, test2.yuan.hust都会对应到这个虚拟主机上面,到此,完成所有的配置了,你可以在浏览器里面对这些进行测试了,Good luck!在这里,还有另外一个问题需要说明,比如前面的配置文档,我们配置了两个虚拟主机,这里有一个默认虚拟主机的意义。是什么意思呢?也就是说,如果一个URL指向的是我们的服务器IP,但是,它的URL与我们建立的两个虚拟主机的ServerName都不同,这个时候,Apache的默认主机会提供服务,在上面我们的配置中,yuana.vicp.net会提供默认服务。在这里将这个提出来,是因为这个地方不清楚的话,有时候会比较混乱,在网上看到一些人问的问题,其实根源就在这里。

    最后,感谢网上的好友们,谢谢你们的关心,也很高兴能与你们交流。如果有什么问题的话,请在BLOG里面留言或者给我发邮件 : yuanabcd2008@163.com

    本文来自博客,转载请标明出处:http://blog.csdn.net/antitest/archive/2008/01/27/2067975.aspx


    最新回复(0)