問題描述
網站最初未強制啟用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;
}
}