【问题标题】:nginx not forwarding POST to @fallbacknginx 不转发 POST 到 @fallback
【发布时间】:2010-01-06 12:38:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: php c++ nginx forwarding fallback


    【解决方案1】:

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

    【讨论】:

    • StackOverflow 中有 58257 个“未回答的问题”。在这种情况下,请通过接受您自己的答案来帮助降低该数字(因为您自己解决了问题)。
    【解决方案2】:

    您的服务器可以返回带有指向后端 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 确实不会通过。

    【讨论】:

    • 如果您的请求参数不适合 GET 请求怎么办? - 有没有办法将POST参数与X-Accel-Redirect一起传递给nginx?
    猜你喜欢
    • 2016-10-09
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多