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

张子凡 设计开发 2017-08-29 15:26:14 阅读(4508) 评论(0)

如今越来越多的网站已经开始安装SSL证书,而在从HTTP协议跳转到HTTPS协议上就变得有些意思了,前面子凡也曾发过“WordPress整站开启HTTPS协议”的教程文章,也更深层次的写过“HSTS安全协议配置启用”,以实现HTTP到HTTPS的适配,但是子凡却忽略了最简单的一个301跳转步骤。

NGINX 301

做301跳转的方法其实还蛮简单,但是却容易被忽略,准确的说应该是忽略一些细节问题,就比如子凡最近在大力的改造泪雪旗下的一些网站做HTTPS,其中泪雪用户中心就是近期的一个重点,很多代码都进行了严格的重新,同时也从http升级到了https,但是启用因为Nginx环境上做的301跳转的问题,导致旗下网站无法正确调用泪雪用户中心的用户头像,所以下面就简单的把这个问题和解决办法分享出来。

一、Nginx 301重定向跳转不支持GET参数的问题描述

1
2
3
4
//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状态查询工具查询结果如下图:

HTTP状态查询

301跳状态已经成功,但是我们仔细看Location返回的值就是:https://i.leiue.com/avatar.php?name=leixue?name=leixue,已经不仅仅是将http换成https了,而是后面的GET参数也被重复了一遍,所以也就导致了最后的301重定向跳转失败和错误了。

二、Nginx 301重定向跳转支持GET参数的配置方法

通过上述子凡的一些经历做过简单的描述和验证后,只是初步的发现了问题,而接下来需要的就是解决这个问题,那么最简单直接的还是直接上Nginx的配置代码:

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

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

除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址

本文链接:https://zhangzifan.com/nginx-301.html

发表评论