jetty-如何配置虚拟主机【转】
jetty-如何配置虚拟主机[转]http://weifly.iteye.com/blog/1152688
官方配置:http://wiki.eclipse.org/Jetty/Howto/Configure_Virtual_Hosts
如果是嵌入式的方式启动的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新生代大小、
[list]
[*] -XX:PermSize=512m内存永久区初始大小、[/*]
[*] -XX:MaxPermSize=1024m最大永久区大小,[/*]
[*] -XX:MaxPermSize=1024m允许CMS清楚老年代,[/*]
[*] -XX:+CMSClassUnloadingEnabled,[/*]
[*] -XX:+CMSClassUnloadingEnabled 允许CMS清楚持久代。[/*]
[/list]-
[list]
[*]设置了这些后,问题成功解决。[/*]
[/list]
虚拟主机是注册在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ücher.com。DNS内部仍然是基于ASCII的,所以这些类型的名称需要编码处理后存储为ASCII格式,编码规则叫punycode 。现代浏览器将检测URL中的这些非ASCII字符,并自动使用Punycode码编码。例如,键入这个网址到浏览器:
http://www.åäö.com:8080/test/
被翻译成以下的URL:
http://www.xn--4cab6c.com:8080/test/
对于在jetty虚拟主机中使用国际域名的情况,你需要在你的context xml文件中配置punycoded形式的名称(当然,你需要在DNS中提供punycoded形式的域名)。
下面是一个例子。意思是,我在8080端口运行了一个上下文为/test的web应用,我要配置的虚拟主机为www.åäö.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.åäö.com:8080/test/形式的url来访问我的web应用。
请注意,如果我没有部署任何“/”上下文的web应用,访问http://www.åäö.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 @ www.xn--4cab6c.com:8080 ---> 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编码的域名了。
jetty-如何配置虚拟主机【转】的更多相关文章
- 使用WampServer环境,如何配置虚拟主机域名
很多人不会配置虚拟主机,我这里简单交一下大家,分三步: 1.在 C:\Windows\System32\drivers\etc 文件夹中的文件 Hosts 文件修改代码为: 127.0.0.1 loc ...
- CentOS 7 配置虚拟主机站点
1.进入/etc/httpd/conf 下 将httpd.conf 打开. 2.将DocumentRoot注释掉.(将ServerName 打开要不会有错误警告). 3.将虚拟主机站点配置包含进来:I ...
- 【转】Apache 配置虚拟主机三种方式
Apache 配置虚拟主机三种方式 原文博客http://www.cnblogs.com/hi-bazinga/archive/2012/04/23/2466605.html 一.基于IP 1. 假 ...
- Wampserver2.5配置虚拟主机出现403 Forbidden的处理方案
WampServer是一款由法国人开发的Apache Web服务器.PHP解释器以 及MySQL数据库的整合软件包.免去了开发人员将时间花费在繁琐的配置环境过程,从而腾出更多精力去做开发.在windo ...
- apache配置虚拟主机
步骤如下: 1.在配置文件httpd.conf中启用httpd-vhosts.conf 找到# Virtual hosts将Include conf/extra/httpd-vhosts.conf前的 ...
- Wampserver2.5配置虚拟主机出现403 Forbidden解决办法
一直在用APMServ5.2.6,mysql好办,可以用mariadb代替进行升级,但php升级到5.4.7就没办法再升级,安装加速器也困难.就想迁移到Wampserver上来,以前也尝试过Wamps ...
- nginx 配置虚拟主机
文章转载自:http://www.ttlsa.com/html/1571.html 上篇说道我们的nginx是安装在/usr/local/nginx/ cd conf 我们现在把所有的虚拟主机放在一个 ...
- linux环境下配置虚拟主机域名
linux环境下面配置虚拟主机域名 第一步:在root目录下面(即根目录)ls(查看文件)cd进入etc目录find hosts文件vi hosts 打开hosts文件并进行编辑在打开的文件最下面添加 ...
- apache配置虚拟主机后,启动速度慢
apache配置虚拟主机后,启动速度慢且提示“the requested operation has failed” 可以通过在cmd下启动,来查找问题(命令中的“apache2.2”,是服务名,根据 ...
随机推荐
- copy,retain,assign,strong,weak的区别
引用地址:http://www.aichengxu.com/view/32930 一.assign,copy,retain 1.copy是内容复制,新建一个相同内容的不同指针,retain为指针复制, ...
- iphone 屏幕投射到Mac上
在实际的工作中,我们往往需要演示iPhone上面的程序,但是由于手机屏幕太小,无法同时给很多人看,这时候就需要进行屏幕投射.目前我需要实现的是投射到Mac上.我使用有线USB和无线Airplay两种方 ...
- lua方法点(.)调用和冒号(:)调用区别:
用.定义方法时object.func_name(arg1,arg2...),方法真正的函数签名形式为: object.func_name(arg1, arg2...) 用:定义方法时object:fu ...
- CSS3 calc() 会计算的属性
calc是英文单词calculate(计算)的缩写,是css3的一个新增的功能,你可以使用calc()给元素的border.margin.pading.font-size和width等属性设置动态值. ...
- OSAL多任务资源分配机制
转自OSAL多任务资源分配机制 一.概述 OSAL (Operating System Abstraction Layer),翻译为"操作系统抽象层". 个应用程序对象. ...
- xHtml+css学习笔记
第一节 xHTML规范 *文档方面 -必须定义文档类型(DTD)和名字控件 *标签方面 -所有标签均要小写.关闭.合理嵌套.ID不能重复 -标签属性药有值,属性值要加印号且不能为空 -图片一定要加上a ...
- Being a Hero
zoj3241:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3241 题意:一个国家的地图是一张n个点m条边的有向图.你保 ...
- [转贴] C++ 判断主机是否处于联网状态下
直接让本机访问一个网站,如果成功的话,就说明成功联网,没有访问成功,则说明没有联网!!! #include<iostream> #include <WINSOCK2.H> #p ...
- MVVM_Android-CleanArchitecture
前言 "Architecture is About Intent, not Frameworks" - Robert C. Martin (Uncle Bob) Uncle Bob ...
- [LeetCode#157] Read N Characters Given Read4
Problem: The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is ...