2010-01-05 146 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