nginx 实现 http 跳转到 https

本文将介绍怎样实现 nginx 从 http 请求跳转到 https 请求。

下面将介绍三种从 http 请求跳转到 https 请求的方式:

利用 rewrite 方法

这应该是大家最容易想到的方法,将所有的 http 请求通过 rewrite 重写到 https 上即可。nginx 配置如下:

server {  
    listen  80;  
    server_name www.hxstrive.com hxstrive.com; 
    rewrite ^(.*)$  https://$host$1 permanent;  
}

利用 return 301 实现

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 的 497 状态码

当我们 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" 实现

上述方法均会耗费服务器的资源,我们可以利用 <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 页面。

我们一定要给自己提出这样的任务:第一,学习,第二是学习,第三还是学习。 —— 列宁
1 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号