ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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




 




Copyright © Lexa Software, 1996-2009.