是否可以将端口80用于HTTP和Web套接字流量?

End*_*der 30 sockets apache http websocket

  1. 我正在构建一个使用Web套接字(技术上是Flash套接字)的站点,以便提供实时通信.
  2. 我希望能够支持企业/学术防火墙背后阻止除80端口以外的所有东西的人
  3. 我希望能够从一台机器上运行该站点

以前,我一直在使用Apache进行HTTP服务,并在一个高编号的套接字上使用一些python监听websocket的东西,但这显然不适用于此.

我总是可以将websocket的东西移到一个单独的服务器上,但我想避免支付第二个VPS(并且必须通过网络而不是本地与数据库通信).有没有一个很好的方法来做到这一点(nodejs,nginx,..?),还是不值得头疼?

Det*_*ect 16

YES,使用Node.js的.表示连接 HTTP文件服务和socket.io以获取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(){...});
})
Run Code Online (Sandbox Code Playgroud)

  • 你能解释它的作用吗? (3认同)

Eli*_*ala 5

当然可以。

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

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

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel
Run Code Online (Sandbox Code Playgroud)

在您的域中打开conf,在我的情况下,这是文件的路径:

/etc/apache2/sites-available/myDomain.pl.conf
Run Code Online (Sandbox Code Playgroud)

接下来,附加此代码

<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>
Run Code Online (Sandbox Code Playgroud)

最后重新启动您的Apache

service apache2 restart
Run Code Online (Sandbox Code Playgroud)

玩得开心!