Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Jetty/Howto/Configure Virtual Hosts"

< Jetty‎ | Howto
Line 13: Line 13:
 
Let's examine these possibilities.
 
Let's examine these possibilities.
  
==Configuration of virtual hosts==
+
==Configuring virtual hosts==
  
 
When configuring a web application, you can supply a list of IP addresses and names at which the web application will be reachable. Suppose we have a machine with these IP addresses and DNS resolvable names:
 
When configuring a web application, you can supply a list of IP addresses and names at which the web application will be reachable. Suppose we have a machine with these IP addresses and DNS resolvable names:
Line 28: Line 28:
  
 
   
 
   
     <span class="code-tag"><Configure class=<span class="code-quote">"org.mortbay.jetty.webapp.WebAppContext"</span>></span>
+
     <Configure class="org.eclipse.jetty.webapp.WebAppContext">
       <span class="code-tag"><Set name=<span class="code-quote">"contextPath"</span>></span>/xxx<span class="code-tag"></Set></span>
+
       <Set name="contextPath">/xxx</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"war"</span>></span><span class="code-tag"><SystemProperty name=<span class="code-quote">"jetty.home"</span>/></span>/webapps/xxx.war<span class="code-tag"></Set></span>
+
       <Set name="war"><SystemProperty name="jetty.home"/>/webapps/xxx.war</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"virtualHosts"</span>></span>
+
       <Set name="virtualHosts">
         <span class="code-tag"><Array type=<span class="code-quote">"java.lang.String"</span>></span>
+
         <Array type="java.lang.String">
           <span class="code-tag"><Item></span>333.444.555.666<span class="code-tag"></Item></span>
+
           <Item>333.444.555.666</Item>
           <span class="code-tag"><Item></span>127.0.0.1<span class="code-tag"></Item></span>
+
           <Item>127.0.0.1</Item>
           <span class="code-tag"><Item></span>www.blah.com<span class="code-tag"></Item></span>
+
           <Item>www.blah.com</Item>
           <span class="code-tag"><Item></span>www.blah.net<span class="code-tag"></Item></span>
+
           <Item>www.blah.net</Item>
           <span class="code-tag"><Item></span>www.blah.org<span class="code-tag"></Item></span>
+
           <Item>www.blah.org</Item>
         <span class="code-tag"></Array></span>
+
         </Array>
       <span class="code-tag"></Set></span>
+
       </Set>
     <span class="code-tag"></Configure></span>
+
     </Configure>
  
 
</div></div>
 
</div></div>
Line 71: Line 71:
  
 
   
 
   
     <span class="code-tag"><span class="code-comment"><!-- webapp xxx.war --></span></span>
+
     <!-- webapp xxx.war -->
     <span class="code-tag"><Configure class=<span class="code-quote">"org.mortbay.jetty.webapp.WebAppContext"</span>></span>
+
     <Configure class="org.eclipse.jetty.webapp.WebAppContext">
       <span class="code-tag"><Set name=<span class="code-quote">"contextPath"</span>></span>/xxx<span class="code-tag"></Set></span>
+
       <Set name="contextPath">/xxx</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"war"</span>></span><span class="code-tag"><SystemProperty name=<span class="code-quote">"jetty.home"</span>/></span>/webapps/xxx.war<span class="code-tag"></Set></span>
+
       <Set name="war"><SystemProperty name="jetty.home"/>/webapps/xxx.war</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"virtualHosts"</span>></span>
+
       <Set name="virtualHosts">
         <span class="code-tag"><Array type=<span class="code-quote">"java.lang.String"</span>></span>
+
         <Array type="java.lang.String">
           <span class="code-tag"><Item></span>333.444.555.666<span class="code-tag"></Item></span>
+
           <Item>333.444.555.666</Item>
           <span class="code-tag"><Item></span>127.0.0.1<span class="code-tag"></Item></span>
+
           <Item>127.0.0.1</Item>
           <span class="code-tag"><Item></span>www.blah.com<span class="code-tag"></Item></span>
+
           <Item>www.blah.com</Item>
           <span class="code-tag"><Item></span>www.blah.net<span class="code-tag"></Item></span>
+
           <Item>www.blah.net</Item>
           <span class="code-tag"><Item></span>www.blah.org<span class="code-tag"></Item></span>
