эмуляция if/else
pavel at pronskiy.ru
pavel at pronskiy.ru
Wed Apr 23 20:45:31 MSD 2008
Вариации на тему виртуалдокрут->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
More information about the nginx-ru
mailing list