Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: эмуляция if/else
Вариации на тему виртуалдокрут->nginx+apache.
http://trash.pronskiy.ru/nginx.conf
server {
listen 80 default rcvbuf=8k sndbuf=32k;
server_name _;
error_page 502 /502.shtml;
error_page 403 /403.html;
error_page 404 /404.html;
#errors pages
location /403.html { root /etc/nginx/errors;}
location /404.html { root /etc/nginx/errors;}
location /502.shtml { root /etc/nginx/errors;ssi on;}
include /etc/nginx/deny.conf;
#default directory
set $defloc /home/default-site/www/;
#set $stat '<script src="/webstat/?js"
type="text/javascript"></script>';
#apache dynamic delivery
location / {
#set $stat '<script src="/webstat/?js"
type="text/javascript"></script>';
#sub_filter '</html>' '</html>\n$stat\n';
#sub_filter_once on;
open_file_cache max=2000 inactive=60s;
open_file_cache_valid 120s;
open_file_cache_errors on;
client_body_temp_path /tmp/tmp-body-nginx;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
send_timeout 60m;
proxy_pass http://127.0.0.1:8000/;
proxy_temp_path /tmp/tmp-nginx;
}
#munin graphic status
location /nginx_status {stub_status on;}
#apache icons fancyindexing
location ^~ /.icons/ {alias /etc/apache2/icons/;}
#empty gif & 0 gif
location ~ (0\.gif|empty\.gif|blank\.gif) {empty_gif;}
#static delivery images and files
location ~*
^.+\.(swf|gif|jpg|jpeg|png|ico|js|css|xsl|txt|doc|rtf|pdf|rar|zip|gz|tgz|xls)$ {
if (!-f $request_filename) {proxy_pass http://127.0.0.1:8000;}
if ($http_host ~ ^([^.]+)\.([^.]+)\.([^.]+)$) { set $root
/home/$2/$1.$2.$3/www; }
if ($http_host ~ ^www\.([^.]+)$) { set $root /home/$1/$1.$2/www; }
if ($http_host ~ ^([^.]+)\.([^.]+)$) { set $root
/home/$1/www.$1.$2/www; }
if ($http_host ~ ^mail\.(.*)$) { set $root /var/www/webmail/www; }
if ($http_host ~ ^mysql\.(.*)$) { set $root
/var/www/phpmyadmin/www; }
if ($http_host ~ ^mailadmin\.(.*)$) { set $root
/var/www/mailadmin/www; }
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
send_timeout 60m;
root $root;expires 1d;
}
#if robots in user location?
location = /robots.txt {
if ($http_host ~ ^([^.]+)\.([^.]+)\.([^.]+)$) { set $root
/home/$2/$1.$2.$3/www; }
if ($http_host ~ ^www\.([^.]+)$) { set $root
/home/$1/$1.$2/www; }
if ($http_host ~ ^([^.]+)\.([^.]+)$) { set $root
/home/$1/www.$1.$2/www; }
if (!-f $request_filename) {break;root $defloc;}
root $root;
}
#if favicon in user location?
location = /favicon.ico {
if ($http_host ~ ^([^.]+)\.([^.]+)\.([^.]+)$) { set $root
/home/$2/$1.$2.$3/www; }
if ($http_host ~ ^www\.([^.]+)$) { set $root
/home/$1/$1.$2/www; }
if ($http_host ~ ^([^.]+)\.([^.]+)$) { set $root
/home/$1/www.$1.$2/www; }
if (!-f $request_filename) {break;root $defloc;}
root $root;
}
#stat
location ^~ /webstat/ {
proxy_pass http://127.0.0.1:8000/webstat/;
alias $defloc/webstat/;
autoindex off;
index index.php;
}
}
При запросе к статике получаем докрут для любого домена привязанного к
этому ip
Путь к клиентской статике для нжинкс: /home/domain.tld/www.domain.tld/www/
Если путь к статике динамически сгенерирован - отдаём апачу.
if (!-f $request_filename) {proxy_pass http://127.0.0.1:8000;}
Sergej Kandyla пишет:
Roxis wrote:
On Wednesday 23 April 2008, Sergey Shepelev wrote:
Всегда были не совсем ясны сходство и различия break;, rewrite break и
rewrite last.
Обычная задача. Существующие файлы отдавать статикой, несуществующие
проксировать. Сейчас написано два if: -f и !-f.
Как это написать более правильно?
Может так? Есть комментарии по поводу этого куска?
location / {
if (-f $request_filename) {
break;
root html;
}
proxy_pass http://127.0.0.1:1234;
}
более правильно не использовать if вообще:
location / {
root html;
error_page 404 = @backend;
}
location @backend {
proxy_pass ...;
}
Подскажите, насколько больший оверхеад дают использование if по
сравнению с неиспользованием?
мне нравится реализация автоматических субдоменов
server {
listen 80;
server_name example.com *.example.com;
root /var/www/example.com/$subdomain;
set $subdomain "";
if ($host ~* ^([a-z0-9-\.]+)\.example.com$) {
set $subdomain $1;
}
if ($host ~* ^www.example.com$) {
set $subdomain "";
}
}
но, судя по настроениям рассылки, это плохая практика...
--
icq: 99699699
|