рд▓реЗрдХрд┐рди рдЬреЗрд░реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕реНрдЯреИрдЯрд┐рд╕реНрдЯрд┐рдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдиреЗрдЧрдиреЗрдХреНрд╕ рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
1) рдХреЗрд╡рд▓ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ;
2) рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рд▓ рд░реВрдк рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ;
3) рдкреАрдврд╝реА рдХреЗрд╡рд▓ рддрднреА рдЬрдм / рд╕рд╛рдордЧреНрд░реА рдФрд░ / рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЬреЛрдбрд╝ / рдмрджрд▓ рд░рд╣реА рд╣реЛрдВред
рдореИрдВрдиреЗ рдЗрди рдХрдорд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЬреЛрдбрд╝рд╛, рдФрд░ рдореБрдЭреЗ рд╕реНрдЯреИрдЯрд┐рдХрдирд░рдирд░ рдкреНрд░реЛ рдорд┐рд▓рд╛ред
рдЗрд╕рдХреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
- рдЕрдирд╛рдо рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реА рдХреИрд╢рд┐рдВрдЧ
рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реЛрдз, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдкреГрд╖реНрда рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрд╢рд╛ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛, рд╕реАрдзреЗ Django рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, StaticGenerator рдкреНрд░реЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЧреБрдордирд╛рдореА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ 99% рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ)ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рди рдХреЗрд╡рд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реЛрддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдирдЧреНрдиреЗрдХреНрд╕-рдИ рдореЗрдВ рднреА рд╣реЛрддреА рд╣реИ (рдпрд╣ рдХреБрдХреАрдЬрд╝ рдореЗрдВ рд╕реЗрд╢рдирд┐рдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ)ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдирд░реЗрдЯрд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдирдЧреАрдирдХреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред
рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЕрдирд╛рдо рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд nginx config рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ (рдЕрдкрд╛рдЪреЗ рдмреИрдХреЗрдВрдб рдХреЗ рдмрдЬрд╛рдп, 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 рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред
рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЬрдирд░реЗрдЯрд░рдкреНрд░реВрдл рдХреЛ рдЬрдЧрд╣ рджреЗрдВ
рдФрд░ рд╕реЗрдЯрд┐рдВрдЧ 'Oracle.ResponseStaticGenerator' рдореЗрдВ MIDDLEWARE_CLASSES рдЬреЛрдбрд╝реЗрдВред
рд╡рд╣рд╛рдВ www рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрде рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред
from os import path
WEB_ROOT = path.realpath("www")
рдЗрд╕рд▓рд┐рдП рдЖрдк рдХреИрд╢ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
- рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ , рдЬреИрд╕реЗ www.alrond.com/?test=1
рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЬрд┐рди рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдирдХреА рд╢реБрд░реБрдЖрдд рд╕реЗрдЯ рдХрд░реЗрдВ :
STATIC_GENERATOR_EXCLUDED = (
'/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/ рд╣рдЯ рдЬрд╛рдПрдВрдЧреЗ ред en / index.html? tag = django & sort = desc - рд╡рд┐рдЪрд╛рд░реЛрдВ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдХреИрд╢ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛
рдХрд┐рд╕реА рднреА рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд░рд┐рдЯрд░реНрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкрд╣рд▓реЗ [[DisableStaticGenerator]] = 1 рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
рдбрд╛рдЙрдирд▓реЛрдб StaticGenerator рдкреНрд░реЛ рдпрд╣рд╛рдБ ред рдЕрдВрддрд░ рдЬреЛрдбрд╝рд╛ ResponseStaticGenerator рд╡рд░реНрдЧ рдФрд░ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд delete_from_path рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╣реИ
рдореВрд▓ рд▓реЗрдЦ: www.alrond.com/en/2008/feb/23/static-generator-pro