gpt4 book ai didi

javascript - 在 Openshift 上使用 https 创建 Express JS 4.0 应用程序,包括 http 重定向

转载 作者:数据小太阳 更新时间:2023-10-29 05:10:12 24 4
gpt4 key购买 nike

关注另一个 SO question ,我最近一直在尝试的是(参见 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);
}
});

在 Openshift 日志中,我得到:

Property 'secure' of object # is not a function

这是一行:if ( !req.secure() ) {

证书已加载到控制台中。应用在8080端口成功启动。

为什么我会收到此消息以及我应该如何在 OpenShift 中创建安全的 Express 4.0 https 应用程序?有没有人可以分享操作代码?谢谢!

更新

我已将重定向更新如下:

// 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();

}

我从控制台看到了以下几个:

SERVER no redirect: http://undefined/
Protocol: http
Host :
Url : /

我的应用程序仍然无法运行。对我来说这看起来像是一个错误。

我已经打开了一个问题: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

Openshift的KB article中提到的代码不能正常工作,原因有二。首先,req.path 没有考虑查询参数。在 Express 4.0 中应该使用 req.originalUrl

其次,不使用 self.app.get(r, redirectSec, self.routes[r]);,应该使用 self.app.use 添加中间件> 在 Express 4.0 中:

我的 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();

}

}

});

现在似乎一切正常。

关于javascript - 在 Openshift 上使用 https 创建 Express JS 4.0 应用程序,包括 http 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25654796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com