2013-09-23 32 views
0

我有以下情形;我有一個簡單的博客應用程序,它從數據庫中獲取條目。標準CRUDL,沒什麼特別的。如果存在第一個靜態頁面

由於博客文章/頁面比被修改更多,所以我想在首次提供博客頁面時生成靜態頁面並將其用於後續查詢。

我唯一的解決方案是編寫一個視圖裝飾器來檢查靜態頁面,並在存在的情況下提供服務(如果不存在則生成它)。是否有可能配置apache(或nginx)做有條件的服務部分?

是的,我知道我可以使用靜態博客生成器,但我的目標是擴展應用程序,而不僅僅是一個簡單的博客。

+0

你考慮緩存的頁面呢?如果你的恐懼是數據庫查找,你可以使用django緩存中間件,它會緩存與url相關的響應。 – toad013

+0

@ toad013:是的,那將是默認解決方案。但是,如果緩存過期或服務器停機,那麼這一代會再次發生,這正是我試圖避免的。 –

回答

2

Nginx documention表示可以使用try_files指令嘗試本地文件,然後回退到代理(例如,運行Django應用程序的Gunicorn)。

location/{ 
    try_files $uri $uri.html @django; 
} 

location @django { 
    proxy_pass http://127.0.0.1:8000; 
} 

看起來有一種方法可以在Apache中實現相同的功能。請參閱以下問題並回答解釋:https://serverfault.com/questions/290784/what-is-apaches-equivalent-of-nginxs-try-files

使用mod_rewrite:

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f 
RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L] 
+0

很酷的東西。 Apache中是否有等價物? –

+0

我已經添加了一個鏈接到Apache解決方案。如果您滿意,請您接受我的答案。謝謝 – AndrewS