nginx之同一个端口http跳转到https
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

nginx之同一个端口http跳转到https

yuc
yuc
2023-12-04 / 最后修改: 2024-10-28 03:34 / 0 评论 / 6 阅读 / 正在检测是否收录...
0x1 场景

在 nginx 中一个监听端口只能有一种状态,如果监听了 http,那么不能再次监听 https,所以会出现一种需求: 如果环境使用了非标准的 https 端口,而用户如果没有手动输入前缀 https:// ,那么是无法正常访问环境的,通常返回的是 400,告诉用户在 https 上使用了 http 协议。但这样仍然不够,对于不熟悉技术的用户来说,也仍然不知道需要去手动处理前缀

0x2 常用解决办法

通常这问题有一个常用的解决办法。那就是增加一个 http 端口,在这个端口上做 301 跳转到 https即可。那这样就用到了两个端口,我们可以通过一个端口来解决问题吗? 答案是可以的

0x3 一个端口497

参考如下的配置:

error_page 497 https://$http_host$request_uri;

error_page 指令也是我们常用的,就是把指定的错误响应状态码跳转到设定的页面上,所以这一句基本的含义就是把 497 的状态码跳转到其 https 地址上。再结合其能解决问题,我们可以知道,当 nginx为https环境时,如果接受到了 http 请求,那么其会响应 497。至此我们就解决了单个端口实现 https 环境,并且兼容 http 访问跳转的需求。

0x4 haproxy实现

发现 haproxy 也是有办法可以实现的,参考文档:

https://discourse.haproxy.org/t/one-port-to-catch-http-and-https-requests-and-redirect-to-the-https-version/1703?u=elovin
0

评论

博主关闭了当前页面的评论