+
           <Item>www.blah.org</Item>
         <span class="code-tag"></Array></span>
+
         </Array>
       <span class="code-tag"></Set></span>
+
       </Set>
     <span class="code-tag"></Configure></span>
+
     </Configure>
  
 
</div></div><div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
 
</div></div><div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
  
 
   
 
   
     <span class="code-tag"><span class="code-comment"><!-- webapp zzz.war --></span></span>
+
     <!-- webapp zzz.war -->
     <span class="code-tag"><Configure class=<span class="code-quote">"org.mortbay.jetty.webapp.WebAppContext"</span>></span>
+
     <Configure class="org.eclipse.jetty.webapp.WebAppContext">
       <span class="code-tag"><Set name=<span class="code-quote">"contextPath"</span>></span>/zzz<span class="code-tag"></Set></span>
+
       <Set name="contextPath">/zzz</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"war"</span>></span><span class="code-tag"><SystemProperty name=<span class="code-quote">"jetty.home"</span>/></span>/webapps/zzz.war<span class="code-tag"></Set></span>
+
       <Set name="war"><SystemProperty name="jetty.home"/>/webapps/zzz.war</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"virtualHosts"</span>></span>
+
       <Set name="virtualHosts">
         <span class="code-tag"><Array type=<span class="code-quote">"java.lang.String"</span>></span>
+
         <Array type="java.lang.String">
           <span class="code-tag"><Item></span>777.888.888.111<span class="code-tag"></Item></span>
+
           <Item>777.888.888.111</Item>
           <span class="code-tag"><Item></span>www.other.com<span class="code-tag"></Item></span>
+
           <Item>www.other.com</Item>
           <span class="code-tag"><Item></span>www.other.net<span class="code-tag"></Item></span>
+
           <Item>www.other.net</Item>
           <span class="code-tag"><Item></span>www.other.org<span class="code-tag"></Item></span>
+
           <Item>www.other.org</Item>
         <span class="code-tag"></Array></span>
+
         </Array>
       <span class="code-tag"></Set></span>
+
       </Set>
     <span class="code-tag"></Configure></span>
+
     </Configure>
  
 
</div></div>
 
</div></div>
Line 129: Line 129:
  
 
   
 
   
     <span class="code-tag"><Configure class=<span class="code-quote">"org.mortbay.jetty.webapp.WebAppContext"</span>></span>
+
     <Configure class="org.eclipse.jetty.webapp.WebAppContext">
       <span class="code-tag"><Set name=<span class="code-quote">"war"</span>></span><span class="code-tag"><SystemProperty name=<span class="code-quote">"jetty.home"</span>/></span>/webapps/xxx.war<span class="code-tag"></Set></span>
+
       <Set name="war"><SystemProperty name="jetty.home"/>/webapps/xxx.war</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"contextPath"</span>></span>/<span class="code-tag"></Set></span>
+
       <Set name="contextPath">/</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"virtualHosts"</span>></span>
+
       <Set name="virtualHosts">
         <span class="code-tag"><Array type=<span class="code-quote">"java.lang.String"</span>></span>
+
         <Array type="java.lang.String">
           <span class="code-tag"><Item></span>333.444.555.666<span class="code-tag"></Item></span>
+
           <Item>333.444.555.666</Item>
           <span class="code-tag"><Item></span>127.0.0.1<span class="code-tag"></Item></span>
+
           <Item>127.0.0.1</Item>
           <span class="code-tag"><Item></span>www.blah.com<span class="code-tag"></Item></span>
+
           <Item>www.blah.com</Item>
           <span class="code-tag"><Item></span>www.blah.net<span class="code-tag"></Item></span>
+
           <Item>www.blah.net</Item>
           <span class="code-tag"><Item></span>www.blah.org<span class="code-tag"></Item></span>
+
           <Item>www.blah.org</Item>
         <span class="code-tag"></Array></span>
+
         </Array>
       <span class="code-tag"></Set></span>
+
       </Set>
     <span class="code-tag"></Configure></span>
+
     </Configure>
  
 
</div></div><div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
 
</div></div><div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
  
 
   
 
   
     <span class="code-tag"><Configure class=<span class="code-quote">"org.mortbay.jetty.webapp.WebAppContext"</span>></span>
