下面将介绍三种从 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 页面。