问题标签 [mod-proxy-wstunnel]

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.

0 投票
1 回答
1528 浏览

node.js - 如何配置 Apache 以正确转发 websocket?

我已经在 SO 和相关网站上查看了这个问题和其他各种问题,但到目前为止建议的解决方案都没有奏效。

我正在运行tty.jslocalhost:8080验证 websocket 在直接点击该端口时可以正常工作。现在,我正在尝试tty.js通过 Apache 反向代理进行连接。该应用程序可以在不使用 Websockets 的情况下工作,但我试图理解为什么 Websockets 不起作用。

这是我的 Apache 配置,用于使用来自sourcelocalhost的全新 Apache 构建进行测试。

当我连接到 时http://localhost:9000/tty/,出现500错误。

在服务器端日志中,我收到以下错误。

Apache 使 Websockets 正常工作的正确配置是什么?

0 投票
0 回答
145 浏览

apache - 在 Apache/mod_proxy_wstunnel 中为打开和关闭的连接启用日志记录

我正在使用带有 Websocket 反向代理 (proxy_wstunnel) 的 Apache 服务器。

是否有机会创建用于打开和关闭websocket 连接的日志条目?

0 投票
2 回答
5838 浏览

apache - Apache websocket 重定向到 Tomcat:mod_proxy 和 mod_proxy_wstunnel

我正在尝试使用 mod_proxy 和 mod_proxy_wstunnel 模块将流量从 Apache 重定向到 Tomcat。HTTP 流量重定向没有问题,但我无法使用迄今为止尝试的任何配置成功重定向 websocket 流量。

我正在使用 Apache 2.4.28 和 Tomcat 8.5.13

我必须说,当我在没有 Apache 的情况下使用 Tomcat 时,websockets 工作得非常好:

在此处输入图像描述

接下来是适用于此配置的 Tomcat 连接器:

直到这一点很清楚。现在我在 Tomcat 前面启动一个 Apache 服务器,我首先更改的是 Tomcat 连接器,如下所示:

在 Apache 中,我成功加载了下一个模块(我已经检查过它们是否真的加载了):

这是我在 vhosts.conf 文件中尝试的配置之一:

这是我取得的效果最好的配置,但它仍然无法正常工作。当我尝试建立此连接时,lavnet_error.log 中的日志跟踪似乎相当不错:

但这是 Chrome 显示的错误:

在此处输入图像描述 在此处输入图像描述

我也试过这个其他配置:

但在这种情况下,我得到一个“500(内部服务器错误)”,并且我可以在 lavnet_error.log 中看到下一个跟踪:

我已经尝试了很多配置,但我无法让它工作。我希望你能帮助我。

谢谢。

0 投票
1 回答
600 浏览

apache - 通过 apache mod_proxy 替换 Webpack 3 devserver 热模块

我有一个项目,我们使用 webpack 的 devserver 进行本地开发。我们还有用于实时重新加载的热模块替换:热模块替换

我们的前端在 docker 中运行。有了这个前端,我们还有 apache 的 mod_proxy。想法是让所有 http 调用都通过 mod_proxy。所以浏览器会将http发送到mod_proxy,然后代理到前端。这在没有热模块更换的情况下运行良好。但由于某种原因,我们无法进行热模块更换工作。我猜这是因为热模块替换使用网络套接字,并且默认情况下未启用通过 apache 的 mod_proxy 隧道网络套接字调用?

有人能够做到这一点吗?你是怎么做到的?开发服务器/热模块更换需要哪些配置?你是否使用了 apache 的 mod_proxy web socket 隧道:mod_proxy_wstunnel,你是如何配置它的?您不需要回答之前列出的所有子问题,我只需要有关如何使其工作的信息。

0 投票
0 回答
229 浏览

apache - 来自端口 80 的 Socket.io 访问,以及来自 aws 应用程序负载均衡器的端口 5000 上的 apache 反向代理

我有一个 EC2 实例在 AWS 应用程序负载均衡器后面运行。在端口 5000 上运行的 Ec2 实例 socket.io 上。现在我想将域/socket.io 端口 80 请求从 AWS 应用程序负载均衡器重定向到端口 5000。我使用 AWS ALB ( CNAME ) 映射的域。

现在,当我从外部端口 80 连接时,它可以工作但无法从外部向套接字服务器发送消息。但是当我从外部直接连接到端口 5000 时,我可以从外部发送消息。

我不知道为什么不能从端口 80 向端口 5000 发送消息。在 EC2 实例上使用 apache2.4 版本,所以我启用了所有必要的模块。

我的 apache 配置用于 socket.io 是:

请让我知道如何使用 AWS alb 从外部将消息发送到端口 5000 上的 socket.io 服务器。

Socket.io app.js 文件如下:

请帮助我解决这个问题。

0 投票
2 回答
735 浏览

apache - 如何在运行 apache 的端口 443 上运行 socket.io?

