场景: 对外接口在只有通过GET请求才能获取到页面数据,但是第三方请求通过Form表单将这个接口的请求通过POST方式来请求,所以出现 405 的报错,第三方那边不可能改,因此只有我们强制将POST请求转成GET请求。
场景一:
本地访问没有设置过代理,location中只有root设定的字段,这时可以用return加301或者302状态码结合proxy将请求转过去即可
##在nginx中增加如下配置即可
error_page 405 =200 @405;
location @405 {
proxy_method GET;
return 301 https://${server_name}$request_uri;
#error_page 405 =200 https://$host$request_uri; #网上有这种,我没有试过
}
备注:
301 是永久重定向
302 是临时重定向
场景二:前端请求是通过代理过来的,这时直接使用代理将请求转发过去即可
error_page 405 =200 @405;
location @405 {
proxy_method GET;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://test_server;
}
我当时尝试用rewrite重写,后来发现不行,所以用 proxy 方式