tomcat + nginx 配置问题??

osox 发布于 2013/08/03 12:10
阅读 3K+
收藏 3

http://www.oschina.net/code/snippet_12_175

http://www.oschina.net/code/snippet_12_174

参考了OS的配置,但是不得要领,没有配置成功,我的需求是这样的:

有多个web项目在<CATALINA_HOME>/webapps目录下面,其中一个是abc.我想把域名xyz.com指到这个abc项目.

但是我目前配置出来的效果是:

在浏览器访问xyz.com,可以正确定位到abc项目,以及打开首页,但是所有的连接都是xyz.com/abc/***.jsp,因而不能正确访问,因为nginx的配置其实已经带了/abc/.

应该是xyz.com/***.jsp才是正确的

我在项目里是用 pageContext.request.contextPath+"/***.jsp"制作的连接

------------------------------------------------

我目前的配置是:

nginx

server {
  listen 80;
  server_name xyz.com;
  location / {
    proxy_pass http://localhost:8080/abc/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

tomcat server.xml

<Engine name="Catalina">
    <Host appBase="webapps" autodeploy="false" name="xyz.com" unpackwars="false">
    <Context path="" docBase="abc"  debug="0" reloadable="true" />
   </Host>

</Engine>

--------------------------------------

求教这个是什么原因,怎么处理,nginx和tomcat的配置怎么搭配?

以下是问题补充:

@osox:连接中出现的 abc ​xyz.com/abc/***.jsp 是nginx造成的还是tomcat造成的? (2013/08/03 15:11)
加载中
0
iSea
iSea
tomcat这边
0
iSea
iSea
tomcat不用配置域名了吧, <Context path="" docBase="abc"  debug="0" reloadable="true" />这个也不用配置了吧。
0
o
osox

引用来自“青春陪葬了无知的年华”的答案

tomcat不用配置域名了吧, <Context path="" docBase="abc"  debug="0" reloadable="true" />这个也不用配置了吧。
亲测,去掉<context>节点,还是存在老问题
iSea
iSea
这个abc这样代理的路径是会存在的
0
o
osox

引用来自“chineselio”的答案

引用来自“青春陪葬了无知的年华”的答案

tomcat不用配置域名了吧, <Context path="" docBase="abc"  debug="0" reloadable="true" />这个也不用配置了吧。
亲测,去掉<context>节点,还是存在老问题
你的意思是怎么修改?刚才我删除 了<context>,没效果
iSea
iSea
可以代理到8080端口,然后把所有路径rewrite到abc目录
0
o
osox

<CATALINA_HOME>/webapps目录下,不仅有abc项目,还有cde等等项目,因此在nginx里就指定了具体的项目,如果是在nginx里只代理到8080的话,在tomcat里面可以区分么?照我目前这样的配置,也是有问题, 

-->nginx(xyz.com --->localhost:8080)  -->  tomcat ( xyz.com--找不到-->abc)

0
o
osox

<Context path="" 

这个虚拟目录path我已经设置为空,按理来说,pageContext.request.contextPath得到的也应该是空吧?怎么会出现真实项目名abc

0
o
osox

结贴,用穷举法试验好了。。。。。

最终配置:

nginx

server {
  listen 80;
  server_name xyz.com;
  location / {
    proxy_pass http://localhost:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

tomcat server.xml

<Engine name="Catalina">
    <Host appBase="" autodeploy="false" name="xyz.com" unpackwars="false">
    <Context path="" docBase="<CATALINA_HOME>/webapps/abc"  debug="0" reloadable="true" />
   </Host>

</Engine>

--------------------

以上,结贴了.

感谢 @青春陪葬了无知的年  作答


0
iSea
iSea

可以代理到8080端口,然后把所有路径rewrite到abc目录,tomcat不用配置域名

location ~* ^/(?!abc)/  {

  rewrite (.*) /abc/$1 last;
}

location / {
    proxy_pass http://localhost:8080/abc/;
    。。。。。。
}
iSea
iSea
回复 @许雷神 : 看看你代理后的路径哪里出错了
iSea
iSea
回复 @许雷神 : 动态路径代理 过去了吗?
许雷神
许雷神
回复 @iSea : 您好,这种配置静态文件可以正常显示,但是后台action路径就不对了,求指导
iSea
iSea
location / { 前面加上红色那段
0
许雷神
许雷神
我也是这种需求。
返回顶部
顶部