nginx 代理tomcat 无法正确定位

箭头向下 发布于 2013/09/25 14:36
阅读 2K+
收藏 1

我在使用nginx代理tomcat时遇到一个奇怪的问题。

配置:

nginx:

server {
    listen 80;
    server_name tomcat.dev;
    location /{
        proxy_pass http://127.0.0.1:8800/tomcat/$request_uri;
        proxy_redirect  off; 
        proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;     
       proxy_set_header X-Forwarded-For $http_x_forwarded_for;
    }
}

tomcat:

<Host 
          name="localhost"  
          appBase="/usr/share/tomcat7-root"
          unpackWARs="true" 
          autoDeploy="true">
     
        <Valve 
            className="org.apache.catalina.valves.AccessLogValve" 
            directory="logs"
            prefix="localhost_access_log."
            suffix=".txt"
            pattern="%h %l %u %t &quot;%r&quot; %s %b" />


        <Context 
            path="/tomcat" 
            docBase="/usr/share/nginx/html/tomcat/" 
            debug="0"/> 
我想做的是用nginx代理访问tomcat中的“tomcat”这个项目,我为它添加了contentPath,在页面访问tomcat.dev 的时候,每次刷新页面取得的都是不同的sessionid,我看了一下浏览器,没有JSESSIONID 这个cookie。然后我又通过localhost/tomcat/来访问,就没有问题。

然后我又将上面配置中的红色部分修改。去掉“tomcat”,将contextPath设置为“/”。nginx 的改成 proxy_pass http://127.0.0.1:8800/$request_uri;再通过tomcat.dev访问就是正常的。


各路大神求解。


加载中
0
箭头向下
箭头向下
@红薯 这样的话就是在url中需要带应用路径了(http://xxx.xx/b)?。我就是不想带这个路径...
红薯
红薯
那当然,不想用 /b 那么你的 tomcat 也不要 /b
0
箭头向下
箭头向下
@红薯 看看吧,这个蛋疼的问题。
0
红薯
红薯
proxy_pass 不能写 URL 的后面的东西,只能是 http://host:port 这样的形式
0
箭头向下
箭头向下

引用来自“红薯”的答案

proxy_pass 不能写 URL 的后面的东西,只能是 http://host:port 这样的形式
那就是说必须是tomcat部署到根目录?不能代理通过目录形式部署的项目?
红薯
红薯
不是不能,是 proxy 模块没有 url 重写的功能,访问 nginx 和访问 tomcat 的 url 必须一致
0
箭头向下
箭头向下
@红薯 比如说我现在tomcat中有 webapp/a,webapp/b两个项目。我只想代理b这个项目怎么破。
0
红薯
红薯

引用来自“箭头向下”的答案

@红薯 比如说我现在tomcat中有 webapp/a,webapp/b两个项目。我只想代理b这个项目怎么破。
你只需要把 nginx 的请求传递给 tomcat 即可,不需要指定传递给 tomcat 的哪个应用
0
箭头向下
箭头向下
3Q 这个问题困扰了我一天了。。。
返回顶部
顶部