Jér*_*nge 6 javascript ssl https node.js openshift
在另一个SO问题之后,我一直在尝试的最新问题是(参见ligatures.net):
self.ipaddress = process.env.OPENSHIFT_NODEJS_IP;
self.port = process.env.OPENSHIFT_NODEJS_PORT || 443;
if (typeof self.ipaddress === "undefined") {
self.ipaddress = "127.0.0.1";
};
...
self.app = express(); // 4.8.7
...
// Trusting Openshift proxy
self.app.enable('trust proxy');
// Http -> Https redirection middleware
self.app.use(function (req, res, next) {
if ( !req.secure() ) {
var tmp = 'https://' + process.env["DOMAIN_NAME"] + req.originalUrl;
console.log("Redirect to: " + tmp);
res.redirect(tmp);
} else {
next();
}
});
...
// Creating a http server
https.createServer(self.app).listen(self.port, self.ipaddress,
function(err) {
if (err) {
console.log("Node server error: " + err.toString());
} else {
console.log('%s: Node server started on %s:%d ...',
Date(Date.now() ), self.ipaddress, self.port);
}
});
Run Code Online (Sandbox Code Playgroud)
在Openshift日志中,我得到:
对象#的属性"安全"不是函数
这是一行: if ( !req.secure() ) {
证书将加载到控制台中.应用程序在端口8080上成功启动.
为什么我收到此消息,如何在OpenShift中创建安全的Express 4.0 https应用程序?有人有共享的操作代码吗?谢谢!
UPDATE
我更新了重定向,如下所示:
// Http -> Https redirection middleware
self.app.use(function (req, res, next) {
if ( req.headers['x-forwarded-proto'] === 'http' ) {
var tmp = 'https://' + req.headers.host + req.originalUrl;
console.log("SERVER redirect to: " + tmp);
res.redirect(tmp);
} else {
var pt = req.protocol || "";
var ho = req.headers.host || "";
var ur = req.originalUrl || "";
console.log("\nProtocol: " + pt
+ "\nHost : " + ho
+ "\nUrl : " + ur);
var tmp = req.protocol + '://' + req.headers.host + req.originalUrl;
console.log("SERVER no redirect: " + tmp);
next();
}
Run Code Online (Sandbox Code Playgroud)
我在控制台中看到以下几种情况:
SERVER no redirect: http://undefined/
Protocol: http
Host :
Url : /
Run Code Online (Sandbox Code Playgroud)
而我的申请仍然无效.对我来说这看起来像个错误.
我已经打开了一个问题:https://bugzilla.redhat.com/show_bug.cgi?id = 1138137
我也支持Cloudflare,这可能是问题的一部分.
有两个问题:
i) 如果您使用的是 Cloudflare 的免费套餐,则它不会转发 SSL 请求。如果您停用 Cloudflare(例如,同时保留其 DNS),则 SSL 请求将转发到 Openshift。
ii) 由于某种未知的原因,一些空请求在启动时以及稍后浏览页面时到达 Openshift 上的我的应用程序:
req.path: /
req.protocol: http
req.originalUrl: /
req.secure: false
Run Code Online (Sandbox Code Playgroud)
Openshift 的知识库文章中提到的代码无法正常工作,原因有两个。首先,req.path不考虑查询参数。应req.originalUrl在 Express 4.0 中使用。
其次,不应该使用,而是应该在 Express 4.0 中self.app.get(r, redirectSec, self.routes[r]);添加中间件:self.app.use
我的 HTTP 到 HTTPS 转发代码现在是:
// Trusting Openshift proxy
self.app.enable('trust proxy');
// Http -> Https redirection middleware
self.app.use(function (req, res, next) {
if ( req.headers['x-forwarded-proto'] === 'http' ) {
var tmp = 'https://' + req.headers.host + req.originalUrl;
res.redirect(tmp);
} else {
return next();
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在一切似乎都运转良好。
| 归档时间: |
|
| 查看次数: |
1037 次 |
| 最近记录: |