+
     <Configure class="org.eclipse.jetty.webapp.WebAppContext">
       <span class="code-tag"><Set name=<span class="code-quote">"war"</span>></span><span class="code-tag"><SystemProperty name=<span class="code-quote">"jetty.home"</span>/></span>/webapps/zzz.war<span class="code-tag"></Set></span>
+
       <Set name="war"><SystemProperty name="jetty.home"/>/webapps/zzz.war</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"contextPath"</span>></span>/<span class="code-tag"></Set></span>
+
       <Set name="contextPath">/</Set>
       <span class="code-tag"><Set name=<span class="code-quote">"virtualHosts"</span>></span>
+
       <Set name="virtualHosts">
         <span class="code-tag"><Array type=<span class="code-quote">"java.lang.String"</span>></span>
+
         <Array type="java.lang.String">
           <span class="code-tag"><Item></span>777.888.888.111<span class="code-tag"></Item></span>
+
           <Item>777.888.888.111</Item>
           <span class="code-tag"><Item></span>www.other.com<span class="code-tag"></Item></span>
+
           <Item>www.other.com</Item>
           <span class="code-tag"><Item></span>www.other.net<span class="code-tag"></Item></span>
+
           <Item>www.other.net</Item>
           <span class="code-tag"><Item></span>www.other.org<span class="code-tag"></Item></span>
+
           <Item>www.other.org</Item>
         <span class="code-tag"></Array></span>
+
         </Array>
       <span class="code-tag"></Set></span>
+
       </Set>
     <span class="code-tag"></Configure></span>
+
     </Configure>
  
 
</div></div>
 
</div></div>
Line 176: Line 176:
 
* http://www.other.org:8080/
 
* http://www.other.org:8080/
  
</div>
+
 
| prereqs = (optional)
+
| steps = (optional)
+
| notes = (optional)
+
| examples = (optional)
+
| snippets = (optional) - for chunks of code that are too big to go into the Steps section, or screenshots
+
| more = (optional) - links, additional references
+
 
}}
 
}}

Revision as of 16:08, 9 July 2010



Introduction

A virtual host is an alternative name, registered in DNS, for an IP address. A single IP address may have many such alternative names.

Multi-homed hosts, that is machines with more than one network interface, may have a different name for each IP address. This is also refered to as "virtual hosting".

Essentially, "virtual hosting" concerns the resolution of a DNS registered name to an IP address - many names may resolve to the same IP address, and 1 or more IP addresses may reside on the same physical machine.

Jetty users often want to configure their web applications taking into account these different virtual hosts. Frequently, a machine with a single IP address will have different DNS resolvable names associated with it, and a webapp deployed on it must be reachable from all of the alternative names.

Other possibilities are to serve different web applications from different virtual hosts.

Let's examine these possibilities.

Configuring virtual hosts

When configuring a web application, you can supply a list of IP addresses and names at which the web application will be reachable. Suppose we have a machine with these IP addresses and DNS resolvable names:

  • 333.444.555.666
  • 127.0.0.1
  • www.blah.com
  • www.blah.net
  • www.blah.org

Suppose we have a webapp, xxx.war that we want to be served from all of the above names and addresses. Then we would configure the webapp like so:


    <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>

Assuming we'd configured a connector listening on port 8080, then webapp xxx.war would be available at all of the following addresses:

Configuring different webapps for different virtual hosts

This is accomplished simply by supplying a different list of virtual hosts for each webapp. For example, suppose our imaginary machine has these DNS names and IP addresses:

  • 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

Suppose also we have another webapp, zzz.war. We want xxx.war to be deployed as above, and zzz.war to be deployed only from 777.888.888.111, www.other.com, www.other.net and www.other.org:


    <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>


    <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>

Webapp xxx.war is still available at:

But now webapp zzz.war is available at:

Configuring different webapps for different virtual hosts, but at the same context path

In our example above, we have made webapp zzz.war avilable not only at a certain set of virtual hosts, but also at the context path /zzz, whilst our other webapp is available at both a different set of virtual hosts, and at a different context path. What happens if we want them at the same context path, but still at different sets of virtual hosts?

Very simply, we just supply the same context path for each webapp, leaving the disjoint set of virtual host definitions as before:


    <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>

Now, webapp xxx.war is available at:

and webapp zzz.war is available at:

Back to the top