vps上部署jetty多个端口多个webapp
做为一个专业挖坑20年的互联网爱好者,这几天有新的小(大)项(坑)目(啊)要发布,于是发现原先的jetty不够用了,只放一个项目怎么可以,于是决定重新配置一下,多配几个端口,然后一个端口对应一个项目,分别用nginx反代上去。
经过查看jetty的官方文档,配合google之后,搞定了,简单总结下,给需要的朋友做个参考
注:我用的是jetty-distribution-9.1.4.v20140401这个版本的,jetty9需要JDK1.7的支持,要是java环境是1.6会报错的。此外,这个配置方法是自己摸索的,可能有不完善的地方,希望大家能给点改进意见
首先,为了不影响之前的项目,我干脆新建了一个文件夹“vapps”(原webapps不去动它),用来存放新项目,每个项目一个文件夹,每个项目的文件夹里放项目的war包已经该项目的配置文件,互不干扰
这里的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配置文件
这里的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的时候读取使用的
这样配完之后,直接运行
./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;
}