Apache 是否可以将端口80同时用于HTTP和web套接字通信? 我正在建立一个使用web套接字(技术上是Flash套接字)的网站,以便提供实时通信 我希望能够支持公司/学术防火墙后面的人员,这些防火墙阻止除端口80以外的所有东西 我希望能够运行一台机器的网站

Apache 是否可以将端口80同时用于HTTP和web套接字通信? 我正在建立一个使用web套接字(技术上是Flash套接字)的网站,以便提供实时通信 我希望能够支持公司/学术防火墙后面的人员,这些防火墙阻止除端口80以外的所有东西 我希望能够运行一台机器的网站,apache,http,sockets,websocket,Apache,Http,Sockets,Websocket,以前,我一直在使用ApacheforHTTP服务,并结合一些python在一个高编号套接字上监听websocket内容,但这显然在这里不起作用 我总是可以将websocket内容移动到单独的服务器上,但我希望避免支付第二个VPS(并且必须通过网络而不是本地与数据库通信)。有没有一个好的方法(nodejs、nginx等?),还是不值得头痛? 另一种可能是在apache中使用mod_proxy将请求重定向到websocket服务器。简短的回答是否定的,因为您只能让一个进程监听一个端口。您可以

以前,我一直在使用ApacheforHTTP服务,并结合一些python在一个高编号套接字上监听websocket内容,但这显然在这里不起作用

我总是可以将websocket内容移动到单独的服务器上,但我希望避免支付第二个VPS(并且必须通过网络而不是本地与数据库通信)。有没有一个好的方法(nodejs、nginx等?),还是不值得头痛?


另一种可能是在apache中使用mod_proxy将请求重定向到websocket服务器。

简短的回答是否定的,因为您只能让一个进程监听一个端口。您可以尝试使用端口443,因为它也不会被阻止,只要您也不使用https。

是,通过使用。或者对于HTTP文件服务和WebSocket之类的东西

例如:

var express = require("express");
var app = express.createServer(); 

app.get('/', function(req, res){ 
    res.redirect("/index.html");
}); 

app.configure(function(){
  app.use(express.static(__dirname + '/public'));
});

app.listen(80); 

var io = require('socket.io'); 
var socket = io.listen(app); 
socket.on('connection', function(client){ 
  client.on('message', function(){...});
})

GlassFish(和grizzly)在同一端口上支持HTTP和websockets通信,如果可以选择java服务器。

当然可以这样做

首先,您必须检查您的Apache版本。你应该有2.4+版本。我将在Ubuntu 14.4上向您展示我的服务器的命令

其次,打开必要的apache模块:

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel
打开域的conf,在我的例子中,它是文件的路径:

/etc/apache2/sites-available/myDomain.pl.conf
接下来,附加此代码

<VirtualHost>

.
.
.

RewriteEngine on

RewriteCond %{QUERY_STRING} transport=polling
RewriteRule /(.*)$ http://localhost:3001/$1 [P]

ProxyRequests off
ProxyPass /socket.io ws://localhost:3001/socket.io
ProxyPassReverse /socket.io ws://localhost:3001/socket.io

ProxyPass        /socket.io http://localhost:3001/socket.io
ProxyPassReverse /socket.io http://localhost:3001/socket.io
</VirtualHost>

玩得开心

对于安全websocket,我所需要做的就是将以下三行添加到我的https virthualhost中:

<VirtualHost *:443>

    [...https config...]

    SSLProxyEngine On
    ProxyPass "/web_socket"  "wss://localhost:7300/web_socket"
    ProxyPassReverse "/web_socket"  "wss://localhost:7300/web_socket"

</VirtualHost>

可能与-1重复:首先,在某些情况下,多个进程可以在同一端口上侦听(forking:例如,Apache为每个请求生成一个进程)。其次,服务WebSocket可以在一个进程内完成,即客户机打开TCP,并根据他发送(标准)HTTP还是WebSocket来处理它。他指定了apache和python。我只是想回答这个问题,如果您使用apache和python,我不知道有什么方法可以让这两个进程同时在同一端口上侦听。@从技术上讲,奇怪的是,多个进程没有在同一端口上侦听。一个进程正在侦听,当它接收到它所处理的东西时,它会处理分叉以处理请求并返回侦听。简言之,只有一个过程是倾听。您所说的其他一切都是完全正确的。请注意,pywebsocket并不是用于生产,而只是用于测试(客户端实现)——顺便说一句,在这方面它确实很好。您能解释一下它的功能吗?谢谢,这很好用。然而,重写条件和重写规则的目的是什么?没有这些,它似乎工作得很好。
<VirtualHost *:443>

    [...https config...]

    SSLProxyEngine On
    ProxyPass "/web_socket"  "wss://localhost:7300/web_socket"
    ProxyPassReverse "/web_socket"  "wss://localhost:7300/web_socket"

</VirtualHost>
a2enmod proxy_wstunnel