一个骚操作, nginx 只监听 1 个非标端口就实现 http 重定向 https

家宽封了 80,443 ,服务只能带端口访问
设置 nginx 监听一个高位端口如 2222 指向 443 ,另一个 3333 指向 80
因为非标准端口,没法同时监听 80 和 443
访问带指向 443 的端口 2222 时,如果开了强制 ssl ,只能 https 访问,http 访问时就会报 400 错,因为 http 是 3333 端口监听的,这样在访问时输入就很麻烦了。

怎么才能实现在一个端口访问,http 也能重定向呢,找了几天发现方法
有点骚,但能实现 nginx 只监听 1 个非标端口 http 重定向 https
本质是修改利用 497 错误码重定向指向 https 的地址

客户端请求未使用 HTTPS 协议,但如果您已启用强制 SSL ,并且客户端尝试使用 HTTP 协议访问您的网站,则会收到 HTTP 497 错误。我们这时候就修改 497 的页面指向我们 https 即可

server {
  listen      2222 ssl;
  server_name your.site.tld;
  ssl         on;
  ...
  error_page  497 https://$host:2222$request_uri;
  ...
}