今天调银联收银台回调的时候,遇到一件特别坑的事情,我通过银联付款后,本来应该跳转到我自己定义的回调页面,但是每次都会返回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肯定会报错啊;
于是我想着用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; } }