一、写在前面
因服务部署在家用宽带内,运营商屏蔽了常用的一些服务端口,如 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.
每日一水,今天水更多。