问题标签 [node-http-proxy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Node.js http-proxy 丢弃 websocket 请求
好吧,我已经花了一个多星期的时间试图弄清楚这一点,但无济于事,所以如果有人有线索,你就是英雄。这不是一个容易回答的问题,除非我是个笨蛋。
我正在使用 node-http-proxy 将粘性会话代理到在不同端口上运行的 16 个 node.js 工作人员。
我使用 Socket.IO 的 Web Sockets 来处理一堆不同类型的请求,也使用传统的请求。
当我通过 node-http-proxy 将服务器切换到代理时,有时会出现一个新问题,我的 Socket.IO 会话无法建立连接。
我真的无法在我的一生中稳定地复制它,唯一的方法是将它从多个客户端抛出大量流量到服务器。
如果我重新加载用户的浏览器,它有时可以重新连接,有时不能。
粘性会话
我必须代理粘性会话,因为我的应用程序基于每个工作人员进行身份验证,因此它根据其 Connect.SID cookie 路由请求(我正在使用 connect/express)。
好的,一些代码
这是我的 proxy.js 文件,它在节点中运行并路由到每个工作人员:
客户端/现象
套接字连接如下:
登录大约 10 秒后,我在此侦听器上收到此错误,这并没有多大帮助。
浏览器发送的 Socket.IO GET 请求永远不会回来 - 它只是挂起等待,即使在错误回来之后,所以它看起来像一个超时错误。服务器从不响应。
服务器端 - 工作人员
这就是工作人员接收套接字请求的方式。很简单。所有工人都有相同的代码,所以你认为他们中的一个会收到请求并确认它......
概括
这是很多数据,我怀疑是否有人愿意面对它,但我完全被难住了,不知道接下来在哪里检查,下一步记录,无论如何,要解决它。我已经尝试了我所知道的一切以查看问题所在,但无济于事。
更新
好的,我相当确定问题出在node-http-proxy github 主页上的以下声明中:
node-http-proxy 与 <= 0.8.x 兼容,如果您正在寻找 >= 0.10 兼容版本,请查看 caronte
我正在运行 Node.js v0.10.13,这种现象与一些人在 github 问题上对此主题的评论完全相同:它只是随机丢弃 websocket 连接。
我已经尝试实现 caronte,即“较新”的分支,但它根本没有记录,我已经尽我最大的努力将他们的文档拼凑成一个可行的解决方案,但我无法让它转发 websockets,我的 Socket。 IO 降级为轮询。
关于如何实现和工作还有其他想法吗?node-http-proxy 昨天有 8200 次下载!肯定有人在使用今年的 Node 版本并代理 websockets....
我到底在寻找什么
我想完成一个代理服务器(最好是 Node),它代理多个 node.js 工作人员,并通过基于浏览器 cookie 的粘性会话路由请求。该代理需要稳定地支持传统请求以及 Web 套接字。
或者...
如果可行,我不介意通过集群节点工作人员完成上述任务。我唯一真正的要求是根据请求标头中的 cookie 维护粘性会话。
如果有比我正在尝试的更好的方法来完成上述工作,我完全赞成。
node.js - 节点 http-proxy 和 express
我正在尝试做这样的事情:
以前我用这个:
基本上,我仍然想使用 express ......但是,当人们去http://localhost/blog
博客但仍然被服务时port 8080
(最终将是端口 80)
所以我把它换成这个,效果更好。问题是快递接管了路由(据我所知)
node.js - 如何在不使用 node.js 打开传入端口的情况下将代理反向代理到本地服务器
我有一个本地网络服务器,它只有传出的互联网访问。我在云上有一个公共服务器,它不能直接访问我的本地 Web 服务器。
我想找到一种方法让我的本地 Web 服务器连接到公共服务器,并让公共服务器充当反向代理,将 Web 请求转发到我的本地 Web 服务器,并将响应返回给公共服务器。
我一直在查看 node-http-proxy 以尝试使用公共服务器将 http 请求转发到另一个没有打开传入端口的本地 Web 服务器。但似乎 node-http-proxy 假设反向代理服务器可以访问本地网络。
有什么解决方案吗?
谢谢。
node.js - 通过 Karma 运行测试的 ENOBUFS 错误
我正在使用 Karma 来测试我的节点服务器。运行大约一分钟后,出现“代理失败”错误,错误代码为“ENOBUFS”。错误发生在“karma/lib/middleware/proxy.js”中。我在这里读过一个类似的问题: Very simple Node.js client throws error ENOBUFS after many http requests
以及更多背景信息: https ://github.com/joyent/node/issues/3269
但是我找不到适合我的情况的解决方法,因为 http 请求超出了我的控制范围。有没有办法解决这个问题?
node.js - 使用 http-proxy 在 ExpressJS 中处理具有 post 方法类型的 Web 服务
我正在使用 express.js 和 ember over node 开发一个网站。
我在 ubuntu 服务器上托管了我的网站,并且该网站使用了一组 web 服务(它们在其他一些不同的服务器上运行)。为避免跨域问题(从网站调用 web 服务时),我使用http-proxy如下
我有几个具有 GET方法类型的 Web 服务,并且能够从网站成功调用所有这些 Web 服务。我的 AJAX 代码(用于 GET)如下:
因此,上面的http-proxy代码成功处理了我所有的 web 服务(使用 GET 方法类型)。但是,我在使用 POST 方法类型调用 Web 服务时遇到问题。
AJAX 代码(POST)如下:
我没有为 POST 类型的 Web 服务检索任何响应。如果我将上述 API URL 替换为:
到
我可以在浏览器控制台中查看 API 的响应。但是我无法在 AJAX 代码中处理此响应。显示失败警报框(我的 AJAX 代码的失败块)。
控制台日志:
因此我觉得,我必须编写一些代码来通过 http-proxy 处理这些 POST 请求和响应。任何人都可以请指导我。
我在https://github.com/nodejitsu/node-http-proxy/issues/180中发现了类似的问题。但是,我无法成功发出 POST 请求。
请注意:当我尝试使用“代理中间件”模块时:
node.js - 带有 http-proxy 和 express 的虚拟主机
我正在尝试使用 http-proxy 在 nodeje express 上模拟虚拟主机
代码
用于获得灵感但返回相同错误的简单示例
错误
javascript - 如何获取 node-http-proxy 完成的每个代理请求的响应时间?
我想计算每个代理请求的响应时间,由 node-http-proxy 完成,如下所示:
所以我想得到开始时间和开始时间之间的时间差。我能够捕捉到proxyRes
事件,但是如何将代理响应与正确的客户端请求相匹配?
更新:我尝试了以下方法:
因此,目标服务器的时间被正确测量,导致一个请求可能持续 2 或 5 秒,但代理有时测量的响应时间仅为几毫秒。我通过使用 apache-bench 来尝试它:ab -n 10 -c 3 http://localhost:3000/
和控制台的结果:
node.js - 错误:连接 EMFILE 和 node-http-proxy
我有几个节点进程试图将代理反向到一个本地主机端口。Node-http-proxy 似乎是最简单的解决方案。我正在代理几个运行 express 的 node.js 进程(下例中的端口 3100 和 3000),以及一个运行 node.js 和 restify (2700) 的进程。
因此,在测试期间,我开始意识到 9999 的服务器在大约 100 次服务后停止提供文件,并看到 node-http-proxy 进程正在抛出:
{ [Error: connect EMFILE] code: 'EMFILE', errno: 'EMFILE', syscall: 'connect' }
我知道 EMFILE 通常是由打开文件的限制操作系统引起的。我可以达到极限,但我认为这不会有帮助。我尝试通过每 100 毫秒进行一次循环连接来运行访问 3000、3100 和 2700 的服务器,并且一切顺利——数千次服务没有任何问题。我还在 nginx 反向代理后面运行它,它在数千次服务中成功运行。我觉得我在使用 node-http-proxy 时做错了——就像我没有关闭某些东西一样。有任何想法吗?
node-http-proxy - Ghost 在子目录和 node-http-proxy 上
我正在尝试在另一个 nodejs/express 应用程序的子目录中设置 Ghost 博客程序 (v0.4)。我能够按照此处概述的步骤使其工作:Node http-proxy and express
因此,我通过 Express 从我的主应用程序将代理设置为 Ghost,如下所示(在我的开发机器上):'
这可以访问博客内容。但是,当我去 /blog/ghost/signin 并尝试登录时,我得到一个 404。据我所知,登录页面不会出现在 blog/ 目录之外的任何地方,那为什么会失败呢?
如果我直接查看博客(在端口 2368 上),我可以正常登录。
proxy - http 到 https 节点代理
我想知道设置代理的最简单方法,我可以在其中发出 HTTP 请求(即)localhost:8011
,并且代理发出 HTTPS 请求localhost:443
(来自服务器的 HTTPS 应答也应该由代理转换为 HTTP)
我正在使用 node.js
我试过http-proxy
这样:
我也试过这个:
但是当我尝试连接时,我收到了这个错误
我想用节点来做,但是,其他解决方案可能是有效的。(代理将在 localhost 中使用,仅用于测试目的,因此安全性不是问题)