nginx配置http强制重定向至https以及过程中遇到的坑
重定向的常规配置
server {
listen 80;
server_name xxx.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
如果server中的80端口和443端口写在一起的,也可以使用这段配置
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
这是一种常规的配置方式,宝塔中的强制重定向,就是使用的这段配置
坑
rewrite 是301跳转
在post关闭自动重定向后可以发现执行了301重定向到https页面,而这个时候,POST请求中的body已经全部丢失,程序也报错没有接收到参数
301
、302
只支持 GET
请求,如果是 POST 请求,重定向后会使用 GET 请求且 Body 数据会丢失
解决
要想解决也很简单,只需要使用307进行重定向即可
307
、308
支持 POST
请求,在 POST 重定向的时候会带上原来请求的 Body 再请求新的地址,Body 数据不会丢失
配置如下:
server {
listen 80;
server_name xxx.cn;
# rewrite ^(.*)$ https://${server_name}$1 permanent;
return 307 https://${server_name}$request_uri;
}
或者
if ($server_port !~ 443){
# rewrite ^(/.*)$ https://$host$1 permanent;
return 307 https://${server_name}$request_uri;
}
分别是哔哩哔哩序号35,小米运动序号2,米友社序号13,这个是同一个账号下运行的任务