我用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.任何想法?
答案 0 :(得分:1)
我通过简单地重建最新版本的nginx来解决问题。配置,以及POST和GET转发工作完美。古怪。
答案 1 :(得分:0)
您的服务器可以返回带有指向后端网址的X-Accel-Redirect标头的响应。 在这种情况下,nginx将向url发出请求并将响应返回给用户。 没有30 [12]重定向,就像用户首先请求了网址一样。
http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/
谷歌的其他例子。
这是特定于nginx的,但这个想法在lighttpd中以X-Sendfile标题为特色。
我不会指望在这里传递POST请求参数。 镜像POST参数在GET的X-Accel-Redirect返回, 如果你的后端可以接受。 error_page确实不会传递任何内容。