下面将介绍三种从 http 请求跳转到 https 请求的方式:
这应该是大家最容易想到的方法,将所有的 http 请求通过 rewrite 重写到 https 上即可。nginx 配置如下:
server {
listen 80;
server_name www.hxstrive.com hxstrive.com;
rewrite ^(.*)$ https://$host$1 permanent;
}301 是一个 HTTP 状态码,表示请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。nginx 就可以利用 return 命令返回该状态码实现 http 跳转到 https。nginx 配置如下:
server {
listen 80;
server_name www.hxstrive.com hxstrive.com;
return 301 https://$server_name$request_uri;
}当我们 nginx 配置的服务器只支持 https,然而你给了一个 http 请求。此时,nginx 将返回 497 状态码。我们就可以使用 error_page 命令利用该状态码实现 http 请求跳转 https。nginx 配置如下:
server {
listen 443;
server_name www.hxstrive.com hxstrive.com;
ssl on;
ssl_certificate cert/www.hxstrive.com.pem;
ssl_certificate_key cert/www.hxstrive.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
# 让http请求重定向到https请求
error_page 497 https://$host$uri?$args;
location / {
# ...
}
}上述方法均会耗费服务器的资源,我们可以利用 <meta> 标签的 http-equiv="refresh" 实现 http 请求跳转 https 请求。html 代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="refresh" content="0;url=https://www.hxstrive.com"> <title>HTTP跳转</title> </head> <body> <!-- HTTP 跳转到 HTTPS --> </body> </html>
当我们访问上面 HTML 代码时,会自动跳转到 https://www.hxstrive.com 页面。