问题描述
网站最初未强制启用htpps,使用http、https都能访问。银行回写支付结果的地址,设置的是http协议地址。各银行设置方法不一。
启用强制https访问时,未考虑银行回写问题,导致支付结果未能正常被serlet接收。
解决方案:
Nginx中,匹配银行通知规则不强制跳转https
server {
listen 80;
server_name xxx.xxx.com;
charset utf-8;
if ($request_method ~* HEAD|DELETE|PUT) {
return 403;
}
location / {
return 301 https://$server_name$request_uri;
}
location ^~ /xxx/pay/notify {
proxy_connect_timeout 1;
proxy_pass http://ufshop;
proxy_buffering off;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
add_header X-Frame-options SAMEORIGIN;
}
}