3

我用 C++ 编写了一个高性能 HTTP 事件服务器,我想让它与 nginx 和 PHP-FPM (fastcgi) 完美结合。这是我的 nginx 配置的片段。

    location ~ \.eve$ {
        gzip off;
        proxy_redirect off;
        proxy_buffering off;
        proxy_pass http://127.0.0.1:9001;
        proxy_intercept_errors on;
        error_page 505 = @fallback // this is actually BACKEND.php
    }

如果有事件,我的事件服务器会返回 505 错误,否则它会挂起,并最终返回我用 JS 处理的“NO STATE CHANGE”指令或你有什么(这基本上是彗星)。关键是我希望 nginx 捕获 505 错误并将该请求转发给 PHP,以便 PHP 可以相应地处理该事件。我的服务器基本上只是一个事件中心,允许许多用户能够连接并查看是否有任何新事件。如果有事件,PHP 会处理事件分发,包括权限和其他易变的东西。

问题是 nginx 没有将传递给 *.eve 的 POST(或 GET)变量传递给 BACKEND.php。现在我认为这是设计使然(由于 error_page 指令),但我认为必须有某种方法使其工作。我的服务器在 9001 上运行,PHP-FPM 在 9000 上运行。有什么想法吗?

4

2 回答 2

1

我通过简单地重建最新版本的 nginx 解决了这个问题。配置以及 POST 和 GET 转发工作完美。奇怪。

于 2010-01-06T04:38:29.337 回答
0

您的服务器可以返回带有指向后端 url 的 X-Accel-Redirect 标头的响应。在这种情况下,nginx 将向 url 发出请求并将响应返回给用户。没有 30[12] 重定向,就好像用户首先请求了 url。

http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/
谷歌获取其他示例。

这是 nginx 特有的,但这个想法在带有 X-Sendfile 标头的 lighttpd 中得到了体现。

我不会指望这里传递的 POST 请求参数。如果您的后端可以接受,则在 X-Accel-Redirect 的 GET 参数中镜像 POST 参数。error_page 确实不会通过。

于 2010-01-05T12:48:46.350 回答