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已经全部丢失，程序也报错没有接收到参数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; }扩展资料