代理_pass包含底字符时Nginx面临的问题

代理_pass包含底字符时Nginx面临的问题,nginx,Nginx,我有一个Nginx服务器,它将请求重定向到另一个外部站点。 位置配置如下所示: 因此,服务器会收到如下请求: http://localhost/h/test.com/testinguri.txt 代理通行证将是 一切正常,直到我们使用两个下划线,服务器将响应502: curl-Ihttp://localhost/h/test.com/testing_ur_i.txt HTTP/1.1 502坏网关 服务器:nginx/1.10.3 内容类型:text/html 内容长度:173 连接:保持活力

我有一个Nginx服务器,它将请求重定向到另一个外部站点。 位置配置如下所示:

因此,服务器会收到如下请求:

http://localhost/h/test.com/testinguri.txt

代理通行证将是

一切正常,直到我们使用两个下划线,服务器将响应502:

curl-Ihttp://localhost/h/test.com/testing_ur_i.txt

HTTP/1.1 502坏网关 服务器:nginx/1.10.3 内容类型:text/html 内容长度:173 连接:保持活力

调试模式下的错误日志:

2020/11/05 00:00:11[错误]40859#40859:*66328156从上游读取响应头时,上游连接过早关闭,客户端:***,服务器:uu,请求:“GET/h/test.com/testing_u_ui.txt HTTP/1.1”,上游:

请求在至少一秒钟后失败,因此不是超时问题。远程站点也能正常工作。(出于安全原因,我通过test.com更改了真实域名)


谢谢

给定的错误实际上表示连接已被后端关闭(在您的示例中为test.com)

请尝试将其添加到“位置”部分:

proxy_read_timeout 300s;
proxy_connect_timeout 75s;

因此,它与下划线的使用无关。 问题是远程站点支持的http版本

将代理过程的http更改为1.1修复了以下问题:

proxy_http_版本1.1


谢谢。

如何检查远程站点是否正常工作?通过获取“”?
proxy_read_timeout 300s;
proxy_connect_timeout 75s;