HTTP 重定向到不同端口中的 HTTPS
Posted
技术标签:
【中文标题】HTTP 重定向到不同端口中的 HTTPS【英文标题】:HTTP redirect to HTTPS in a different port 【发布时间】:2017-06-29 03:23:32 【问题描述】:我正在尝试将每个 http 请求重定向到 https 服务器。 This works fine 如果 https 服务器的端口是 443。但是,如果我尝试重定向到其他端口,则不会发生。这是我的代码:
http.createServer(function(req,res)
var host = req.headers['host'],
url = req.url;
res.writeHead(301,
"Location": "https://" + host + ":"+SERVER.SPORT + url)
res.end()
).listen(SERVER.PORT)
https.createServer(SERVER.HTTPS_OPTIONS,app).listen(SERVER.SPORT)
【问题讨论】:
【参考方案1】:您的host
很可能已经包含端口号。
你可以确定如果你改变这个:
var host = req.headers['host']
到:
var host = req.headers['host'].split(':')[0];
还添加一些日志记录:
console.log("https://" + host + ":"+SERVER.SPORT + url);
查看您正在构建的 URL 是什么样的。
您还可以希望使用url
模块来处理 URL,而不是手动连接字符串以避免此类错误。见:
无论如何,添加一些日志以了解您正在构建的 URL 是什么样的。也可以用 curl 测试一下:
curl -v http://localhost:1234
查看返回的标题。
【讨论】:
我在日志中有这个但没有注意到。在您回答之后,我感到非常愚蠢,他们甚至在api 中有很好的网址表示!但是,如果我明确要求example.com:80
在其他答案中找到的方法(以及我使用的方法)也会失败。这意味着这仅因为隐藏的默认端口才有效?以上是关于HTTP 重定向到不同端口中的 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章
HAProxy 将 http 重定向到 https (ssl)