设为首页 收藏本站
查看: 897|回复: 0

[经验分享] jetty-如何配置虚拟主机【转】

[复制链接]

尚未签到

发表于 2017-3-1 12:04:19 | 显示全部楼层 |阅读模式
jetty-如何配置虚拟主机[转]http://weifly.iteye.com/blog/1152688

官方配置:http://wiki.eclipse.org/Jetty/Howto/Configure_Virtual_Hosts

http://www.eclipse.org/jetty/documentation/current/configuring-virtual-hosts.html

http://www.eclipse.org/jetty/documentation/

jetty详解 http://blog.csdn.net/kongxx/article/category/1068538




一.jetty调优

jetty使用的是java的nio ,nio在请求分配bytebuffer时有二种,一种是分配应用内存,一种是分配系统内存~~
如果是嵌入式的方式启动的Server,加上这么两行代码即可。
SelectChannelConnector conn = new SelectChannelConnector();
conn.setUseDirectBuffers(false);




<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8877"/></Set>
<Set name="maxIdleTime">300000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="useDirectBuffers">false</Set>
<Set name="lowResourcesConnections">20000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>
  第二种在jetty的jetty.XML配置文件的<Configure id="Server" class="org.eclipse.jetty.server.Server">节点下加入如下内容:



<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>-1</Arg>
</Call>
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.Request.maxFormKeys</Arg>
<Arg>-1</Arg>
</Call>



