2015-11-12 35 views
2

我需要使用nginx來提供靜態文件(很多,很多文件,最小,但也是一個大的視頻文件的組合)。配置nginx爲靜態文件服務器當然很容易,除了...nginx複雜程序重寫規則 - 插件?單獨服務器?

...我們需要採取「輸入」路徑(用戶認爲該文件是)的處理並將其轉換爲真正的位置太複雜,無法用nginx的重寫引擎表達。通常,執行計算的邏輯當前是在Python庫中表示的。 (只是接受它太複雜,不能成爲一個nginx重寫規則。)

我的選項是讓nginx能夠應用我的自定義重寫規則來達到提供文件的正確路徑?我想到了這兩個選項:

  1. 編寫一些C代碼,我添加到nginx調用到Python並執行我的計算。 (對於這個答案,它甚至不重要,它是Python的。

    我只是注入的C代碼到nginx的,將做一個任意的計算。)我有,不過,不知道到哪裏,甚至開始尋找在哪裏做這個修改,以允許nginx做到這一點。

  2. 難道nginx的可以查詢獨立的後端進程(基本上是一個非常簡單的龍捲風服務器),並說:「嘿,給定的路徑X路徑是什麼Ÿ我應該服務)?

    雖然不理想去交過程中,我想如果這兩個過程是在同一臺機器上,等待時間應該是低的。

  3. 只寫它做了計算,然後再執行重定向到nginx的龍捲風服務器。

    這是做 - 能夠,但是然後需要我們的客戶端代碼來處理重定向,並且(a)這感覺較慢並且( b)我不想弄亂客戶,讓他們處理重定向,因爲現在他們必須兩次往服務器上去。

  4. ??

+0

您認爲您將通過將文件視爲靜態文件並因此希望它們由nginx提供服務而獲得什麼?爲什麼不使用nginx作爲前端和應用程序作爲服務器,因爲它是一個非常好的支持模式。我想我對你試圖達到的目標有點困惑。也許我錯了,但我會假設要求應用程序給出文件的路徑,然後用nginx加載文件不會比讓應用程序直接返回文件內容更高效。 – Cilyan

+0

龍捲風文檔相當明確地表示,使用它來提供大型靜態文件(大於內存容量)可能不會很好。既然服務很多,很多文件要快速到達相當大的一組客戶端,要求不要阻塞,我認爲nginx會比龍捲風服務器更適合這項任務嗎? (一個客戶端可以連續快速請求成千上萬的圖像。) – davidbaraff

+1

第二種選擇是「X-Accel-Redirect」,它的工作原理與您所說的幾乎一樣。 https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/#x-accel-redirect –

回答

0

Lua nginx module可能是您正在尋找的答案。它可以配置爲調用外部進程來決定如何處理請求,類似於你在問題中描述的內容,甚至可以找出如何完全獨立處理請求(可能通過查詢數據庫)。