我用C ++编写了一个高性能的HTTP事件服务器,我想用nginx和PHP-FPM(fastcgi)完美地工作。 这是我的nginxconfiguration的一个片段。
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处理或者你有什么(这基本上是彗星)。 重点是,我希望nginx抓住505的错误,并将该请求转发给PHP,以便PHP可以相应地处理事件。 我的服务器基本上只是一个事件中心,使许多许多用户能够连接,看看是否有任何新的事件。 如果发生事件,PHP将处理事件分发,包括权限和其他易变的东西。
问题是nginx没有将传递给* .eve的POST(或GET)variables传递给BACKEND.php。 现在我认为这是由devise(由于error_page指令),但我认为必须有某种方式使其工作。 我的服务器在9001上运行,PHP-FPM在9000上运行。任何想法?
我通过重建最新版本的nginx来解决这个问题。 配置,以及POST和GET转发完美。 怪事。
您的服务器可以通过指向后端url的X-Accel-Redirect标题返回响应。 在这种情况下,nginx将向url发出请求,并将响应返回给用户。 没有30 [12]重定向,就像用户首先要求URL一样。
http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/
Google的其他例子。
这是nginx特有的,但是这个想法在lighttpd和X-Sendfile头文件中是特征的。
我不会指望通过这里的POST请求参数。 如果您的后端可以接受,请在GET-X-Accel-Redirect返回中镜像POST参数。 error_page不会通过任何确实。