修改start.ini文件中的如下部分:
--exec
-Dsun.rmi.dgc.client.gcInterval=3600000
-Dsun.rmi.dgc.server.gcInterval=3600000
# -Dcom.sun.management.jmxremote
# -Dorg.eclipse.jetty.util.log.IGNORED=true
# -Dorg.eclipse.jetty.util.log.stderr.DEBUG=true
# -Dorg.eclipse.jetty.util.log.stderr.SOURCE=true
-Xmx2000m
-Xmn512m
-XX:PermSize=512m
-XX:MaxPermSize=1024m
# -verbose:gc
# -XX:+PrintGCDateStamps
# -XX:+PrintGCTimeStamps
# -XX:+PrintGCDetails
# -XX:+PrintTenuringDistribution
# -XX:+PrintCommandLineFlags
# -XX:+DisableExplicitGC
-XX:+UseConcMarkSweepGC
# -XX:ParallelCMSThreads=2
-XX:+CMSClassUnloadingEnabled  
# -XX:+UseCMSCompactAtFullCollection
# -XX:CMSInitiatingOccupancyFraction=80
#-----------------------------------------------------------
新增的 -Dsun.rmi.dgc.client.gcInterval=3600000,
-Dsun.rmi.dgc.server.gcInterval=3600000是设置客户端和服务端GC启动的时间。
-Xmx2000m最大缓存空间、
-Xmn512m新生代大小、

  • -XX:PermSize=512m内存永久区初始大小、[/*]
  • -XX:MaxPermSize=1024m最大永久区大小,[/*]
  • -XX:MaxPermSize=1024m允许CMS清楚老年代,[/*]
  • -XX:+CMSClassUnloadingEnabled,[/*]
  • -XX:+CMSClassUnloadingEnabled 允许CMS清楚持久代。[/*]
-

  • 设置了这些后,问题成功解决。[/*]








虚拟主机是注册在DNS中的IP地址的替代名。虚拟主机有两种形式:


  • 多个名称可以解析到一个IP地址。
  • 多宿主主机,即具有多个网络接口的机器,每个IP地址可以有不同的名称。
  Jetty使用者在配置web应用程序时,经常要考虑到不同虚拟主机的情况。通常情况下,单个IP地址的机器有不同的DNS解析名称与它相关联,在其上部署的webapp必须能够通过所有的解析名称访问到。另一种可能性是从不同的虚拟主机访问不同的web应用程序。让我们来看看这些可能性。
  你可以通过几种不同的方式设置虚拟主机,包括:


  • 使用context目录中的context XML文件:setVirtualHosts 。这是首选方法。
  • 内嵌Jetty用法中的一个Java调用:内嵌Jetty 。
  • jetty.xml 中列出的明确部署的web应用(不通过deployer),或类似的机制。
  • 使用WEB-INF/jetty-web.xml文件(已过时,但是可以和webapp deployer一起使用,如果你不使用context deployer)。
  有关配置Jetty的各种方法的说明,请参阅如何配置Jetty ,其中包括了详细配置文档的链接。
  接下来的示例使用首选方式设置虚拟主机,通过调用方法ContextHandler.setVirtualHost setVirtualHosts 。



配置虚拟主机
  当配置web应用程序时,你可以设置一个IP地址和名称列表,只有通过列表中的地址才能访问到应用程序。假设我们有一台机器具有如下IP地址和DNS域名:


  • 333.444.555.666
  • 127.0.0.1
  • www.blah.com
  • www.blah.net
  • www.blah.org
  假设我们有一个web应用程序xxx.war,我们希望通过所有上述的名称和地址都能访问到这个应用。然后,我们将这样配置web应用:



<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/xxx</Set>
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/xxx.war</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>333.444.555.666</Item>
<Item>127.0.0.1</Item>
<Item>www.blah.com</Item>
<Item>www.blah.net</Item>
<Item>www.blah.org</Item>
</Array>
</Set>
</Configure>

  假设我们已经配置了一个连接器,监听8080端口,那么web应用“xxx.war”将可以通过以下地址访问:


  • http://333.444.555.666:8080/xxx
  • http://127.0.0.1:8080/xxx
  • http://www.blah.com:8080/xxx
  • http://www.blah.net:8080/xxx
  • http://www.blah.org:8080/xxx



为不同的虚拟主机配置不同的web应用
  简单的为每个web应用提供不同的虚拟主机列表。例如:假设我们虚拟的主机有这些DNS域名和IP地址:


  • 333.444.555.666
  • 127.0.0.1
  • www.blah.com
  • www.blah.net
  • www.blah.org
  • 777.888.888.111
  • www.other.com
  • www.other.net
  • www.other.org
  假设我们有另外一个web应用“zzz.war”。我们希望xxx.war如上部署,zzz.war只部署在777.888.888.111、www.other.com、www.other.net和www.other.org中:



<!-- webapp xxx.war -->
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/xxx</Set>
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/xxx.war</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>333.444.555.666</Item>
<Item>127.0.0.1</Item>
<Item>www.blah.com</Item>
<Item>www.blah.net</Item>
<Item>www.blah.org</Item>
</Array>
</Set>
</Configure>



<!-- webapp zzz.war -->
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/zzz</Set>
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/zzz.war</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>777.888.888.111</Item>
<Item>www.other.com</Item>
<Item>www.other.net</Item>
<Item>www.other.org</Item>
</Array>
</Set>
</Configure>

  web应用xxx.war在下列地址仍然可用:


  • http://333.444.555.666:8080/xxx
  • http://127.0.0.1:8080/xxx
  • http://www.blah.com:8080/xxx
  • http://www.blah.net:8080/xxx
  • http://www.blah.org:8080/xxx
  但现在web应用zzz.war在下列地址可用:


  • http://777.888.888.111:8080/zzz
  • http://www.other.com:8080/zzz
  • http://www.other.net:8080/zzz
  • http://www.other.org:8080/zzz



为不同的虚拟主机配置不同的web应用,但是具有相同的上下文(context path)
  在上面的例子中,我们使得web应用zzz.war在一个特定虚拟主机集合中可用,并且上下文是/zzz。我们其他的web应用在不同的虚拟主机集合中,不同的上下文路径中可用。如果我们希望web应用在同一上下文路径,但是不同的虚拟主机集合中可用,会发生什么呢?
  很简单,我们只需为每个web应用提供相同的上下文路径,保留之前定义的不相交的虚拟主机集合:



<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/xxx.war</Set>
<Set name="contextPath">/</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>333.444.555.666</Item>
<Item>127.0.0.1</Item>
<Item>www.blah.com</Item>
<Item>www.blah.net</Item>
<Item>www.blah.org</Item>
</Array>
</Set>
</Configure>



<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="war"><SystemProperty name="jetty.home"/>/webapps/zzz.war</Set>
<Set name="contextPath">/</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>777.888.888.111</Item>
<Item>www.other.com</Item>
<Item>www.other.net</Item>
<Item>www.other.org</Item>
</Array>
</Set>
</Configure>

  现在,web应用xxx.war通过下面地址访问:


  • http://333.444.555.666:8080/
  • http://127.0.0.1:8080/
  • http://www.blah.com:8080/
  • http://www.blah.net:8080/
  • http://www.blah.org:8080/
  web应用zzz.war通过下面地址访问:


  • http://777.888.888.111:8080/
  • http://www.other.com:8080/
  • http://www.other.net:8080/
  • http://www.other.org:8080/



配置非ASCII字符的虚拟主机
  国际域名 是含有非ASCII字符的名称。例如:http://www.b&uuml;cher.com。DNS内部仍然是基于ASCII的,所以这些类型的名称需要编码处理后存储为ASCII格式,编码规则叫punycode 。现代浏览器将检测URL中的这些非ASCII字符,并自动使用Punycode码编码。例如,键入这个网址到浏览器:
  http://www.&aring;&auml;&ouml;.com:8080/test/
  被翻译成以下的URL:
  http://www.xn--4cab6c.com:8080/test/
  对于在jetty虚拟主机中使用国际域名的情况,你需要在你的context xml文件中配置punycoded形式的名称(当然,你需要在DNS中提供punycoded形式的域名)。
  下面是一个例子。意思是,我在8080端口运行了一个上下文为/test的web应用,我要配置的虚拟主机为www.&aring;&auml;&ouml;.com。我在context xml文件中配置了域名的ASCII等效格式:



<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/</Set>
<Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/test.war</Set>
<Set name="virtualHosts">
<Array type="String">
<Item>www.xn--4cab6c.com</Item>
</Array>
</Set>
</Configure>

  在启动Jetty后,我将能够在我的浏览器中输入http://www.&aring;&auml;&ouml;.com:8080/test/形式的url来访问我的web应用。
  请注意,如果我没有部署任何“/”上下文的web应用,访问http://www.&aring;&auml;&ouml;.com:8080的请求将由Jetty默认处理器处理,这会返回一个404页面并列出可用的上下文:



<H2>Error 404 - Not Found.</H2>
No context on this server matched or handled this request.<BR>
Contexts known to this server are:
<ul><li><a href="http://www.xn--4cab6c.com:8080/test">/test&nbsp;@&nbsp;www.xn--4cab6c.com:8080&nbsp;--->&nbsp;WebAppContext@82d210@82d210/test,file:/tmp/Jetty_0_0_0_0_8080_test.war__test_www.xn..4cab6c.com_1jadjg/webapp/,/home/janb/src/jetty-eclipse/jetty/trunk/jetty-distribution/target/distribution/webapps/test.war</a></li>
</ul>

  你会发现该链接已经有了punycode编码的域名了。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-348802-1-1.html 上篇帖子: Jetty + HttpClient 处理http请求 下篇帖子: Jetty开发(2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表