Nginx实现一个端口开启https和http并全站https

一、写在前面

因服务部署在家用宽带内,运营商屏蔽了常用的一些服务端口,如 80 443 8080 139 445 等。

我们在家用宽带内部署了一套网站服务,运营商提供了不固定的公网IP,于是通过 DDNS实现了域名解析到这个随机不固定的公网IP上。

于是我们部署了一套https的服务,https://hamm.cn:888,没有办法,必须得手动带上一个端口号。然后将 888 端口进行了端口转发到内网服务器的 80 端口上。

这里出现问题了,如果客户直接在浏览器输入 hamm.cn:888 来访问服务,部分浏览器会自动使用 http 协议来访问,所以会访问不到我们的网站。

所以又只能再起一个端口来实现这个需求,于是又会有一个 http://hamm.cn:999 来对应 http 协议。

客户需要记两个端口号,而且容易将http和https的端口记混淆导致无法正常访问。

那么如何来解决这个问题呢?能不能使用 一个端口 来实现 httphttps 都可正常访问到,不丢失流量呢?

二、HTTP协议状态码 497

当客户端试图访问一个需要 HTTPS 的资源,但以 HTTP 方式发送请求时,服务器可能会返回 497 这个状态码,表示它无法处理这样的请求转换。

所以,只需要在 nginx 中配置一下 497 错误的重定向即可:

conf 复制代码
error_page 497 https://$http_host$request_uri;

接下来,通过 http://hamm.cn:888 访问,会得到一个 497 错误,nginx 会将错误捕获并转到 https://hamm.cn:888 对应的服务上。

我们就实现了一个端口抓住所有的流量,除了一个端口号之外,客户也没有其他的记忆成本了。

三、以上

That's all.

每日一水,今天水更多。

相关推荐
G_H_S_3_13 分钟前
【网络运维】Playbook项目实战:基于 Ansible Playbook 一键部署 LNMP 架构服务器
linux·运维·服务器·网络·ansible
XINVRY-FPGA1 小时前
10CL016YF484C8G Altera FPGA Cyclone
嵌入式硬件·网络协议·fpga开发·云计算·硬件工程·信息与通信·fpga
yuxb731 小时前
Ansible 学习笔记:变量事实管理、任务控制与文件部署
linux·运维·笔记
岚天start1 小时前
Linux sar命令详细使用指南
linux·运维·服务器·负载·sar·磁盘io·sysstat
遇见火星2 小时前
Jenkins全链路教程——Jenkins调用Maven构建项目
运维·jenkins·maven
wanhengidc6 小时前
当云手机出现卡顿怎么办?
运维·服务器·安全·智能手机
寻道模式10 小时前
【运维心得】三步10分钟拆装笔记本键盘
运维·计算机外设·笔记本
元清加油10 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
炫友呀11 小时前
Centos 更新/修改宝塔版本
linux·运维·centos
闻道且行之11 小时前
嵌入式|VNC实现开发板远程Debian桌面
运维·debian·嵌入式