Socket.io聊天应用程序,路径上的apache反向代理

时间:2018-04-22 15:38:37

标签: javascript apache ubuntu proxy socket.io

我使用socket.io作为使用localhost:3000的聊天应用程序,这在大多数情况下都很好用,但是对于某些用户来说,端口3000被阻止,因此聊天应用程序无法正常工作。

相反,我想使用反向代理来加载带路径的网址,但我无法使其正常工作。我看过很多例子,但没有一个能够正常工作,所以我真的希望有人能引导我朝着正确的方向前进。

我想离开这个:

  

https://mydomain.co.uk:3000

到这个

  

https://mydomain.co.uk/chatapp

这是我在default-ssl.conf中添加的内容

<Location /chatapp>
    Order allow,deny
    Allow from all
    ProxyPass http://localhost:3000/
    ProxyPassReverse http://localhost:3000/
</Location>

但是当我导航到https://mydomain.co.uk/chatapp时,我收到以下错误消息。

enter image description here

我的服务器或客户端代码是否需要更改?

目前我的服务器代码以以下内容开头......

// Setup basic express server
var fs = require('fs');
var express = require('express');
var app = express();
var path = require('path');
var server = require('https').createServer({
    key: fs.readFileSync('/etc/apache2/ssl/**********************************.key'),
    cert: fs.readFileSync('/etc/apache2/ssl/**********************************.crt'),
    ca: fs.readFileSync('/etc/apache2/ssl/**********************************.crt'),
    requestCert: false,
    rejectUnauthorized: false
}, app);
var io = require('../..')(server);
var port = process.env.PORT || 3000;

server.listen(port, function () {
    console.log('Server listening at port %d', port);
});

// Routing
app.use(express.static(path.join(__dirname, 'public')));

// Chatroom

var numUsers = 0;

io.on('connection', function (socket) {
    var addedUser = false;

我的客户端代码只是像这样创建套接字......

var socket = io();

1 个答案:

答案 0 :(得分:0)

对于任何有兴趣的人,我找到了解决方案。

问题是我的socket.io配置为仅通过https工作,因此当反向代理尝试连接时,它试图转到http://localhost:3000并且它失败了。

解决方法是改变这个......

var server = require('https').createServer({
key: fs.readFileSync('/etc/apache2/ssl/**********************************.key'),
cert: fs.readFileSync('/etc/apache2/ssl/**********************************.crt'),
ca: fs.readFileSync('/etc/apache2/ssl/**********************************.crt'),
requestCert: false,
rejectUnauthorized: false
}, app);

对此...

var server = require('http').createServer(app);

然后代理人开始生活并开始工作。