我有一个有效的弹簧mvc应用程序。我想让测试版用户可以看到它。我已经购买了域名/设置名称服务器以及所有dns内容。
我通过本地主机访问我的应用程序,如下所示:
localhost:8080/myApp
但在现实世界中,我想像mydomain.com
那样访问它。所以我搜索了很多,并且发现人们推荐这些东西的nginx是“最快的”。所以使用以下配置安装了nginx:
server {
listen 80;
server_name www.mydomain.com mydomain.com;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080;
}
} #end server
问题:
当我访问mydomain.com
时,我得到了众所周知的tomcat页面If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!
。
如果我手动转到mydomain.com/myApp
,那么一切都按预期工作。
问题:
有没有办法让我配置它来执行以下操作:
当我输入地址栏mydomain.com
时,我会转移到mydomain.com/myApp
或者我完全不在这种情况下。有更简单的方法吗?
更新
根据fvu的建议,当我将ROOT更改为其他目录然后在ROOT目录中部署我从tomcat获取404:
type Status report
message
description The requested resource is not available.
我可以从服务器日志中检索此错误:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [/tomcat_9090/webapps/myApp/] instead of [/tomcat_9090/webapps/ROOT
/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!
更新II:
当我将配置更改为:
时proxy_pass http://localhost:8080/myApp/;
网站看起来很有效,但事实并非如此。链接不起作用,css / js不加载。
答案 0 :(得分:2)
如果使用proxy_pass http://localhost:8080/myApp/;
配置 nginx ,唯一的问题是如何创建链接和资源,以便它们使用预期的base-url路径,而不是默认的Tomcat Servlet路径。 / p>
如果您能够使用 Spring Framework 3.1 + ,新的配置文件功能可以帮助定义不同的base-url,具体取决于活动配置文件,就像其他Web框架一样:路径将在运行时中决定,具体取决于服务器或环境。
例如,假设至少有2个属性文件(production.properties和dev.properties)在每个文件上声明了baseurl字段:
production.properties
baseurl = //yourdomain.com
dev.properties
baseurl = //localhost:8080/myApp
然后使用您最喜欢的Spring方式,为每个不同的环境加载属性,例如:
<util:properties id="properties" location="classpath:META-INF/default.properties" />
....
<beans profile="development">
<util:properties id="properties" location="classpath:META-INF/dev.properties" />
</beans>
根据之前的要求,您可以在任何JSP模板页面中定义基本标记:
<spring:eval expression="@properties['baseurl']" var="baseurl" />
<base href="${baseurl}/" />
最后,您可以将所有链接和资源声明为相对路径:
<link rel="stylesheet" href="css/app.css">
<script src="js/libs/jquery-1.7.1.min.js"></script>
<a href="">Home</a>
<a href="about">About</a>
...
如果由于任何原因您无法使用基本标记,您还可以使用$ {baseurl}声明每个链接:<link rel="stylesheet" href="${baseurl}/css/app.css">
使用此解决方案,每个服务器都将拥有每个自己的活动配置文件,并在运行时更新所有链接和资源,如预期的那样。