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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将域指向端口8080上Jetty上运行的Web应用程序的基本配置相关的知识,希望对你有一定的参考价值。

我目前的设置非常简单。

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

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

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

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

答案

所以我去了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

另一答案

这条线..

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

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

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

<Set name="war"><SystemProperty name="jetty.webapps"/>/web_app_2/</Set>
另一答案

对于码头,如果你把你的应用程序放在webapps/ROOT/,那么http://example.com将指向它。

以上是关于将域指向端口8080上Jetty上运行的Web应用程序的基本配置的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Apache 重定向到 Tomcat?

maven web项目如何用jetty运行

Plesk:如何将域端口 80 和 443 重定向到我的 Docker 容器?

节点 JS 和 Apache HTTP

iis服务器上开了两个端口80跟8080,如何设置两个域名分别指向这两个端口

如何将域定向到它在 apache htaccess 中指向的服务器上的子文件夹