对于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个问题。
这里会发生什么?我该如何解决这个问题?