是否有办法告诉nginx在代理请求时忽略丢失的HTTP标头?
有一个现有的专有HTTP服务器发送没有任何头的请求。无法配置服务器。我需要从这个服务器在web应用程序的各种端点。因此,我想设置我的nginx代理请求到这个服务器。我在我的常规服务器中有位置配置。
location /api/ {
proxy_pass http://localhost:80/;
}
调用相应的uri时nginx报错:
upstream sent no valid HTTP/1.0 header while reading response header from upstream, client: 127.0.0.1, server: localhost, request: ....
有没有办法告诉nginx不期望任何头,只是转发收到的有效载荷?
谢谢你的帮助!
亲切的问候,Andreas
编辑:Ok,发现服务器正在使用http 0.9,当调用curl直接到服务器抛出一个错误:curl: (1) Received HTTP/0.9 when not allowed
使用选项——http0.9得到了期望的结果。(它在浏览器中被接收,无需进一步操作)。有机会告诉nginx代理到http 0.9服务器吗?
通过将proxy_ignore_headers指令设置为"X-Accel-Expires"one_answers";Expires"。这将告诉nginx忽略这些特定的标头,并且在代理请求时不期望它们存在。
你可以把它添加到nginx配置的location块中:
proxy_ignore_headers X-Accel-Expires Expires;
另外,proxy_pass_request_headers off;可以使用,这告诉nginx忽略所有传递给代理服务器的头信息。
至于有效载荷,只要底层协议是HTTP,就应该没问题,因为有效载荷将在HTTP请求的正文中发送。
那么你的位置块可以像这样
location /api/ {
proxy_pass http://localhost:80/;
proxy_pass_request_headers off;
}
请注意,这可能是不推荐的,因为丢失的头可能包含重要的信息,如身份验证,应该正确处理。