繁体   English   中英

反向代理后面对restlet服务器的请求永远不会完成

[英]Requests to restlet server behind reverse proxy never complete

反向代理背后的Java Restlet服务器有一个非常奇怪的问题。

我正在使用nginx将URL重定向到端口8182上的Restlet服务器。该服务器的配置如下:

server {
    listen       8080;
    server_name  localhost;

    location / {

        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
        proxy_redirect  off;

        allow all;
        root   C:/Users/Cyrille/www;
        index  index.html index.htm;
    }


    location /proxy/ping {
            proxy_pass http://localhost:8182/ping;
    }
}

当我打开浏览器或使用wget访问http://localhost:8080/proxy/ping ,请求将被代理到Restlet。 它只回答“ pong”,其日志显示:

Oct 29, 2013 11:45:04 AM org.restlet.engine.log.LogFilter afterHandle
INFO: 2013-10-29    11:45:04    127.0.0.1   -   -   8182    GET /ping   -   200 4   -   6   http://localhost:8182   Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36   -

问题在于浏览器似乎从未收到响应。 几分钟后,它只是超时,并显示错误504:网关超时。 如果我直接访问http://localhost:8182/ping ,则请求将立即完成。

什么时候可以阻止请求? 我已禁用任何防火墙或防病毒软件。 我已将nginx与Apache交换,并且获得了完全相同的行为。 我在Windows 8上。

原来,这是Restlet中的一个错误:当HTTP标头包含“ Connection:Close”时,服务器将不会发送响应。

我通过以下修改使Nginx不发送此标头,它可以正常工作。

location /proxy/ping {
        proxy_pass http://localhost:8182/ping;
        proxy_set_header Connection "";
}

这是指向(打开后3年仍未修复)Restlet错误的链接: http ://restlet.tigris.org/issues/show_bug.cgi?id=1191

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM