node.js – 使用nginx proxy_buffering和节点js强制管道POST主体
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了node.js – 使用nginx proxy_buffering和节点js强制管道POST主体,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1969字,纯文字阅读大概需要3分钟。
内容图文
我的设置可能看起来有点奇怪,但不应该太过分:
我有一个apache2实例服务器php页面和静态文件.我有一个节点js服务器使用node-formidable处理文件上传(POST).最重要的是,我使用nginx 1.0.14.
为了使用节点服务器在php文件中提供的表单上传,我决定放置nginx,这样我就可以保持相同的域,端口和协议.
所以基本上我有/上传我想(直接)管道到我的节点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%即时上传(因为它从localhost发送到localhost)).
我不明白为什么proxy_buffering off没有按照我期望的方式工作(它不应该缓冲,而是将请求传递给后端,因为它已经收到).
或者……这可能以其他方式吗?
任何提示/帮助非常感谢.
>卡斯帕尔
>注意:
我已经尝试使用nginx_tcp_proxy_module,它在使用中并不是那么普遍.
我考虑过使用Varnish因为它能够做我想要的,piping directly to node-js based on url(作者btw的优秀博客文章,非常值得一读),但是我正在运行一个https服务器(实际上是两个)所以我不确定如果Varnish可以做到这一点(不支持https,所以我必须包装它,但有两个域(证书)是不可能的)
解决方法:
current docs明确指出proxy_buffering指令仅影响响应缓冲而不是请求.
Enables or disables buffering of responses from the proxied server.
缓冲POST请求所需的指令是恰当命名的proxy_request_buffering.再次,从current docs:
Enables or disables buffering of a client request body.
(为了Casper的缘故,值得注意的是,在nginx版本1.7.11中添加了proxy_request_buffering指令,在several years after发布了这个问题.)
内容总结
以上是互联网集市为您收集整理的node.js – 使用nginx proxy_buffering和节点js强制管道POST主体全部内容,希望文章能够帮你解决node.js – 使用nginx proxy_buffering和节点js强制管道POST主体所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。