做为一个专业挖坑20年的互联网爱好者,这几天有新的小(大)项(坑)目(啊)要发布,于是发现原先的jetty不够用了,只放一个项目怎么可以,于是决定重新配置一下,多配几个端口,然后一个端口对应一个项目,分别用nginx反代上去。
经过查看jetty的官方文档,配合google之后,搞定了,简单总结下,给需要的朋友做个参考

注:我用的是jetty-distribution-9.1.4.v20140401这个版本的,jetty9需要JDK1.7的支持,要是java环境是1.6会报错的。此外,这个配置方法是自己摸索的,可能有不完善的地方,希望大家能给点改进意见

首先,为了不影响之前的项目,我干脆新建了一个文件夹“vapps”(原webapps不去动它),用来存放新项目,每个项目一个文件夹,每个项目的文件夹里放项目的war包已经该项目的配置文件,互不干扰
vapps-struct.png

这里的xml文件示例配置如下,这是参考jetty自带的test项目的xml文件修改的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<!-- ==================================================================
Configure and deploy the test web application in $(jetty.home)/webapps/test

Note. If this file did not exist or used a context path other that /test
then the default configuration of jetty.xml would discover the test
webapplication with a WebAppDeployer.  By specifying a context in this
directory, additional configuration may be specified and hot deployments
detected.
===================================================================== -->

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!-- Required minimal context configuration :                        -->
  <!--  + contextPath                                                  -->
  <!--  + war OR resourceBase                                          -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <Set name="contextPath">/</Set>
  <Set name="war"><Property name="jetty.webapps" default="."/>/twe.war</Set>

  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <!-- Optional context configuration                                  -->
  <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
  <Set name="extractWAR">true</Set>
  <Set name="copyWebDir">false</Set>
  <Set name="defaultsDescriptor"><Property name="jetty.home" default="."/>/etc/webdefault.xml</Set>
  
  <!-- Enable WebSocket container -->
  <Call name="setAttribute">
    <Arg>org.eclipse.jetty.websocket.jsr356</Arg>
    <Arg type="Boolean">true</Arg>
  </Call>
  
  <!-- Enable symlinks 
  <Call name="addAliasCheck">
    <Arg><New class="org.eclipse.jetty.server.handler.AllowSymLinkAliasChecker"/></Arg>
  </Call>
  -->
  
  <!-- virtual hosts -->
  <Set name="virtualHosts">
    <Array type="String">
      <Item>www.28ceng.com</Item>
      <Item>*.28ceng.com</Item>
    </Array>
  </Set>
  

  <!-- disable cookies
  <Get name="sessionHandler">
     <Get name="sessionManager">
        <Set name="usingCookies" type="boolean">false</Set>
     </Get>
  </Get>
  -->

  <!-- Non standard error page mapping -->
  <!--
  <Get name="errorHandler">
    <Call name="addErrorPage">
      <Arg type="int">500</Arg>
      <Arg type="int">599</Arg>
      <Arg type="String">/dump/errorCodeRangeMapping</Arg>
    </Call>
  </Get>
  -->

  <!-- Add context specific logger
  <Set name="handler">
    <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
      <Set name="requestLog">
    <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
      <Set name="filename"><Property name="jetty.logs" default="./logs"/>/test-yyyy_mm_dd.request.log</Set>
      <Set name="filenameDateFormat">yyyy_MM_dd</Set>
      <Set name="append">true</Set>
      <Set name="LogTimeZone">GMT</Set>
    </New>
      </Set>
    </New>
  </Set>
  -->

</Configure>

此外,还要配置jetty的service,并且指定一个端口,在etc里新建一个xml配置文件
etc-xml.png

这里的xml文件示例配置如下,这里指定了一个8081的端口:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
 
<Configure id="TweServer" class="org.eclipse.jetty.server.Server">
    <Set name="handler">
      <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
        <Set name="handlers">
         <Array type="org.eclipse.jetty.server.Handler">
           <Item>
             <New id="TweContexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
           </Item>
           <Item>
             <New class="org.eclipse.jetty.server.handler.DefaultHandler"/>
           </Item>
         </Array>
        </Set>
      </New>
    </Set>
 
  <Call name="addConnector">
    <Arg>
      <New class="org.eclipse.jetty.server.ServerConnector">
        <Arg name="server"><Ref refid="TweServer" /></Arg>
        <Set name="port">8081</Set>
      </New>
    </Arg>
  </Call>
 
  <Call name="addBean">
    <Arg>
      <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
        <Set name="contexts">
          <Ref refid="TweContexts" />
        </Set>
 
        <Call id="webappprovider" name="addAppProvider">
          <Arg>
            <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
              <Set name="monitoredDirName"><Property name="jetty.home" default="." />/vapps/twe</Set>
              <Set name="defaultsDescriptor"><Property name="jetty.home" default="." />/etc/webdefault.xml</Set>
              <Set name="configurationManager">
                <New class="org.eclipse.jetty.deploy.PropertiesConfigurationManager"/>
              </Set>
            </New>
          </Arg>
        </Call>
      </New>
    </Arg>
  </Call>
</Configure>

配完时候为了在启动jetty的时候能自动启动新增的这个server,需要配置一下jetty.conf,直接加一行,把新增的xml配置文件的文件名写进去就OK,至于这个conf文件的功能,注释上写的很清楚了,是为了jetty.sh脚本启动jetty的时候读取使用的

jettyconf.png

这样配完之后,直接运行

./jetty.sh start

命令启动jetty,然后就OK啦,这时候访问你的IP:8081就可以访问这个项目了

或者可以根据每个项目分别配置的XML文件分别启动

如:在 Jetty 根目录下的命令行下输入 java -jar start.jar etc/jetty-meng.xml
start.jar 后面内容是传递给start.jar的参数,多个参数用空格隔开
比如这边也可以一次传多个 java -jar start.jar etc/jetty-meng.xml etc/jetty-twe.xml

至于nginx的反响代理,也顺便贴一下,是网上搜的……

server
    {
        listen       80;
        server_name www.28ceng.com 28ceng.com;
        index index.html index.htm index.php default.html default.htm default.php;

    
 location / {
            
             index  index_tel.jsp index.jsp index.html index.htm ;

             proxy_redirect          off;  
             proxy_set_header        Host            $host;  
             proxy_set_header        X-Real-IP       $remote_addr;  
             proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;  
             client_max_body_size    10m;  
             client_body_buffer_size 128k;  
             proxy_buffers           32 4k;
             proxy_connect_timeout   90;  
             proxy_send_timeout      90;  
             proxy_read_timeout      90;  
             proxy_pass http://localhost:8081;
      }
        access_log off;
    }