nginx忽略丢失的HTTP标头

rqmkfv5c  于 2023-01-12  发布在  Nginx
关注(0)|答案(1)|浏览(186)

有没有办法告诉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不要期待任何报头,而只转发接收到的有效负载?
谢谢你的帮忙!
此致安德烈亚斯
编辑:好的,发现服务器使用的是http 0.9,直接调用curl到服务器时抛出错误:curl: (1) Received HTTP/0.9 when not allowed使用选项--http0.9得到了想要的结果。(浏览器直接接收到了结果)。有没有机会告诉nginx代理到一个http0.9服务器?

kuarbcqp

kuarbcqp1#

您可以通过将proxy_ignore_headers指令设置为“X-Accel-Expires”和“Expires”来配置nginx忽略丢失的头,这将告诉nginx忽略那些特定的头,并且在代理请求时不期望它们出现。
您可以将其添加到nginx配置中的location块中:

proxy_ignore_headers X-Accel-Expires Expires;

此外,代理传递请求头关闭;可以使用,这告诉nginx忽略传递到代理服务器的所有报头。
至于有效负载,只要底层协议是HTTP,就应该没问题,因为有效负载将在HTTP请求的正文中发送。
因此,您的位置块可能如下所示

location /api/ {
    proxy_pass http://localhost:80/;
    proxy_pass_request_headers off;
}

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

相关问题