Nginx 要重定向 HTTP 到 HTTPS,一般是新建一个监听 80 端口的server,然后 302 HTTP 请求到HTTPS。但是这个方法需要两个不同的端口,即一个输入URL默认的80端口和443端口。
一般会有如下形式:
server {
listen 443 ssl;
server_name ***.***;
****;
***;
----
}
server {
listen 80;
server_name ***.***;
location /
{ return 302 https://$hostrequest_uri;}
}
但是如果是非特殊端口拿来承载HTTPS网站,再弄一个HTTP端口重定向到另一个HTTPS的端口就觉得怪怪的。
于是找到 HTTP 的 497 状态码。
497 状态码是当用户以 HTTP 协议访问开启 SSL 的server时,Nginx 会返回该用户此状态码。
那我们可以利用将此状态码重定向到 https。
形如以下:
server{
listen 8043 ssl;
server_name ***.***;
error_page 497 https://$host:8043$request_uri;
#需要更改重定向目的地址的端口号,和上述监听的端口号一致。
}
此处是利用 Nginx 自定义 error Page 错误页的功能,在Nginx给出497错误时,返回用户一个自定义的页面,这个页面把用户本来访问的页面重定向到HTTPS。
那么目的即可达成。
这个应用场景在我这里是给家里的网页服务加上SSL并自动重定向。
家宽的标准端口,类似80 443 等低位端口一般都不会开放,那就只能用至少四位的非标准端口,这个时候就不存在需要把浏览器默认URL端口为80重定向到443的情况,我希望能够我输入一个端口,即便我懒得没有输入HTTPS,他也能够重定向到HTTPS。