使用nginx如何让一个tomcat下的多个应用可以被多个域名绑定

时间:2022-04-27 17:41:39

这个是原创。

首先下载一个nginx反代理软件。我不说他的原理,只说他能做什么事情。

这个软件能做哪些事情?

1他能处理负载均衡的问题。

2能处理多个站点或者多个应用session共享问题。

3可以让你在一台机器上面的一个tomcat下面的多个应用程序被域名所绑定。(今天讨论的就是这个话题)

首先记住一点:1如果你的服务器是在海外,你的域名不用备案照样可以访问(但是几个弊端,一是访问速度上面因为走的网络的路线不一样会导致你的站点访问很卡,二是由于国家工信部那边需要严格控制互联网信息管理这块,所以如果你不备案,你的站点如果访问量大了,是可以被查封的。而查封的最好的方式就是让用户不能直接去访问你的网络端口80端口,80端口是网络通信的默认端口)2.如果你想要你的站点快,不会存在被封的情况,那你选择的服务器应该是大陆的,可能有人说香港那边的服务器也会很快,我只能说同一样的配置,大陆的肯定是比你香港那边的要快,因为这个要看情况,要看你的站点面向的群体是大陆还是香港。

  所以80端口是网络的默认端口,如果你要让别人访问域名直接就能访问,你必须要监听这个端口。而nginx刚好帮你做了这个事情。

那第一步,我们先让自己的tomcat下面的应用访问起来。这个不用说大家都知道了。

比如现在:http://localhost:8080/site1         http://localhost:8080/site2是你tomcat下面的两个应用;你现在有www.yyyy.com,www.uuu.com,www.zzz.com.

假设你现在想要www.yyy.com,www.uuu.com 访问的时候都访问到site1这个应用去,www.zzz.com访问site2.怎么做?

步骤:tomcat下面的server.xml文件

1先看看你的site1是在tomcat的那个目录,然后复制他的上一层目录。比如我的是在webapps下面的ROOT下面,我在ROOT下面放了两个应用,site1,site2.(首先记住你的目录)

2找到tomcat下的conf下面的server.xml文件。在这个文件里面有一个标签Host,记住是这个,不是Engine标签,Engine是父标签,Host是子标签。

现在把Host子标签删除替换成下面的内容

//这里配置表示你创建了一个虚拟主机,这个虚拟主机可以使用www.yyy.com绑定访问这个C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1应用

- < Host name =" www.yyy.com " debug =" 0 " appBase =" webapps " unpackWARs =" true " autoDeploy =" true " xmlValidation =" false " xmlNamespaceAware =" false " >
  < Context path =" " docBase =" C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1 " />
  </ Host >
//这里配置表示你创建了一个虚拟主机,这个虚拟主机可以使用www.uuu.com绑定访问这个C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1应用
- < Host name =" www.uuu.com " debug =" 0 " appBase =" webapps " unpackWARs =" true " autoDeploy =" true " xmlValidation =" false " xmlNamespaceAware =" false " >
  < Context path =" " docBase =" C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site1 " />
  </ Host >
//这里配置表示你创建了一个虚拟主机,这个虚拟主机可以使用www.zzz.com绑定访问这个 C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site2应用

  < Host  name =" www.zzz.com "  debug =" 0 "  appBase =" webapps "  unpackWARs =" true "  autoDeploy =" true "  xmlValidation =" false "  xmlNamespaceAware =" false " >
   < Context  path =" "  docBase =" C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\site2 "  />
   </ Host >

tomcat这边的事情就处理完了。tomcat操作只要修改server.xml就行了,现在修改好了。

步骤第二大步:nginx怎么做?

1首先现在nginx这个软件。记住他是分不同平台的,有很多版本,根据你的服务器来选择,window下载window版本,linux下载linux版本,别弄错误了。

2下载完了解压nginx随便到服务器的任何一个位置,官方是建议放置在C盘。假设你现在放到了D盘跟目录下,你的nginx解压后,你把这个文件夹改名为nginx,那在这个nginx下面就会有一个nginx.exe(这里指的是window下的),先不要运行这个,如果你运行表示你启动它,先不要启动,先配置。

3找到conf下面的nginx.conf文件,在这个里面会有很多代码,我们不用管,找到server{}这个。server{}可能有多个。我们先看第一个他配置并修改成下面:(那www.yyy.com与www.uuu.com都将会访问到你的site1了,为什么访问到site1?因为你在server.xml中创建了www.yyy.com与www.uuu.com的虚拟主机,然后你在nginx中又进行了配置。当浏览器访问www.yyy.com的时候其实默认是访问www.yyy.com:80由于80端口是默认端口,可以省略。所以你等于是访问了你tomcat的默认项目site1.)记住一点:这些都是在你域名管理那边已经配置你的域名解析是绑定了你的服务器的地址的条件下你才能成功。

server {
        listen       80;
        server_name  www.yyy.com www.uuu.com;


        #charset koi8-r;


        #access_log  logs/host.access.log  main;


       location / {   
    proxy_set_header Host www.yyy.com;
            proxy_pass http://127.0.0.1:8080/;
        
}

}

现在再继续如何让www.zzz.com访问site2了?同样的道理,在nginx.conf中的server{}下面添加一个像上面类似的配置,如:

server {
        listen       80;
        server_name  www.zzz.com;


        #charset koi8-r;


        #access_log  logs/host.access.log  main;


       location / {   
    proxy_set_header Host www.zzz.com;
            proxy_pass http://127.0.0.1:8080/;
        
}

那两个都配置好了。现在先启动tomcat看是否能启动起来,如果能启动,说明你tomcat那边是没问题的了。

然后我们启动你加压到D盘跟目录下面的nginx下面的exe程序,让他监听端口。如果启动起来了。你就成功了。

在浏览器中输入www.yyy.com,www.uuu.com都会访问到site1.www.zzz.com会访问到site2.

这个是本人自己亲身配置得来的结果。网上很多都不够详细,大部分都是copy转贴的。如果有什么疑问联系qq137075251