我需要在端口 443 上运行 socket.io(其中 apache 使用 Let's Encrypt 运行 https 站点)

这个想法是使用 apache 代理将流量重定向到 socket.io 端口。我找到了解决方案:

我在端口 3999 HTTPS 站点上运行 socket.io 工作正常,但是我得到了 http 404 错误。我想问题出在 rewriteCond 上。

websocket.js:112 WebSocket 连接到 'wss://mysite.com/socket.io/?id=11518237&username=john 失败:WebSocket 握手期间出错:意外响应代码:404

0 投票
1 回答
962 浏览

apache - Apache 为每个 WebSocket 连接保留一个活动工作器

将 Apache (2.4.29) 配置为 WebSocket 请求的反向代理mod-proxy-wstunnel

对于每个活动的 WebSocket 客户端,我看到一个 Apache 工作人员保持活动状态(处于“发送回复”状态),只要该客户端保持活动状态,即使没有发送数据也是如此。实际上,这意味着我无法扩展 WebSocket 客户端,因为所有可用的连接都被消耗了。

在 /server-status 中,每个客户端都有这样一行:

使用不同的mpm配置(用 event、worker 和 prefork 测试)对此没有影响。

我需要 Apache 能够在这些工作人员闲置时重用它们(不传输任何数据),以便能够对其进行扩展。可能吗?

0 投票
1 回答
102 浏览

apache - 通过 nodejs 和 jsmpeg 在 uberspace 之间传输视频数据

我正在尝试通过 nodejs 和 jsmpeg 在 uberspace 之间传输视频数据。

我的问题是我在尝试访问 url 时收到 404:

The requested URL /receive was not found on this server.

我访问的网址是这样的: https://stream.mydomain.com/receive

这是我的.htaccess:

0 投票
0 回答
10440 浏览

javascript - 使用 Node.js 服务器和 Jquery 客户端的简单安全 websocket (wss) 聊天

我已经在这个聊天中添加了语音,所以它现在是一个组合的语音/文本聊天。您可以在以下 URL 的 github 上找到我的贡献:

https://github.com/HowardRichman/simple-text-voice-chat-in-node-and-javascript

这是一个在 Centos 6.9 中使用 Node.js 服务器和 jquery javascript 客户端的安全 websocket 聊天的工作示例。只涉及两个文件:(1) server.js 和 (2) client.htm。

这是我使用以下 linux 命令行运行的 server.js 的代码:node server.js

笔记:

  1. 您必须将上述路径更改为安全证书和密钥的路径。我在服务器的 httpd.conf 文件中找到了这些路径。

  2. 或者,您可以将端口从本文件和客户端文件中的 8089 更改为另一个可用端口。(通常可以使用 8081 到 8099 的端口。)

这是 client.htm 文件的代码,应该使用 https URL(例如https://example.com/client.htm)访问:

笔记:

  1. 将 example.com 更改为您网站的名称。

  2. 我只在 Chrome 和 Firefox 中测试过这段代码。在 Firefox 中,如果用户之前曾在聊天室中,则当用户进入聊天时,用户的姓名会自动出现在姓名框中。这在 Chrome 中不会发生,但您可能会使用 cookie 来确保该名称出现在 Chrome 中。

  3. 用户通过单击“Enter”发布。

  4. 声音文件 notify.mp3 是每当有新帖子从服务器到达时播放的哔声。我没有在此处包含该文件。

  5. 关于滚动和客户端高度的命令允许用户向上滚动以阅读快速聊天中的早期帖子,而不会在新消息进入时被迫到底部。我的 css 文件(不包括在内)包含一个 max-height 命令让这个工作可能需要的chatLog划分这是我的css代码的一部分:#chatLog {max-height:430px; 溢出-y:自动;宽度:100%}。

我的问题:

在我开始聊天之前不久,我正在研究一个不同的解决方案,并在我的 Apache 配置文件中加载了 mod_proxy_wstunnel.so。我不知道这是否有必要。

我的问题是:如果你没有加载 mod_proxy_wstunnel.so,你能得到一个安全的 websocket 聊天吗?

0 投票
1 回答
918 浏览

socket.io - apache2的socket.io https代理配置

我有一个带有 JavaScript 客户端和 python 服务器的有效 socket.io 设置。客户端基本就一行:WebSocket握手时出错:意外响应码:404

服务器脚本可以在https://github.com/miguelgrinberg/python-socketio/blob/master/examples/server/wsgi/app.py找到——我在端口 5000 上运行服务器。

关于客户端和服务器,您可能只需要知道它们在我的 localhost apache 安装上运行良好,并且 socket.io 以 GET 请求开始并从那里升级到 websocket。这就是成功握手的样子:

现在我们有了一个 websocket,其余的通信都通过它运行。

我现在尝试的两天是让示例在我的 Web 服务器上运行 - 所以我正在寻找一个有效的 apache https 配置,它将请求代理到端口 5000 上的后端服务器。

我尝试了数十种配置变体,但它们都不起作用——它们看起来都与此非常相似。URL 重写部分旨在在初始握手成功后代理 websocket 连接。

Apache 确实将第一个 socket.io GET 请求转发到服务器,服务器回复:

然后立即打开和关闭一个 websocket(代码 404)。然后客户端发送一个失败的 POST 请求(代码 400)。然后客户端从第 1 步重新开始:发出 GET 请求,获取新的会话 ID...

ÿXX特殊字符也出现在有效的本地主机通信中 - 所以它们似乎属于那里)。

我究竟做错了什么?

更新 - 接近解决方案!

我尝试了 socket.io 示例服务器的几个 Python 和 NodeJS 实现以及几个客户端脚本——它们都创建了相同的问题,这证实了我的论点是 Apache 是问题所在。

我安装了 Nginx 并找到了一个终于可以工作的配置!这些是神奇的线条:

我现在使用调试服务器打印所有收到的 HTTP 请求,以将 Nginx 请求与 Apache2 请求进行比较,目标是配置 Apache2 以传递与 Nginx 相同的标头。

最后一个挑战似乎是将 Nginx 配置行转换为 Apache2。听起来比它更容易......不过,这将是解决方案的关键。