эмуляция if/else

Sergej Kandyla sk.paix at gmail.com
Thu Apr 24 14:55:48 MSD 2008


pavel at pronskiy.ru wrote:
> Вариации на тему виртуалдокрут->nginx+apache.
> http://trash.pronskiy.ru/nginx.conf
>
>    
>     #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;
>
>     }
>

Интересный пример! Спасибо.
у меня на шареде конфигурация попроще...домены до 0.5 -1к уник. хостов 
проксируются на апач полностью. Для более нагруженных доменов скриптом 
генирируется конфиги соотвествующего виртуалхоста в нжинкс (динамика по 
прежнему на апач.)


Вопрос другой,  не хочется привязываться к статическим расширениям (у 
вас их что-то вообще мало)...

   location ~* 
^.+.(nrg|htm|jpg|jpeg|gif|png|ico|css|zip|7z|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|
wav|bmp|rtf|js|avi|mp3|mp4|mpg|iso|djvu|dmg|flac|r70|mdf|chm|sisx|sis|flv|thm|bin)$ 
{
           root /home/vhosts/domain/public_html/;
        }


и постоянно этот списочек расширений статики приходится дополнять...т.к. 
пользователи умудряются залить контент в самых немыслимых форматах.
Отказаться полностью от апача мешает апачевский .htaccess ( или 
нежелание писать реврайты на все случаи жизни под всевозможные cms)

хотелось бы что-то в духе

        location ~* ^.+\.(php|html|shtml)$ {
                proxy_pass http://IP;
        }

         location ~* ^.+\.(..?)$ {
                if (!-f $request_filename) {proxy_pass http://IP;}
                 root /home/vhosts/domain/public_html/;
        }

т.е. динамику (php|html|shtml) отдаем на бекенд, а также если путь к 
статике динамически сгенерирован - то тоже на бекенд.
Всю остальную предполагаемую статику (..?) отдаем нжинксом.

Такая конфигурация у меня не заработала (статика отдавалась бекендом)
гдето ошибаюсь?

>
> При запросе к статике получаем докрут для любого домена привязанного к 
> этому ip
> Путь к клиентской статике для нжинкс: 
> /home/domain.tld/www.domain.tld/www/
> Если путь к статике динамически сгенерирован - отдаём  апачу.
>
>    if (!-f $request_filename) {proxy_pass http://127.0.0.1:8000;}
>
>
>>>
>>> более правильно не использовать if вообще:
>>>
>>>   
>>
>> Подскажите,  насколько больший оверхеад дают использование if по 
>> сравнению с неиспользованием?
>>
>


-- 
Wbr, SK






More information about the nginx-ru mailing list