эмуляция if/else

Roxis roxis at list.ru
Thu Apr 24 15:11:51 MSD 2008


On Thursday 24 April 2008, Sergej Kandyla wrote:
> 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|t
>hm|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) отдаем на бекенд, а также если путь к
> статике динамически сгенерирован - то тоже на бекенд.
> Всю остальную предполагаемую статику (..?) отдаем нжинксом..
>
> Такая конфигурация у меня не заработала (статика отдавалась бекендом)
> гдето ошибаюсь?

ошибаетесь наверно в "(..?)"

и опять же, лучше использовать error_page чем if (!-f ...)

location / {
    root html;
    error_page 404 = @backend;
}

location @backend {
    proxy_pass ...;
}

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


More information about the nginx-ru mailing list