【问题标题】:nginx chunked transfer encoding failsnginx分块传输编码失败
【发布时间】:2014-11-08 20:47:00
【问题描述】:

我正在使用带有码头 servlet 的 nginx 实现。

为了我的项目,我需要初始化两个到码头 servlet 的连接并保持它们打开。 为了初始化下行链路,我使用了一个正常的请求,然后我得到了输入流。 为了初始化上行链路,我使用了分块编码请求。

我使用的是 1.4.6 的 nginx 版本,所以应该默认设置分块编码,不管我在我的服务器定义中设置它。

 #HTTPS server

server {
    listen 443;
    listen [::]:443;
    server_name  localhost;

    ssl                  on;
    ssl_certificate      /etc/nginx/ssl/server.crt;
    ssl_certificate_key  /etc/nginx/ssl/server.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;
    location / {
        proxy_http_version 1.1;
        expires off;
        proxy_buffering off; 
        chunked_transfer_encoding on;
        proxy_pass      https://127.0.0.1:8080;
    #    root   html;
    #    index  index.html index.htm;
    }
}

我搜索了所有论坛,但仍然找不到解决方案。 启用分块编码、代理缓冲关闭等。 我无法让它工作。我还进行了简单的测试,以确保不是我的应用程序实现以某种方式阻止它并且它仍然无法正常工作。

还有什么我可以尝试的吗?

【问题讨论】:

  • 也许 KeepAlive 就是您想要的?如果这不起作用,我会研究处理 websockets 的解决方案,它可能需要您实施连接升级。想想看,你很可能代理了一个 Connection: close 标头。
  • 于是我也在nginx论坛上发帖,得到了回复。我特别寻找的东西称为“无缓冲上传”,这是目前 nginx 不提供的功能。使用 websockets 是不可能的,因为稍后这个原型将需要在使用 http 协议的更大更旧的系统中实现。所以这个问题的答案是“nginx”是不可能的。对于面临相同问题的任何人来说,一个可能的解决方法是使用 tengine,它是一个 nginx 分支。

标签: java nginx jetty chunked-encoding chunked


【解决方案1】:

所以我也在nginx论坛上发帖,得到了回复。我特别寻找的东西称为“无缓冲上传”,这是目前 nginx 不提供的功能。

使用 websockets 是不可能的,因为稍后这个原型将需要在使用 http 协议的更大更旧的系统中实现。所以这个问题的答案是“nginx”是不可能的。对于面临相同问题的任何人来说,一个可能的解决方法是使用 tengine,它是一个 nginx 分支。

【讨论】:

  • 或者直接使用jetty,前面不用nginx。
  • 出于安全原因和负载平衡,我最终需要一个反向代理。所以直接使用码头不是一种选择。系统需要可靠和安全地处理超过 100k 的连接。如果您有任何其他建议,如果您能详细说明,我将非常感激:)
猜你喜欢
  • 2011-03-14
  • 2023-03-16
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2012-11-02
  • 2013-02-13
相关资源
最近更新 更多