我的设置可能看起来有点奇怪,但不应该太牵强:我有一个 apache2 实例服务器 php 页面和静态文件。我有一个POST
使用node-formidable处理文件上传()的节点 js 服务器。最重要的是,我使用nginx 1.0.14
. 为了使用节点服务器上传 php 文件中的表单,我决定安装 nginx,这样我就可以保持相同的域、端口和协议。所以基本上我有 /upload 我想(直接)管道到我的节点 js,最好完全在代理之外。其余的由 apache2 服务器处理:
location /upload {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
send_timeout 600;
proxy_buffering off;
proxy_pass https://node_backend;
}
location / {
proxy_set_header Host $http_host;
proxy_pass https://apache_backend;
}
这是基于https://stackoverflow.com/a/1167559
我的问题是 nginx 在将整个 POST 请求从 nginx 发送到节点 js 之前对其进行缓冲。在我的节点 js 被命中之前,我可以将其验证为 Chrome 中的进度指示器计数一直到 100%(从 0-100% 即时上传(因为它是从本地主机发送到本地主机的))。
我不明白为什么proxy_buffering off
没有按我期望的方式工作(它不应该缓冲,而是在收到请求时将请求传递给后端)。
或者......这可能以其他方式吗?
非常感谢任何提示/帮助。
卡斯帕
注意:我尝试过使用
nginx_tcp_proxy_module
不是很广泛的。我考虑过使用Varnish
它,因为它能够做我想做的事,基于 url 直接管道到 node-js(作者 btw 的优秀博客文章,非常值得一读),但是我正在运行一个 https 服务器(实际上是两个)所以我不确定是否Varnish
可以这样做(https
不支持,所以我必须包装它,但是有两个域(证书)这是不可能的)