运维

Nginx强制HTTP 301跳转HTTPS协议配置方法

MarginNote 3 - Mac端PDF阅读批注工具 激活码价格:¥69.00
赤友 NTFS for Mac 助手 -  磁盘硬盘格式读写软件注册激活码价格:¥35.00
虫洞 -  iPhone安卓投屏操控 电脑手机多屏协同,价格:¥45.00
namesilo全网最便宜域名注册商,输入折扣码:nsilo20立减1美元!

如今越来越多的网站已经开始安装SSL 证书,而在从 HTTP 协议跳转到HTTPS 协议上就变得有些意思了,也更深层次的写过“HSTS 安全协议配置启用”,以实现 HTTP 到HTTPS的适配,但是子凡却忽略了最简单的一个301跳转步骤。
Nginx强制HTTP 301跳转HTTPS协议配置方法
一、Nginx 301 重定向跳转不支持 GET 参数的问题描述

//Nginx 301重定向跳转不支持GET参数示例
if ($server_port !~ 443){
	rewrite ^/.*$ https://$host$request_uri permanent;
}

首先来看看在 Nginx 配置文件中的一个 301 跳转的配置,看上去这就是一个 Nginx 环境标准通用的 301 重定向配置,并没有错误,也可以实现从 http 到 https 的 301 跳转,但是由于用户中心的头像调用有较大的开放性和适配度,所以可以直接通过动态的 GET 参数获取头像,例如:http://i.leiue.com/avatar.php?name=leixue,通过 HTTP 状态查询工具查询结果如下图:
Nginx强制HTTP 301跳转HTTPS协议配置方法
301 跳状态已经成功,但是我们仔细看 Location 返回的值就是:https://i.leiue.com/avatar.php?name=leixue?name=leixue,已经不仅仅是将 http 换成 https 了,而是后面的 GET 参数也被重复了一遍,所以也就导致了最后的 301 重定向跳转失败和错误了。
二、Nginx 301 重定向跳转支持 GET 参数的配置方法
通过上述的一些经历做过简单的描述和验证后,只是初步的发现了问题,而接下来需要的就是解决这个问题,那么最简单直接的还是直接上 Nginx 的配置代码:

//Nginx 301重定向跳转支持GET参数的配置方法
if ($server_port !~ 443){
	rewrite ^(.*)$ https://$host$1 permanent;
}

常见的301跳转设置方法:
Nginx配置文件几种写法:
/etc/nginx/conf.d/*.conf
方法一:

if ($scheme = http ) {
    return 301 https://$host$request_uri;
}

方法二:

server_name 8jieke.com ;
rewrite ^(.*) https://8jieke.com$1 permanent

方法三:

if ($server_port = 80 ) {
    return 301 https://$host$request_uri;
}

方法四:

server_name 8jieke.com ;
return 301 https://$server_name$request_uri;

经过简单的修改后,就已经完美解决问题,有点正则的感觉,所以如果大家在做 Nginx 的 301 跳转的时候可以稍微的注意一下,或者你也在做 301 跳转的时候遇到过一些错误,不妨试试这个方法。

(0)

本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!

ToDesk - 安全好用流畅远程控制软件 替代TeamViewer,价格:¥108.00
Eagle - 图片收集管理必备软件 激活码价格:¥119.00
PDF Expert 2 - Mac上优秀的PDF阅读编辑工具,价格:¥119.00

热评文章

发表评论