我目前的设置非常简单。
我有一个运行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
将指向它。