2011-10-26 11 views
6

Stackoverflow ve ekspres google grubunu inceledim, ancak hala kısa sürüyorum.Expressjileri hem http hem de https ile ilgilenecek şekilde nasıl yapılandırabilirim?

1) bir http sunucusu ve Bir http sunucusu bir örneğini oluşturmak ve iki iki farklı limanlara dinlemek için ayarlayın: Ben toplamak kadarıyla

, iki şeyden birini yapabilirsiniz. Güzergahlarda, http isteğini https portuna yönlendirin.

//app 
var app = express.createServer(); 
var app_secure = express.createServer({key: key, cert: cert}); 

app.listen(8080); 
app_secure.listen(8443); 

//routes 
app.get("unsecure/path", function(req, res) { 
    ... 
} 

app.get("secure/path", function(req, res) { 
    res.redirect("https://domain" + req.path); 
} 

app_secure.get("secure/path", function(req, res) { 
    res.send("secure page"); 
} 

2) TJ Hollowaychuk ne derse yapın: ben 1 yaptığınızda https://gist.github.com/1051583

var http = require("http"); 
var https = require("https"); 
var app = express.createServer({key: key, cert: cert}); 

http.createServer(app.handle.bind(app)).listen(8080); 
https.createServer(app.handle.bind(app)).listen(8443); 

, genellikle herhangi bir sorun vardır. Bununla birlikte, iki sunucuyu yönetmek için tıknaz hissediyor ve gerçekten daha iyi bir yol olması gerektiğini düşünüyorum.

ben 2 yaptığımızda, bu alın:

(düğüm SSL) hatası: 1408A0C1: SSL rutinleri: SSL3_GET_CLIENT_HELLO: hayır

Elbette, sadece seçenek 1 varsayılan olabilir şifre paylaşılan, ama ben Gerçekten, gerçekten 2. seçeneği yaptığımda neden "paylaşılmamış şifre hatası" alıyorum neden bilmek istiyorum. Ve seçenek 2 benim tercih edilen yol olacaktır.

+0

yardımcı olur. @Benjie Sertifika RSA'dır. Önerinizi yakın gelecekte deneyeceğim. Teşekkürler. – ant

+0

Nginx'i ssl'yi düğüm için nasıl işleyecek şekilde yapılandırdığınıza işaret edebilir misiniz? Teşekkürler – Mamsaac

+0

Thing, TJ'in cesedinin söylediği şeyi yapmadı - neredeyse, ama tam olarak değil. Https seçenekleri, express.createServer'a değil, https sunucusuna gitmelidir. Sonra çalışır. Ancak o zaman bir websocket sunucusu ile çalışmak için almak başka bir şeydir :) – youurayy

cevap

-1

Sertifikanız bir DSA yerine bir RSA sertifikası mı? Tarayıcınızın desteklediği şifrelere, nodejs sunucunuz tarafından desteklenmediği gibi geliyor - birçoğunuz OpenSSL'inizi güncellemeniz ve NodeJS'i yeniden derlemeniz gerekiyor mu?

9

ler size sertifikadan server.ca-paket, server.key ve server.crt almalıdır yüzden

var http = require('http'); 
var https = require('https'); 
var express = require('express'); 
var fs = require('fs'); 

var app = express.createServer(); 

// cutomize your app as ususal 
app.configure(function() { ... }); 
app.configure('production', function() { ... }); 
// .... 

// attach express handler function to TWO servers, one for http and one for https 
http.createServer(app.handle.bind(app)).listen(8080); 
https.createServer({ 
    ca: fs.readFileSync('./server.ca-bundle'), 
    key: fs.readFileSync('./server.key'), 
    cert: fs.readFileSync('./server.crt') 
}, app.handle.bind(app)).listen(8081); 

Not sevdiği express.js uygulamasında https etkinleştirebilirsiniz açıklama' @ypocat ardından yetki. muhtemelen yaptığınız için emin noktası 80 (http) ve 443 (https) açıktır ihtiyaç sudo olmadan düğümü çalışır olarak da

# in Ubuntu 
sudo ufw status 
sudo ufw allow 80 
sudo ufw allow 443 

ve 80 için 8080'den üzerinde isteklerini iletmek için ve 8081 den 443 kadar sırasıyla

# in Ubuntu 
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080 
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8081 

Umut bu ben SSL işlemek için Nginx kullanarak sona erdi

İlgili konular