Nginx handle Expect:100继续头

2024-03-28 13:57:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在集成一个第三方支付网关,该网关在成功交易时发送IPN请求。因此,我们已经构建了一个API端点来处理在dev-env中运行良好的请求。在

现在的问题是,当我们在API服务器前面使用nginx时,它会得到301个重定向。当我们使用一个代理隧道,如ngrok,它通过ngrok服务器代理http请求时,请求通过nginx成功地传递到我们的API服务器,但是当IPN POST请求直接服务于nginx时,它将获得301重定向。为了更深入地挖掘,我们使用python SimpleHttpServer截获请求,从而找到http报头的区别:

  • 无ngrok(直接到nginx)

['Host: 35.154.216.72:4040\r\n', 'Accept: /\r\n', 'Content-Length: 1030\r\n', 'Content-Type: application/x-www-form-urlencoded\r\n', 'Expect: 100-continue\r\n']

  • 与ngrok

['Host: 543fdf1c.ngrok.io\r\n', 'Accept: /\r\n', 'Content-Length: 1013\r\n', 'Content-Type: application/x-www-form-urlencoded\r\n', 'X-Forwarded-For: 2a01:4f8:192:22ec::2\r\n']

我们假设问题出在Expect: 100-continue头上。那么问题是有没有办法用Nginx来处理这个问题呢?或者对于这样的场景,行业标准的解决方案是什么?在

仅供参考:Nginx配置:

location /api/ {

proxy_set_header Expect $http_expect;
client_body_in_file_only on;
proxy_pass_request_headers      on;
proxy_http_version 1.1;

proxy_set_header X-Forwarded-Proto https;
proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection 'upgrade';
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_pass_header X-CSRFToken;
#proxy_pass_header csrftoken;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://kk-api;
}

IPN终结点是/api/v1/ipn


Tags: 服务器apihttphostnginxpasscontentngrok