nginx忽略丢失的HTTP头

  • 本文关键字:HTTP nginx nginx proxy
  • 更新时间 :
  • 英文 :


是否有办法告诉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;
}

请注意,这可能是不推荐的,因为丢失的头可能包含重要的信息,如身份验证,应该正确处理。

最新更新