2011-11-16 27 views

Trả lời

9

Tôi cũng triển khai trên Heroku. Họ thêm một loạt các tiêu đề của họ khi họ sử dụng nginx để đảo ngược proxy. Một trong những quan tâm trong trường hợp này sẽ là x-forwarded-proto.

Đây là những gì tôi đã làm:

app.get(/\/register$/, function(req, res){ 
    console.log(JSON.stringify(req.headers)); //to see all headers that heroku adds 
    if(req.headers['x-forwarded-proto'] && req.headers['x-forwarded-proto'] === "http") { 
    res.redirect("https://" + req.headers.host + req.url); 
    } 
    else { 
    //the rest of your logic to handle this route 
    } 
}); 
+0

Tuyệt vời! Điều này đã giúp rất nhiều. +1 :) –

0

Để chạy máy chủ bảo mật (https), máy chủ phải được tạo độc lập với máy chủ không bảo mật (http). Họ cũng sẽ lắng nghe trên các cổng riêng biệt. Hãy thử một cái gì đó như thế này:

var express = require('express) 
    , app_insecure = express.createServer() 
    , app_secure = express.createServer({ key: 'mysecurekey' }) 

app_insecure.get('/secure-page',function(req, res){ 
    // This is an insecure page, redirect to secure 
    res.redirect('https://www.mysecuresite.com/secure-page') 
}) 

app_secure.get('/secure-page', function(req,res){ 
// Now we're on a secure page 
}) 

app_insecure.listen(80) 
app_secure.listen(443) 

HOẶC này có thể được thực hiện như tuyến đường trung

var redirect_secure = function(req, res, next){ 
    res.redirect('https://mysite.com' + req.url) 
} 

app_insecure.get('/secure-page',redirect_secure,function(req, res){}) 

Bây giờ bạn sẽ chỉ phải bao gồm các chức năng tham khảo: redirect_secure() trên các đường dẫn mà bạn muốn chuyển đến một vị trí an toàn.

+0

các ssl cõng trên Heroku sẽ có nghĩa là tôi đang chạy một máy chủ duy nhất có thể đưa cả hai an toàn trên các kết nối không an toàn, có thể là một cert an toàn lắp đặt tại các cân bằng tải, và tôi sẽ phải bằng cách nào đó kiểm tra xem Tôi đang nhận được lưu lượng truy cập an toàn. Có nghĩa là máy chủ không an toàn của tôi vẫn có thể chạy trên https ssl mà không cần phải tạo một máy chủ bảo mật một cách rõ ràng. – MonkeyBonkey

1

app.enable ('tin tưởng proxy');

"Sử dụng Express phía sau proxy ngược như Varnish hoặc Nginx là nhỏ, tuy nhiên nó yêu cầu cấu hình. Bằng cách bật cài đặt" ủy thác proxy "thông qua app.enable ('trust proxy'), Express sẽ biết rằng ngồi sau một proxy và các trường tiêu đề X-Forwarded- * có thể được tin cậy, nếu không có thể dễ bị giả mạo. "

Express behind proxies doco

Các vấn đề liên quan