Skip to content
  • 1种
if ($scheme = http ) {
return 301 https://$host$request_uri;
}
if ($scheme = http ) {
return 301 https://$host$request_uri;
}
  • 2种
server_name xxx.com ;
rewrite ^(.*) https://xxx.com$1 permanent
server_name xxx.com ;
rewrite ^(.*) https://xxx.com$1 permanent
  • 3种
if ($server_port = 80 ) {
return 301 https://$host$request_uri;
}
这个与第一种差不多
if ($server_port = 80 ) {
return 301 https://$host$request_uri;
}
这个与第一种差不多
  • 4种
server_name xxx.com ;
return 301 https://$server_name$request_uri;
server_name xxx.com ;
return 301 https://$server_name$request_uri;
  • 5种

497 状态码

当 server 只允许 HTTPS 请求时,基于 HTTP 的访问会被 Nginx 返回 497 错误。这时我们使用 error_page 将访问重定向至 HTTPS 上:

error_page  497  https://$server_name$request_uri;
error_page  497  https://$server_name$request_uri;
  • 6种

返回一个写入 meta 标签的 html 页面,让浏览器跳转。和上面三种方式不同,此方案不在 Nginx 上进行跳转,节约服务器资源,而缺点是不能写入 $request_uri 变量,只能跳转到固定地址

server {
    ...

    index  meta.html;
    error_page 404 meta.html;
}

在要返回的 meta.html 中写入:

<html>
  <meta http-equiv="refresh" content="0; url=${你要跳转的目标地址}">
</html>
本站就使用这个方案,所以我是这样写的:

<html>
  <meta http-equiv="refresh" content="0; url=https://xxx.org/">
</html>
server {
    ...

    index  meta.html;
    error_page 404 meta.html;
}

在要返回的 meta.html 中写入:

<html>
  <meta http-equiv="refresh" content="0; url=${你要跳转的目标地址}">
</html>
本站就使用这个方案,所以我是这样写的:

<html>
  <meta http-equiv="refresh" content="0; url=https://xxx.org/">
</html>