Nginx+Passenger:在 GET 变量中传递 urlencoded URL 时,Nginx 出现 502 Bad Gateway

Nginx+Passenger:在 GET 变量中传递 urlencoded URL 时,Nginx 出现 502 Bad Gateway

以下是无效 URL 的示例:

http://domain/do?url=http%3A%2F%2Fwww.linkedin.com%2Fin%2Fperson
http://domain/do?url=http%3A%2F%2Fwww.linkedin.com%2F

但是,以下 URL 可以正常工作:

http://domain/do?url=http%3A%2F%2Fwww.linkedin.com

此外,这只会发生在 Nginx 上,使用 Passenger 与 Apache 可以正常工作,但我们在生产机器上使用 Nginx。

以下是 Nginx 错误日志中的条目:

2009/12/01 09:30:51 [error] 6407#0: *136 upstream prematurely closed connection while reading response header from upstream, client: xxx.xxx.xxx.xxx, server: domain, request: "GET /do?url=http%3A%2F%2Fwww.linkedin.com%2F HTTP/1.1", upstream: "passenger://unix:/tmp/passenger.6335/master/helper_server.sock:", host: "domain"

答案1

它与 Nginx 或 Passenger 无关。

有一个接受并使用 URL 的库无法与我们生产服务器上的 Ruby 版本兼容。由于某种奇怪的原因,它导致 Rails 灾难性地失败,以至于唯一的错误出现在 Nginx 的错误日志中。

相关内容