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的端口记混淆导致无法正常访问。

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

二、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.

每日一水,今天水更多。

相关推荐
.道阻且长.6 分钟前
Linux基本开发工具:编译器gcc/g++
linux·运维·服务器·职场和发展
Decay__6 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
贞明电子8 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
明天也要努力学习9 小时前
HTTP 协议的基本格式和 fiddler 的用法
网络协议·http·fiddler
万联WANFLOW9 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
Ruiery11 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
Decay__12 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
江华森13 小时前
数据中心基础设施运维实战:概述与实验环境搭建
运维
迪菲赫尔曼14 小时前
【基础篇 11】把官方源码放到服务器:版本、解压层级和安装位置,一次弄清楚
运维·服务器·开发语言·人工智能·python·yolo·目标检测
by2099915 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享