2011-11-10 22 views
1

我使用http://www.fastcgi.com庫+ nginx網絡服務器編寫了一個簡單的HTTP響應C++程序。它工作得很好。但我注意到,fcgi的功能如何在無效的用戶嘗試POST大文件時關閉TCP連接?

int FCGX_Accept_r(FCGX_Request *request); 

在所有請求傳輸到服務器之前不返回。問題:在文件傳輸完成之前,我無法分析來自URI的參數:我想分析「?sid =」參數以拒絕來自無效用戶的傳輸。如果有人向服務器發送1GB文件,這將浪費帶寬。

據我所知,當新的請求開始時,Web服務器總是通過FastCGI連接發送FCGI_BEGIN_REQUEST,然後是FCGI_PARAMS等。因此,在用戶傳輸所有內容(可能不需要和太大)之前,數據。

另外我會閱讀更多有關其FastCGI能力的nginx文檔。

更新: 嘗試發送2 GB的文件通過HTML表單+嗅探nginx的和FastCGI之間的交流nginx的:nginx的甚至沒有嘗試所有的2GB已經到來之前發送到FastCGI應用程序的字節。所以,這種行爲有點不正常。如果你想要我所要求的功能,事實證明你應該開發你自己的nginx模塊或簡單的網絡服務器。嗯...

回答

0

我想你可以通過這個控制:

location /xxx/upload { 
    access_by_lua ' 
     //check cookie or something can recognize the req is valid or not 
    '; 
    fcgi_pass XXXX; 
} 

檢查此鏈接: http://openresty.org/