請勿將ProxyPass設置爲Localhost!這不行!
在Apache configuraton這樣做:
<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/
SSLEngine on
SSLCertificateKeyFile /etc/ssl/private/domain.com.key
SSLCertificateFile /etc/ssl/certs/domain.com.crt
SSLCertificateChainFile /etc/ssl/certs/chaincert.crt
</VirtualHost>
現在的NodeJS也可以有SSL:
var express = require('express');
var connect = require('connect');
var app = express();
var fs = require('fs');
var ssl_options = {
key: fs.readFileSync('/etc/ssl/private/domain.com.key'),
cert: fs.readFileSync('/etc/ssl/certs/domain.com.crt'),
ca: fs.readFileSync('/etc/ssl/certs/domain.com.ca')
};
var server = require('https').createServer(ssl_options, app);
var port = process.env.PORT || 3000;
var io = require('socket.io')(server);
server.listen(port, function(err) {
console.log(colors.green('https server running on port ' + port));
});
並在客戶端執行此操作:
var socket = io.connect('https://domain.com:3000', { path: '/socket.io', 'flash policy port': 3000 });
我,這工作正常!
你能更詳細地系統的體系結構解釋,我不明白你爲什麼有兩個服務器上運行SSL和誰提供 – pfried 2013-02-20 19:14:51
我使用Apache服務我的登錄等,然後在應用頁面包括PHP頁面腳本所有的腳本文件等。這就是我所說的socket.io.js。如果我沒有創建node.js ssl,那麼我會收到警告「......從http://my_url.com:8080/socket.io/socket.io.js提供不安全的內容」。 – Jen 2013-02-20 19:29:47
我無法讓節點https服務器正常工作。但是找到了另一個解我正在使用Amazon Load Balancer來終止SSL並將http發送到節點服務器。它運作良好。我爲我的SSL Apache流量做同樣的事情。僅供參考 - 如果使用此路由,則需要在負載均衡器中使用TCP(SSL)和TCP選項來實現節點流量。 – Jen 2013-02-25 18:45:22