Node.js 网络代理块socket.io
我在同一台服务器上使用了Node.js 网络代理块socket.io,node.js,apache,sockets,proxy,Node.js,Apache,Sockets,Proxy,我在同一台服务器上使用了nodejs、socket.io和apache。Apache将请求从端口80重定向到443,然后使用SSLProxyEngine间接重定向到端口3000上的我的SSL NodeJS服务器-工作正常 问题: 在某些区域,只允许端口80和443,不允许端口3000 当我改变时: io.connect('https://domain.com:3000', { path: '/socket.io' }); 为此: io.connect('https://domain.com',
nodejs
、socket.io
和apache。Apache将请求从端口80重定向到443,然后使用SSLProxyEngine
间接重定向到端口3000上的我的SSL NodeJS服务器-工作正常
问题:
在某些区域,只允许端口80和443,不允许端口3000
当我改变时:
io.connect('https://domain.com:3000', { path: '/socket.io' });
为此:
io.connect('https://domain.com', { path: '/socket.io' });
io.connect('https://domain.com:443', { path: '/socket.io' });
// whatever ...
无法访问服务器(net::ERR\u CONNECTION\u TIMED\u OUT
)
我试图将该端口设置为公共端口,如FTP(21),但浏览器表示不允许使用该端口
你有什么想法吗
以下是一些文件:
Apache vhost:
<VirtualHost *:443>
ServerName domain.com
SSLProxyEngine On
RequestHeader set Front-End-Https "On"
ProxyPass / https://domain.com:3000/ retry=1 acquire=3000 timeout=600 Keepalive=On
ProxyPassReverse / https://domain.com:3000/
// localhost not working
SSLEngine on
SSLCertificateKeyFile ...
SSLCertificateFile ...
SSLCertificateChainFile ...
</VirtualHost>
ServerName域名.com
SSLProxyEngine打开
RequestHeader将前端Https设置为“开”
ProxyPass/https://domain.com:3000/ 重试=1获取=3000超时=600保持激活=On
ProxyPassReverse/https://domain.com:3000/
//本地主机不工作
斯伦金安
SSLCertificateKeyFile。。。
SSLCertificateFile。。。
SSLCertificateChainFile。。。
(我用domain.com替换了我的域名)解决方案
工作得很好
HTTP=>com.domain.conf
<VirtualHost *:80>
ServerName domain.com
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/socket.io [NC]
RewriteCond %{QUERY_STRING} transport=websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
<Location />
ProxyPass http://127.0.0.1:3000/
ProxyPassReverse http://127.0.0.1:3000/
</Location>
</VirtualHost>
app.js
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var port = process.env.PORT || 3000;
var io = require('socket.io')(server);
server.listen(port, function(err) {
console.log('HTTP-Server started on port ' + port);
});
app.use(express.static(__dirname + '/public'));
io.on('connection', function(socket) {
console.log('connection: ' + socket.id);
socket.emit('hello', function(res) {
console.log('Client received "hello"');
});
socket.on('disconnect', function(exception) {
console.log('disconnect: ' + socket.id);
});
});
提示:如果您尚未安装防火墙,请执行此操作并阻止端口3000(或您正在使用的端口)。您找到解决方案了吗?
var url = window.location.href;
var domain = url.split("/")[0] + "//" + url.split("/")[2];
var socket = io.connect(domain, { path: '/socket.io' });
socket.on('hello', function(callback) {
callback(); // confirm receiving "hello"
});
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var port = process.env.PORT || 3000;
var io = require('socket.io')(server);
server.listen(port, function(err) {
console.log('HTTP-Server started on port ' + port);
});
app.use(express.static(__dirname + '/public'));
io.on('connection', function(socket) {
console.log('connection: ' + socket.id);
socket.emit('hello', function(res) {
console.log('Client received "hello"');
});
socket.on('disconnect', function(exception) {
console.log('disconnect: ' + socket.id);
});
});