Openshift重定向到节点上的https

时间:2016-06-26 14:58:43

标签: node.js ssl express openshift

我正在构建一个在OpenShift上托管的Node.js应用程序。我正在尝试将所有访问重定向到网站的https版本。

我尝试在公共目录中添加一个.htaccess文件,就像在其他一些帖子中建议的那样,但它没有什么区别。

下面是我的.htaccess文件:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

我使用AngularJs和ui-router来处理网站上的导航。通过实现下面的代码,我能够实现重定向到https,但我认为这应该在服务器端处理。

if(window.location.protocol != 'https'){
        $window.location.href = $location.absUrl().replace('http', 'https');
    }

2 个答案:

答案 0 :(得分:1)

.HTACCESS可以与基于Apache的磁带一起使用。检查this FAQ answer;它描述了如何使用Express重定向到HTTPS。

修改

原始答案解决了OpenShift Online v2的问题,即no longer available。在OpenShift 3上托管应用时,创建insecureEdgeTerminationPolicy设置为Redirect的{​​{3}}将处理平台级别的重定向,而无需在应用程序本身中解决此问题。

使用某些secure route订阅计划(即 Starter 计划时,在编写此编辑时),路由可以是OpenShift Online 3到默认主机和证书。

答案 1 :(得分:0)

如果您在节点应用中使用 express.js ,则可以使用req.secure检查请求是否来自https。 (three.js CubeTexture)。

因此,您可以编写可添加到所有路由的中间件,以检查请求是否来自https,并在http通过时重新路由。

例如:

https-redirect.js 文件:

exports.httpsRedirect = function (req, res, next) {
  if (req.secure) {
    next();
  }
  else {
    res.redirect('https://' + req.headers.host + req.path);
  }
};

app.js 文件(或用于定义路线的任何内容):

var express = require('express');
var app = express();

var https = require('./https-redirect');

app.all('*', https.httpsRedirect);

现在,您的所有路由都将首先运行https.httpsRedirect中间件,并在必要时重新路由到https