在代理服务器后面的keepalive请求上发生奇怪的502错误

时间:2017-05-16 13:47:10

标签: java ajax apache proxy jax-rs

对于keepalive AJAX ping,我有一个很奇怪的502 Bad Gateway问题。为了在我的Java服务器上保持会话活动,我已经为我的JAX-RS REST通道添加了一个简单的方法:

import javax.ws.rs.*;
@POST
@Path("keepalive")
public Response keepalive(@Context HttpServletRequest request) {
    try {
        if (!checkAuthorized(request)) {
            return Response.status(401).entity("Not authorized").build();
        }
        return Response.ok("OK", MediaType.APPLICATION_JSON).build();
    } catch (Throwable e) {
        return Response.serverError().entity(e.getMessage()).build();
    }
}

在客户端,请求也很简单:

       $.ajax{
            url: '/services/auth/keepalive',
            contentType: 'application/json',
            data: JSON.stringify({ping: true}),
            type: 'POST'
        }

然而,我不时得到502回应。在Apache的error.log中:

  

[proxy:error] [pid 4732:tid 1920] [client 127.0.0.1:7347] AH00898:   从/ services / auth / keepalive

返回的远程服务器读取时出错

代理配置如下(http-proxy.conf):

<LocationMatch "/services">
    ProxyPass http://localhost:8080/services Keepalive=On
    Header set Cache-Control "no-cache, no-store, must-revalidate"
</LocationMatch>

稍后添加Keepalive=on作为尝试解决问题(在SO上的其他一些帖子中,该设置明显修复了502个问题),但事实并非如此。服务器日志中没有错误,错误发生时我的函数中的catch子句也没有。没有其他REST通道似乎会产生502个问题。

这里会发生什么?我该如何解决这个问题?

0 个答案:

没有答案