`
weifly
  • 浏览: 238923 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jetty-如何配置虚拟主机

 
阅读更多

jetty中文文档:www.jettycn.com

 

 

介绍

虚拟主机是注册在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&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编码的域名了。

分享到:
评论

相关推荐

    jetty-distribution-9.4.31.v20200723.zip

    - **虚拟主机**:Jetty支持多个虚拟主机,可以在同一服务器上运行不同域名的应用。 4. **安全管理** - **角色与权限**:Jetty支持基于角色的访问控制(RBAC),可以设置用户角色和相应的访问权限。 - **会话管理...

    jetty-distribution-8.1.21.v20160908.zip

    - Jetty的ContextHandler允许你独立地部署多个Web应用,每个都有自己的虚拟主机、配置和上下文路径。 安全性方面,Jetty支持基本的认证机制,如HTTP Basic Auth和Form-based Auth,还可以通过集成Spring Security等...

    Jetty中文手册

    如何配置虚拟主机(Virtual Hosts) 如何配置会话ID(Session IDs) 如何序列化会话(Session) 如何重定向或移动应用(Context) 如何让一个应用响应一个特定端口 使用JNDI 使用JNDI 在JNDI中配置数据源...

    jetty-document

    通过配置虚拟主机,可以在同一台服务器上运行多个具有不同域名的Web应用。 ##### 3.4 安全配置 Jetty提供了丰富的安全机制,包括认证、授权、SSL/TLS加密等。例如,可以通过配置文件启用SSL,确保数据传输的安全性...

    jetty jars

    - **资源管理**:理解Jetty如何加载Web应用的静态资源,如HTML、CSS、JavaScript等,以及如何配置虚拟主机。 总之,Jetty 6.1.7在Eclipse中的配置和使用涉及到服务器配置、Web应用部署、调试等多个环节,每个环节都...

    jetty 6 指南书

    9. **虚拟主机**:如何在Jetty上配置多个虚拟主机,实现多站点托管。 10. **管理服务器**:涵盖日志管理、请求日志、实时状态监控、关闭服务器以及JMX管理。 11. **配置JNDI**:介绍Java Naming and Directory ...

    Jetty权威指南.pdf

    `org.mortbay.xml.XmlConfiguration`类提供了读取和解析Jetty配置文件的能力。用户可以通过这个类来加载配置文件,并将配置信息转换成Java对象模型,方便后续的配置管理和使用。 #### 五、在Jetty中部署Web应用程序...

    jetty指导书

    Jetty支持虚拟主机,可以通过配置`VirtualHost`和相应的`ContextHandler`来实现。 #### 十、管理服务器 **10.1 服务器日志管理** Jetty提供了丰富的日志管理功能,可以通过配置文件来设置日志级别、格式等。 **...

    HelloWorld之jetty运行

    通过创建Server对象并设置Connector(这里使用的是SelectChannelConnector,提供非阻塞I/O),可以指定服务器监听的端口(8080)和主机地址(127.0.0.1)。接着,创建WebAppContext对象,设置Web应用的上下文根(...

    Jetty 学习资料汇总

    3. **WebAppContext**:WebAppContext是Jetty中用于部署Web应用程序的核心类,可以配置虚拟主机、类加载器等。 4. **Jetty与WebSocket**:介绍Jetty对WebSocket协议的支持,包括创建WebSocket服务器端点和客户端...

    jetty6 指南书

    7. **类加载器**、**Jetty Connector的SSL配置**、**虚拟主机**、**管理服务器**、**JNDI配置**、**会话与集群**、**性能优化**、**异步Servlet、Ajax和Comet**以及**嵌入Jetty**等内容,都是指南中详细阐述的主题,...

    集成jetty的j2ee项目demo

    - 分析和理解这个项目,可以帮助开发者掌握如何配置Jetty以满足特定需求,例如设置虚拟主机、部署多个Web应用等。 - 通过修改项目配置,可以学习到如何优化Jetty的性能,比如调整线程池大小、开启GZIP压缩等。 ...

    《Jetty6_指南书》

    - **易用性**: Jetty配置简单,Tomcat配置相对复杂。 - **功能**: Tomcat包含了更多的企业级功能。 #### 二、Jetty初探 ##### 2.1 下载 - **官方下载**: 通常可以在Jetty官方网站上找到最新版本的下载链接。 - *...

    jetty指南书

    Jetty 指南书是一本专注于Jetty web容器的详细教程,主要涵盖了Jetty的基础知识、安装配置、架构解析、服务配置、Web应用程序部署、Handler详解、类加载器、Connector配置、虚拟主机、服务器管理和性能优化等多个...

    jetty使用文档

    12. **虚拟主机**:Jetty允许在单个服务器上配置多个虚拟主机,每个主机可以对应不同的域名或IP。 13. **服务器管理** - 日志管理:控制日志输出和格式。 - 请求日志:记录HTTP请求详情。 - 实时状态:查看...

    myeclipse中jetty和svn检出的插件

    Jetty插件通常会提供图形化的配置界面,使得设置端口、虚拟主机、上下文路径等操作变得简单直观。 接下来是SVN,这是一个分布式版本控制系统,它允许开发团队在不同的地点协同工作,同时跟踪和控制代码的变化。在...

    Jetty6_指南书

    对于Jetty的高级特性,如Handler的详细用法、类加载器、Connector的SSL配置、虚拟主机的设置、服务器管理和JNDI的配置,以及会话和集群管理,都进行了详细的阐述。性能优化章节则讨论了线程池调整、内存配置、GZIP...

    jetty 架构

    通过WebAppContext对象,可以方便地配置和管理Web应用程序,包括虚拟主机、上下文路径和类加载器设置。 8. **安全性**:Jetty集成了多种安全机制,如JAAS(Java Authentication and Authorization Service)、SSL/...

    Windows Server 2008服务器搭建与管理第9章安装WWW服务.ppt

    配置虚拟主机名、IP地址和绑定,确保每个网站的唯一性。 7. **配置和管理HTTPS网站**: - 申请SSL证书:为了实现HTTPS,你需要从权威的证书颁发机构购买或申请SSL证书,用于加密网站数据并验证服务器身份。 - ...

    VHost:在Linux平台上管理Apache服务器虚拟主机的工具

    在Linux上,Apache的虚拟主机配置文件通常位于`/etc/apache2/sites-available/`目录下,通过创建和编辑`.conf`文件来设置每个虚拟主机的详细信息,如绑定的域名、文档根目录、访问权限等。激活配置后,虚拟主机将在...

Global site tag (gtag.js) - Google Analytics