将域指向端口8080上Jetty上运行的Web应用程序的基本配置

时间:2014-10-17 09:09:50

标签: proxy dns jetty subdomain jetty-9

我目前的设置很简单。

我有一个运行Ubuntu的静态IP的网络服务器。我有一个域正确指向静态IP。在我的服务器上,我有一个运行标准/默认配置的Jetty实例 - 更具体地说 - 是etc / jetty-logging.xml和etc / jetty.xml配置。 Jetty当前侦听默认端口8080。

在我的webapps文件夹中,我有两个提取的Web应用程序,因此没有war文件。

我的网络应用程序目前可访问如下:

http://1.2.3.4:8080/web_app_1 and 
http://1.2.3.4:8080/web_app_2

http://www.example.com:8080/web_app_1 and
http://www.example.com:8080/web_app_2

我想要实现的目标很简单,但我对此的体验非常有限。

我想在http://www.example.com提供一个网络应用程序,在http://admin.example.com提供另一个网络应用程序。更具体地说:

http://www.example.com -> http://1.2.3.4:8080/web_app_1
http://admin.example.com -> http://1.2.3.4:8080/web_app_2

实现这一目标的最简单,最好的方法是什么?

我更愿意不为端口80配置jetty或让它以root身份运行。

这就是我所想的"我知道到目前为止......

我想我需要以某种方式在网络服务器内部将流量从端口80转发到端口8080 - 我不知道如何以最简单的方式执行此操作 - 我没有太多配置知识的apache或nginex所以在我继续使用其中之一之前我想知道我正在遵循正确的路线。我也知道可以使用iptables,但这条路线对我来说似乎有点过于隐蔽和模糊。

我想我需要使用Jetty的虚拟主机配置,看起来像这样(取自https://wiki.eclipse.org/Jetty/Howto/Configure_Virtual_Hosts):

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

与上面的示例不同,我没有部署的war文件,我无法使用此配置找到如何配置我的Web应用程序目录。

非常感谢任何帮助甚至推动正确的方向!

谢谢!

Xandel

3 个答案:

答案 0 :(得分:1)

所以我去了iptables路线......

配置最终非常简单。根据Jetty文档(http://www.eclipse.org/jetty/documentation/current/setting-port80-access.html),我使用以下命令配置了iptables:

/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

然后我为Jetty创建了一个新的xml配置文件,如下所示:

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
  <Call name="addHandler">
    <Arg>
      <New class="org.eclipse.jetty.webapp.WebAppContext">
        <Set name="contextPath">/</Set>
        <Set name="extractWAR">false</Set>
        <Set name="copyWebDir">false</Set>
        <Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/web_app_2/</Set>
        <Set name="virtualHosts">
           <Array type="java.lang.String">
             <Item>admin.example.com</Item>
           </Array>
        </Set>
      </New>
    </Arg>
  </Call>

  <Call name="addHandler">
    <Arg>
      <New class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="contextPath">/</Set>
    <Set name="extractWAR">false</Set>
    <Set name="copyWebDir">false</Set>
        <Set name="resourceBase"><SystemProperty name="jetty.home" default="."/>/webapps/web_app_1/</Set>
        <Set name="virtualHosts">
           <Array type="java.lang.String">
             <Item>www.example.com</Item>
             <Item>example.com</Item>
           </Array>
        </Set>
      </New>
    </Arg>
  </Call>
</Configure>

我希望这有帮助!

Xandel

答案 1 :(得分:0)

该行......

<Set name="war"><SystemProperty name="jetty.home"/>/webapps/zzz.war</Set>

只是对Web应用程序的引用(不是特定的war文件)

只需让该行引用该目录即可。

<Set name="war"><SystemProperty name="jetty.webapps"/>/web_app_2/</Set>

答案 2 :(得分:0)

使用jetty,如果您将应用程序放在TextOverFlow.ellipses中,则webapps/ROOT/会指向它。