使用proxy_pass通过nginx传递PayPal请求

时间:2016-02-23 13:39:06

标签: nginx paypal proxy

我正在尝试通过配置为代理的Nginx服务器将请求传递给PayPal NVP Sandbox Api(https://api-3t.sandbox.paypal.com/nvp)。

nginx配置是

server {
  listen 80;
  server_name localhost;
  error_log /var/log/nginx/error_pp.log debug;

  location / {
    #proxy_pass https://google.com:443; # works
    proxy_pass https://api-3t.sandbox.paypal.com:443;
  }
}

没有代理的测试请求类似于

$ curl https://api-3t.sandbox.paypal.com/nvp

结果

ACK=Failure&L_ERRORCODE0=81002&L_SHORTMESSAGE0=Unspecified%20Method&L_LONGMESSAGE0=Method%20Specified%20is%20not%20Supported&L_SEVERITYCODE0=Error

使用代理

$ curl localhost/nvp

我没有回答,日志显示错误请求:

127.0.0.1 - - [23/Feb/2016:08:28:50 -0500] "HEAD /nvp HTTP/1.1" 400 0 "-" "curl/7.29.0" "-"

我希望与直接请求(ACK=Failure...)相同的结果。

如果我为proxy_pass使用不同的网址(比如google),一切正常(当然我会得到不同的回复)。在PayPal api或nginx文档中搜索结束时没有结果。

如果可以进行此设置或如何解决此问题,是否有人有线索?

感谢您的帮助!

此致 丹尼斯

1 个答案:

答案 0 :(得分:0)

终于找到了答案:我需要添加

proxy_http_version 1.1;

nginx默认发送1.0,但paypal需要1.1。

我的请求的最小配置是

server {                                                                                  
        listen 80;                                                                        
        server_name localhost;                                                            

        # PayPal:                                                                         
        ssl_protocols TLSv1.2;                                                            
        proxy_http_version 1.1;                                                           

  location / {                                                                            
          proxy_pass https://api-3t.sandbox.paypal.com:443;                               

          proxy_cache_bypass 1;                                                           
          proxy_no_cache 1;                                                               
          proxy_read_timeout 60s;                                                         
  }                                                                                       
}