2010-01-05 143 views
3

我用C++编写了一个高性能的HTTP事件服务器,并且我希望使用nginx和PHP-FPM(fastcgi)完美地工作。这是我的nginx配置的一个片段。nginx不转发POST到@fallback

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

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

回答

1

我通过重建最新版本的nginx来解决问题。配置,以及POST和GET转发完美地工作。怪事。

+1

StackOverflow中有58257个“未回答的问题”。请在这种情况下接受你自己的答案来帮助降低这个数字(因为你自己解决了这个问题)。 – 2010-01-08 02:58:55

0

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

http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/
Google for other examples。

这是nginx特有的,但是这个想法是在lighttpd和X-Sendfile头文件中提供的。

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

+0

如果您的请求参数不适合GET请求会怎么样? - 有没有办法将POST参数与X-Accel-Redirect一起传递给nginx? – Hackeron 2014-04-07 14:59:35