码农日记

薄洪涛的个人博客

nginx转换post请求为get

今天调银联收银台回调的时候,遇到一件特别坑的事情,我通过银联付款后,本来应该跳转到我自己定义的回调页面,但是每次都会返回405错误码,很是恼火;

查了下日志

2019/06/24 14:58:39 [error] 7099#0: *99991 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.8.12, 
server: , request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "xxxx", referrer: "https://xxxx"


我开始以为是我们项目的Referer做了限制,于是用python写了代码请求测试,发现没有限制,但是在写py脚本的时候,发现了出错的原因,垃圾银联的回调请求用的post请求,而我们项目用的前后端分离,请求个页面用post肯定会报错啊;

微信图片_20190625152026.png


于是我想着用ngxin转换下请求方式,把post请求转换成get,然后我发现,如果页面是post请求的本应get请求的页面,会返回状态码405


   upstream local {
      server 127.0.0.1:xx;  你自己的项目的ip及端口
   }

server中,仅需要判断状态码是405的就直接跳转过去就可以了

error_page 405 =200 @405;
  location @405 {
       root /home/www/root/xx;  你自己项目的根目录
       proxy_method GET;
        proxy_pass http://local/$request_uri; 这里nginx会自己拼接参数,这里的local就是上面配置的local 
  }

重启nginx后,解决

比较配置涉密,所以从网上找了个差不多的

upstream local {    
    server 10.0.1.11:81;
}
server {    
    listen 81;    
    server_name testf.xxx.com;    
location / 
{        
    root /data/f/ROOT/;        
    index index.html index.htm;    # 解决vue history模式,刷新404问题。
    try_files $uri $uri/ /index.html;
}    
error_page 405 =200 @405;    location @405 
{
    root /data/f/ROOT/;        
    proxy_method GET;        
    proxy_pass http://local/$request_uri;
    
}    

}


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权所有 | 转载请标明出处