【发布时间】:2015-09-10 17:55:29
【问题描述】:
我一直在使用这个setting 将 haproxy 放在 node.js 和 socket.io 前面。
haproxy设置中的部分代码:
frontend wwws
bind 0.0.0.0:443 ssl crt /etc/haproxy/ovee.pem
timeout client 1h
default_backend www_backend
acl is_websocket hdr(Upgrade) -i WebSocket
use_backend websocket_backend if is_websocket
tcp-request inspect-delay 500ms
tcp-request content accept if HTTP
use_backend flashsocket_backend if !HTTP
frontend flash_policy
bind 0.0.0.0:843
timeout client 5s
default_backend nodejs_flashpolicy
backend www_backend
balance roundrobin
option forwardfor
server apache2 apache-backend:3001 weight 1 maxconn 1024 check
timeout connect 5s
timeout http-request 3s
timeout server 25s
backend websocket_backend
mode http
option forwardfor
option http-server-close
option forceclose
no option httpclose
server server1 socket-backend:3000 weight 1 maxconn 16384 check
nodeServer.js
var fs = require('fs');
var express = require('express'),
app = express(),
http = require('http').createServer(app),
io = require("socket.io").listen(http),
它似乎在第一次连接时运行良好,但随后浏览器阻止了Mixed Content 的所有套接字连接尝试。
The page at 'https://domain.com/391' was loaded over HTTPS,
but requested an insecure XMLHttpRequest endpoint
'http://domain.com:3000/socket.io/?EIO=3&transport=polling&t=1456666556035-0'.
This request has been blocked; the content must be served over HTTPS.
我知道这是因为我与 socket.io 的连接是通过Http 而不是Https
client.js
socket = io.connect('http://domain.com:3000', {
'force new connection': false,
'reconnection delay': 500,
'max reconnection attempts': 10
}),
我曾尝试对 nodeServer.js 使用 SSL,但这并没有连接到套接字,而且我认为没有必要,因为我正在使用 haproxy 进行所有转发:
在nodeServer.js中,我改成了:
var fs = require('fs'),
sslOption = {
key: fs.readFileSync('/ssl/crt/zz.key'),
cert: fs.readFileSync('/ssl/crt/zz.crt'),
ca: fs.readFileSync('/ssl/crt/zz-ca.crt'),
requestCert: true
},
express = require('express'),
app = express(),
https = require('https').createServer(app),
io = require("socket.io").listen(https),
client.js
socket = io.connect('https://domain.com:3000', {
'force new connection': false,
'reconnection delay': 500,
'max reconnection attempts': 10
}),
有没有人把 haproxy 放在 node.js 和 socket.io 前面?我应该使用什么从 client.js 连接到 socket.io?
【问题讨论】:
标签: javascript node.js sockets ssl haproxy