Jetty 部署单个Liftweb 应用的教程比比皆是,无非是将Liftweb 应用打包成 WAR 包(root.war)放在 jetty/webapps/ 下
但是如果部署多个Liftweb 应用,就不能打包成root.war,而需要打包成类似于 app1.war 和 app2.war
这时候出现了一个问题,访问应用后所有的 /classpath/* 路径经Nginx 转发之后变成了 /app1/classpath/* ,全部都无法访问了
Google 了一下有这么几个早期的讨论
https://groups.google.com/forum/#!topic/liftweb/oQkMZPiLtp8
https://groups.google.com/forum/#!searchin/liftweb/jetty$20context/liftweb/FJRoJkVMCDM/B71H6M_xhkMJ
但都未配置成功,后来只好在Nginx 里面做文章,
代码如下
server{
listen 80;
server_name app1.com;
location / {
if ( $uri ~* "/app1*"){rewrite ^/app1(.*)$ http://app1.com$1 last;}
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8080/app1/;
}
}
经测试上面的不是很稳定,表单失效了,S.notice 类也失效了,好在又有新的资料发现
http://scala-programming-language.1934581.n4.nabble.com/Context-path-proxies-amp-Lift-td1979313.html
最终的解决方案为Jetty 虚拟主机,Nginx 代码如下
server{
listen 80;
server_name app1.com;
location / {
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8080;
}
}然后在Jetty 的context 下(6版本)或者webapps 下面(9版本,未测)新建app1.xml 文件,添加如下内容
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<Set name="war"><SystemProperty name="jetty.home" />/webapps/app1.war</Set>
<Set name="contextPath">/</Set>
<Set name="virtualHosts">
<Array type="java.lang.String">
<Item>app1.com</Item>
</Array>
</Set>
</Configure>

被折叠的 条评论
为什么被折叠?



