问题:
NGINX proxy_pass没有将GET传递给上游代理服务器。
设置:
代理设置非常简单。我们有一个在移动设备上运行的应用程序,该应用程序发送POST(GUID)和GET(到网站的URI)。 POST和GET通过代理服务器发送到upsteam服务器,以处理POST(身份验证GUID)和GET(URI中标识的返回属性)。代理应该只是在应用程序和上游服务器之间传递此TCP通信。
预期结果:
我们希望按照GET中包含的URI将(TCP)内容交付给APP。
当前结果:
50秒后,上游服务器超时(发送408)。我们可以看到,NGINX代理服务器正在从客户端应用程序按预期方式获取预期的POST请求以及POST请求中包含的数据(带有URI的GET到网站)。但是NGINX服务器不会在POST请求之后写出数据。它正在将POST转发到代理服务器,而不是GET。 50秒后,上游代理服务器超时(应发送408)。
测试和错误:
我们在错误日志(调试级别)中没有看到任何问题。唯一的错误是等待GET后上游服务器超时。我们已经在电话(客户端应用程序)和代理服务器上运行了TCPdump,将其面向该应用程序,并将其上游面向代理服务器,并分析了.pcap。我可以看到从电话发送到代理的POST和GET,以及代理确认帧。而且我可以看到代理将POST发送到上游服务器和同一服务器的确认。这一切都在300ms的短时间内发生。代理和上游服务器发送一些保持活动的流量,直到上游最终在50秒后发送超时。但是我从来没有看到GET被传递。
NGINX服务器上的配置:
server {
listen 80;
# Make site accessible from http://localhost/
server_name proxy.server.name;
location / {
# Proxy server
proxy_pass http://upstream.server.com:8080;
# Header directives
include proxy_params;
proxy_pass_request_body on;
proxy_pass_request_headers on;
}
# Logging location
access_log /var/log/nginx/proxy.server.name/access.log;
error_log /var/log/nginx/proxy.server.name/error.log debug;
}
请帮助。