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,而不是手动连接字符串以避免此类错误。见:

https://nodejs.org/api/url.html

无论如何,添加一些日志以了解您正在构建的 URL 是什么样的。也可以用 curl 测试一下:

curl -v http://localhost:1234

查看返回的标题。

【讨论】:

我在日志中有这个但没有注意到。在您回答之后,我感到非常愚蠢,他们甚至在api 中有很好的网址表示!但是,如果我明确要求 example.com:80 在其他答案中找到的方法(以及我使用的方法)也会失败。这意味着这仅因为隐藏的默认端口才有效?

以上是关于HTTP 重定向到不同端口中的 HTTPS的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apache httpd 重定向两个不同的端口?

关闭端口80的nginx上的http和https重定向

HAProxy 将 http 重定向到 https (ssl)

Nginx HTTP 未重定向到 HTTPS 400 错误请求“普通 HTTP 请求已发送到 HTTPS 端口”

使用 Nginx 将 HTTP 重定向到 HTTPS

Nginx反向代理:将所有http请求重定向到https