亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Heroku NodeJS http到https ssl強制重定向

Heroku NodeJS http到https ssl強制重定向

呼如林 2019-11-06 11:05:02
我有一個應用程序在heroku上運行,并在帶有https的節點上運行express。我該如何識別協議以在heroku上使用nodejs強制重定向到https?我的應用程序只是一個簡單的http服務器,它(尚未)意識到heroku正在向其發送https請求:/* Heroku provides the port they want you on in this environment variable (hint: it's not 80) */app.listen(process.env.PORT || 3000);
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

使用Heroku Cedar stack和ExpressJS?3.4.4,這是一個工作代碼集。


這里要記住的主要事情是我們正在部署到Heroku。SSL終止發生在負載平衡器上,然后加密的流量到達您的節點應用程序??梢酝ㄟ^req.headers ['x-forwarded-proto'] ==='https'測試是否使用https發出請求。


如果您在其他環境中托管,則無需擔心在應用程序等內部是否具有本地SSL證書。但是,如果使用自己的證書,子域等,則應首先通過Heroku加載項應用SSL加載項。


然后只需添加以下內容即可完成從HTTPS到HTTPS以外的任何重定向。這與上面接受的答案非常接近,但是:


確保您使用“ app.use”(用于所有操作,而不僅僅是獲?。?/p>

明確將forceSsl邏輯外部化為聲明的函數

不要將'*'與“ app.use”一起使用-當我測試它時,這實際上失敗了。

在這里,我只想在生產中使用SSL。(根據您的需要進行更改)

碼:


 var express = require('express'),

   env = process.env.NODE_ENV || 'development';


 var forceSsl = function (req, res, next) {

    if (req.headers['x-forwarded-proto'] !== 'https') {

        return res.redirect(['https://', req.get('Host'), req.url].join(''));

    }

    return next();

 };


 app.configure(function () {


    if (env === 'production') {

        app.use(forceSsl);

    }


    // other configurations etc for express go here...

}

對SailsJS(0.10.x)用戶的注釋。您可以在api / policies中簡單地創建一個策略(enforceSsl.js):


module.exports = function (req, res, next) {

  'use strict';

  if ((req.headers['x-forwarded-proto'] !== 'https') && (process.env.NODE_ENV === 'production')) {

    return res.redirect([

      'https://',

      req.get('Host'),

      req.url

    ].join(''));

  } else {

    next();

  }

};

然后參考config / policies.js以及其他任何策略,例如:


'*':['已驗證”,'enforceSsl']


查看完整回答
反對 回復 2019-11-06
  • 3 回答
  • 0 關注
  • 843 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號