【发布时间】: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