2

我有一个工作的 spring 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 更改为其他目录然后将我的 up 部署在 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!

更新二:

当我将配置更改为:

proxy_pass http://localhost:8080/myApp/;

该网站看起来可以正常工作,但实际上并没有。链接不起作用,css/js 无法加载。

4

1 回答 1

2

如果您使用 配置nginxproxy_pass http://localhost:8080/myApp/;唯一的问题是如何创建链接和资源,以便它们使用预期的 base-url 路径,而不是默认的 Tomcat Servlet 路径。

如果您能够使用Spring Framework 3.1+,新的Profiles 功能可以帮助根据活动配置文件定义不同的 base-url,就像其他 Web 框架一样:路径将在runtime中决定,具体取决于服务器或环境。

例如,假设至少有 2 个属性文件(production.properties 和 dev.properties)在每个属性文件上声明了 baseurl 字段:

  • 生产属性

    baseurl = //yourdomain.com
    
  • 开发属性

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

使用此解决方案,每台服务器都将拥有各自的活动配置文件,所有链接和资源都在运行时更新,正如预期的那样。

于 2012-12-22T23:25:26.003 回答