使用 Nginx 将子域名连接到 tomcat7 war 实例

使用 Nginx 将子域名连接到 tomcat7 war 实例

我需要clojure2.msms.com使用 Ubuntu 上的 Nginx 网络服务器连接一个 war 实例 (war-demo.war)。

这就是我所做的。

1.设置nginx/tomcat

在 中/etc/nginx/sites-enabled,我设置了 以便tomcat.msms.com连接到 tomcat7。Tomcat7 的安装方式为apt-get(https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-7-on-ubuntu-14-04-via-apt-get)。我还检查了/etc/init.d/tomcat7是否正确安装。

# the IP(s) on which your node server is running. I chose port 3000.
upstream tomcat {
        server 127.0.0.1:8008;
        keepalive 8;
}

# the nginx server instance
server {
        listen 0.0.0.0:80;
        server_name tomcat.msms.com;
        access_log /var/log/nginx/access_tomcat.log;
        error_log /var/log/nginx/error_tomcat.log;

        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;

            proxy_pass http://tomcat/;
            proxy_redirect off;
        }

        location /excluded {
            return 403;
        } 
}

2. war 文件设置

我上传了 war 文件/var/lib/tomcat7/webapps以便tomcat.msms.com/war-demo显示正确的结果。

/var/lib/tomcat7/webapps> ls
ROOT  war-demo.war

3. 连接clojure2.msms.comwar-demo.war

我创建了一个 CNAMEclojure2.msms.com并将此配置文件添加到了ubuntu的目录中/etc/nginx/sites-enabled

server {
    listen  80; 
    server_name clojure2.msms.com;

    location / { 
        proxy_pass                          http://127.0.0.1:8008/;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;  
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    }
}

然后我修改了/etc/tomcat7/server.xml

 146 │       <Host name="clojure2.msms.com" appBase="webapps"                                                         
 147 │           unpackWARS="true" autoDeploy="true">                                                                  
 148 │         <Context path="" docBase="war-demo" debug="0" privileged="true" />                                      
 149 │         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                           
 150 │                prefix="localhost_access_log." suffix=".txt"                                                     
 151 │                pattern="%h %l %u %t &quot;%r&quot; %s %b" resolveHosts="false" />                               
 152 │       </Host>   

我使用 重新启动了 tomcat 服务器sudo service tomcat7 restart,并且我似乎已经clojure2.msms.com从管理器中很好地安装了。

在此处输入图片描述

clojure2.msms.com链接显示的是默认的 tomcat7 服务器,而不是war-demo.war实例。我的配置有什么问题?

答案1

这可以是解决方案之一。

创建另一个服务

  <Service name="Clojure">
    <Connector port="8007" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               redirectPort="8442" />
    <Engine name="Catalina" defaultHost="clojure2">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="clojure2" appBase="webapps2" 
          unpackWARS="true" autoDeploy="true">
      </Host>

    </Engine>
  </Service>

基本目录是 webapps2,它使用新端口 8007。

让 clojure2.conf 使用任何其他端口。

在 中/etc/nginx/sites-enabled,创建一个新nginx服务。

server {
    listen  80; 
    server_name clojure2.msms.com;

    location / { 
        proxy_pass                          http://127.0.0.1:8007/;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;  
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
    }
}

将 war 文件复制到 webapps2 目录中

将 war 文件复制到/var/lib/tomcat7/webapps2目录中。不要忘记将 war 文件名更改为 ROOT.war。

重启 tomcat

tomcat7> sudo service tomcat7 restart
 * Stopping Tomcat servlet engine tomcat7                                [ OK ] 
 * Starting Tomcat servlet engine tomcat7                                [ OK ] 

可能有比这更好的解决方案,但这个解决方案正如我预期的那样有效。

相关内容