ただし、Jaredが提供するStaticGeneratorスクリプトとnginx構成には次のような欠点があります。
1)登録のないサイトにのみ関連。
2)単純な形式のリンクのみを使用します。
3)コンテンツおよび/またはコメントを変更/追加する場合のみ生成。
これらの欠点を修正し、スクリプトに興味深いものを追加し、 StaticGenerator Proを入手しました 。
追加機能:
- 匿名訪問者のみのキャッシュ
ページが異なる可能性がある登録ユーザーのリクエストは、キャッシュせずに常にDjangoに直接リダイレクトされますが、この場合は意味がありません。 したがって、StaticGenerator Proは主に匿名ユーザーに役立ちます(通常、99%以上あります)。
ユーザー定義は、スクリプト内だけでなく、nginx-eでも発生します(Cookie内のsessionidの存在に基づきます)。
これを行うには、ジェネレーターのスクリプトとnginxの設定を変更する必要がありました。
匿名ユーザーと匿名ユーザーを区別するために変更されたnginx設定の一部(Apacheバックエンドの代わりに、Djangoはfcgiを介して動作します):http {
# [here must be all standard parameters]
server {
server_name example.com;
listen 80;
root /home/mydjangoproject/www;
# django
set $django 1;
# ,
#
if ($is_args = "?") {
set $args_old ?$args;
}
if ($is_args = "") {
set $args_old "";
}
# ,
#
default_type text/html;
location / {
if (-f $request_filename/index.html$args_old) {
set $django 0;
}
#
if ($http_cookie ~* "sessionid=([^;]+)(?:;|$)" ) {
set $django 1;
}
#
if ($django = 0) {
rewrite (.*) $1/index.html$args_old break;
}
# django
if ($django) {
fastcgi_pass unix:/home/mydjangoproject/dj.sock;
break;
}
index index.html;
include conf/fastcgi.conf;
access_log logs/project.log main;
}
}
}
http {
# [here must be all standard parameters]
server {
server_name example.com;
listen 80;
root /home/mydjangoproject/www;
# django
set $django 1;
# ,
#
if ($is_args = "?") {
set $args_old ?$args;
}
if ($is_args = "") {
set $args_old "";
}
# ,
#
default_type text/html;
location / {
if (-f $request_filename/index.html$args_old) {
set $django 0;
}
#
if ($http_cookie ~* "sessionid=([^;]+)(?:;|$)" ) {
set $django 1;
}
#
if ($django = 0) {
rewrite (.*) $1/index.html$args_old break;
}
# django
if ($django) {
fastcgi_pass unix:/home/mydjangoproject/dj.sock;
break;
}
index index.html;
include conf/fastcgi.conf;
access_log logs/project.log main;
}
}
}
別の素晴らしい機能:
nginxログでは、ページがキャッシュから提供されたのか、django経由で提供されたのかを確認できます。 ログ形式に$ djangoを追加するのに十分です。
たとえば、次のように:
log_format main '$remote_addr [$time_local] "$request" '
'$status $bytes_sent $body_bytes_sent $gzip_ratio '
'$django "$http_referer" "$http_user_agent"';
ログに
0-ファイルからのページ(キャッシュ)
1-djangoからfcgi経由のページ
- ミドルウェアは 、最初のアクセスで静的ファイルを生成し、後続のファイルはすべてキャッシュから取得されます。
静的ファイルは、肯定応答(コード200)とタイプGETの要求でのみ作成されます。
インストールするには、generatorpro.pyをプロジェクトフォルダーに配置します
そして、settings.py 'generator.ResponseStaticGenerator'のMIDDLEWARE_CLASSESに追加します。
そこにwwwフォルダーへのパスを登録することを忘れないでください。
from os import path
WEB_ROOT = path.realpath("www")
したがって、プロジェクトディレクトリにキャッシュを配置できます。
- www.alrond.com/?test=1のような、 引数を1行に含むリンクの 操作
一意の各オプションは個別にキャッシュされます。
- settings.pyでは、キャッシュから除外されるパスの先頭を設定できます:
STATIC_GENERATOR_EXCLUDED = (
'/comments/postfree',
'/rating',
'/rss',
'/admin',
)
したがって、たとえば、/ comments / postfree、/ rating、/ rss、/ adminで始まるすべてのパスは除外されます。
もちろん、アプリケーションでは、一意のデータを匿名ユーザーに表示することもできることに留意する必要があります。この場合、これらのパスも単純に除外できます。
- 巧妙なキャッシュ削除
特定のパスを削除すると、引数を持つすべてのオプションが削除されます(当然、最初の呼び出しの前)。
たとえば、 http://www.alrond.com/en/index.htmlを削除すると、 http://www.alrond.com/en/index.html? test = 1とhttp://www.alrond.com/が削除されますja / index.html?tag = django&sort = desc - ビューコントローラーのキャッシュから除外する機能
どのハンドラでも、 応答を返す前に応答['DisableStaticGenerator'] = 1を挿入するだけで十分です。
StaticGenerator Proはこちらからダウンロードしてください 。 違いは、追加されたResponseStaticGeneratorクラスと若干変更されたdelete_from_path関数にあります。
もとの記事: www.alrond.com/en/2008/feb/23/static-generator-pro