CentOS7 tomcat 多域名 多应用 添加到 nginx

2019-01-01 13:15:24 2018-09-07 19:17:00 归档 0
CentOS7 tomcat 多域名 多应用 添加到 nginx
Table of Contents

最近遇到一个比较棘手的问题,以前给易班开发了两个应用 网薪商城座位预约 ,都是使用 ssh 开发,是自己学习初期开发出来,将它部署在了 centos + tomcat 的环境上,域名对应我的二级域名 yiban.echocow.cn/YBStore 和 yiban.echocow.cn/YBSeatOrder ,后面的路径对应不同的应用,用 tomcat 做的多域名配置。而后面,又开发了一个 易运动 应用,但是这个应用完全是前后端分离的,使用 nginx 代理静态页面,vertx 做后端部署在服务器的 8000 端口,域名同样使用 yiban.echocow.cn,引用对应的路径为 /YBSport

前提

目前已有的应用,部署在 tomcat 之上

  • tomcat admin —— admin.echocow.cn

  • 网薪商城 ———— yiban.echocow.cn/YBStore

  • 座位预约 ———— yiban.echoocw.cn/YBSeatOrder

配置文件 server.xml 中 Service 如下

<Service name="Catalina">
  <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
         URIEncoding='GBK' acceptCount="500" maxThreads="400"  maxHttpHeaderSize="8192" />
  <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  <Engine name="Catalina" defaultHost="localhost">
    <Realm className="org.apache.catalina.realm.LockOutRealm">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
           resourceName="UserDatabase"/>
      </Realm>
    <!-- 管理员 -->
    <Host name="admin.echocow.cn" appBase="webapps" unpackWARs="true" autoDeploy="true">
      <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log" suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />
    </Host>
    <!-- 易班 -->
    <Host name="yiban.echocow.cn" appBase="webapps/yiban" port="80" protocol="HTTP/1.1"
        connectionTimeout="20000" redirectPort="8443" unpackWARs="true" autoDeploy="true">
        <Context path="/YBSeatOrder" docBase="YBSeatOrder" debug="0" reloadable="true" />
        <Context path="/YBStore" docBase="YBStore" debug="0" reloadable="true" />
    </Host>
  </Engine>
</Service>

有一个新应用 易运动 ,部署在 nginx 上,配置如下:

server {
    listen 80;
    server_name yiban.echocow.cn;
    access_log  logs/yiban.access.log  main;
    location /YBSport {
        root    /root/yiban/;
        index   index.html;
    }
}

问题

tomcat 与 nginx 同时占用了 80 端口,只能舍掉一个,但是只能使用 nginx ,因为 tomcat 对静态页面支持是没有 nginx 好的。

所以,我必须在 不改变原来应用 和 路径 的情况下,将 tomcat 部署到 nginx 之中

解决

一开始不打算修改 tomcat 的配置的,但是后来发现不修改不行。不能使用 tomcat 的域名配置,只能使用 nginx 的域名配置,然后将 tomcat 的应用部署在本地不同端口上,使用 nginx 对不同路径的应用进行重定向至其本地端口上。

tomcat server,xml修改配置文件如下:

<!-- 8080 端口 --- 管理员 -->
<Service name="Catalina">
   <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
               redirectPort="8443"  URIEncoding='GBK'
              acceptCount="500" maxThreads="400"  maxHttpHeaderSize="8192" />
   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
   <Engine name="Catalina" defaultHost="localhost">
     <Realm className="org.apache.catalina.realm.LockOutRealm">
     <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
         resourceName="UserDatabase"/>
     </Realm>
     <!-- 部署到本地 -->
     <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
             prefix="localhost_access_log" suffix=".txt"
             pattern="%h %l %u %t &quot;%r&quot; %s %b" />
     </Host>
  </Engine>
</Service>

<!-- 8081 端口 --- 易班引用 -->
<Service name="Catalina">
  <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
         URIEncoding='GBK' acceptCount="500" maxThreads="400"  maxHttpHeaderSize="8192" />
  <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
  <!-- 部署到本地 -->
  <Engine name="Catalina" defaultHost="localhost">
    <Realm className="org.apache.catalina.realm.LockOutRealm">
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
         resourceName="UserDatabase"/>
    </Realm>
    <Host name="localhost"  appBase="webapps/yiban" port="80" protocol="HTTP/1.1"
        connectionTimeout="20000" redirectPort="8443" unpackWARs="true" autoDeploy="true">
        <Context path="/YBSeatOrder" docBase="YBSeatOrder" debug="0" reloadable="true" />
        <Context path="/YBStore" docBase="YBStore" debug="0" reloadable="true" />
    </Host>
  </Engine>
</Service>

这样,对应下来就是

应用 url

管理员

localhost:8080

网薪商城

localhost:8081/YBStore

座位预约

localhost:8081/YBSeatOrder

nginx 就可以对其交给不同的端口的应用来处理了:

server {
    listen 80;
    server_name yiban.echocow.cn;
    access_log  logs/yiban.access.log  main;
    # 易运动
    location /YBSport {
        root    /root/yiban/;
        index   index.html;
    }
    # 网薪商城
    location /YBStore {
        proxy_pass http://127.0.0.1:8081/YBStore;
        proxy_redirect default;
    }
    # 作为预约
    location /YBSeatOrder/ {
        proxy_pass http://127.0.0.1:8081/YBStore;
        proxy_redirect default;
    }
}

这样就能实现 nginx 即代理静态页面又代理 tomcat 了。

0