nginx配置http强制重定向至https以及过程中遇到的坑

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已经全部丢失,程序也报错没有接收到参数

image-20221020090454449

301302 只支持 GET 请求,如果是 POST 请求,重定向后会使用 GET 请求且 Body 数据会丢失

解决

要想解决也很简单,只需要使用307进行重定向即可

307308 支持 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;
}

image-20221020090151593

image-20221020090255027

扩展资料

评论区
头像