Re[6]: очень много клиентов

Anton Maksimenkov engineer at hlebprom.ru
Thu Feb 16 17:27:46 MSK 2006


Hi, Igor.

>> Держать апач на бакэнде заставляют следующие функции:
>> 1) отключение неплательщиков (путём перенаправления на заданную
>> страничку), реализовано так
>> RewriteEngine   On
>> RewriteMap      block-domain-ru        txt:/var/www/block.domain.ru
>> RewriteRule     ^(/([^/]+)/.*)$        ${block-domain-ru:$2|$1}
>> файлик /var/www/block.domain.ru пополняется записями
>> firma74         http://domen.ru/pay.html
>> ...
> Это можно сделать примерно так:
> http {
>      map  $http_host  $blocked  {
>           firma74     http://domen.ru/pay.html;
>           ...
>      }
>      server {
>          if ($blocked) {
>              rewrite  ^   $blocked   redirect;
>          }
>          ...
>      }
Не удобно - это дело динамично меняется, переделывать конфиг совсем не
с руки. Сейчас файл автоматом меняется. Нельзя ли как-то тоже здесь
вынести это дело из конфига ?

>> 2) layout'ы, И верхний И нижний, реализовано
>>        LayoutDefaultHandlers   Off
>>        LayoutHandler   text/html
>>        LayoutHandler   text/plain
>>        LayoutHeader    /var/www/domen.ru/header.html
>>        LayoutFooter    /var/www/domen.ru/footer.html
>> критично держать ОБА.
> Но для картинок-то они не нужны ?
смысле? на сайтах не картинки лежат, а странички (ну с картинками
конечно), сайты то есть, информация, "я&моя собачка". К страничкам
надо рекламу/объявления добавлять, и сверху и снизу.

ограничение (3) имеет смысл тот, чтобы сайты были, содержательные, а
не дешевая свалка картинок для левых внешних сайтов.
>> 3) Хотя это вероятно УЖЕ можно средствами nginx реализовать -
>> ограничить превращение сайта во "внешнее хранилище + внешний трафик"
>> картинок для левых сайтов, реализовано простым отсевом тех, кто без
>> реферера их тянет
>> RewriteCond    %{HTTP_REFERER} !^http://[0-9a-z][0-9a-z-]*[0-9a-z]\.domain\.ru$ [NC]
>> RewriteCond    %{HTTP_REFERER} !^http://[0-9a-z][0-9a-z-]*[0-9a-z]\.domain\.ru/.*$ [NC]
>> RewriteRule     ^.*\.(gif|jpeg|jpg)$    - [F,L,NC]
>> это вобщем уже не критичный момент, однако были прецеденты, трафик
>> фигачил "не по делу", да и нагрузка  :-))
> http://sysoev.ru/nginx/docs/http/ngx_http_referer_module.html

>> 4) Самое основное, почему, даже имея всё это, в апаче была введена
>> схема фронтенд-бакэнд, это необходимость упрощенного конфига для
>> поддержки сайтов типа *.domen.ru.
>> То есть для vasya.domen.ru нужно чтобы DocumentRoot был скажем
>> /var/www/domen.ru/vasya, а для ivan.domen.ru DocumentRoot был
>> /var/www/domen.ru/ivan
> Я правильно понимаю, что сейчас сделано так: - Apache -> backend ?
>        location / {
>            set  $hostname  main;
>            if ($http_host ~* "^(.+)\.domen\.ru.*$") {
>                set  $hostname  $1;
>            }
>            rewrite   ^(.+)$  /$hostname$1   break;
>            proxy_pass   http://backend.domen.ru.int;
>        }
кусок моего конфига:
        server {
                listen  X.X.X.X:80;
                server_name     www.domen.ru *.domen.ru;
                set $host_part  "";
                location /status {stub_status on; }
                location / {
                        if ($http_host ~* "^(.+)\.domen\.ru.*$") {
                                set $host_part  $1;
                        }
                        rewrite ^(.*)$  /$host_part/$1  break;
                        proxy_pass      http://127.0.0.7;
                }
        }
ну вобщем-то да, практически оно то же самое и есть.


Пробегало сообщение, что схема одного сервера не сработала:

> Сделал по твоей рекомендации:
> location / {
>         if ($host ~* (([a-z0-9-])([a-z0-9-])[a-z0-9-]*)\.([a-z0-
> 9-]+\.[a-z]+)$) {
>             set $rootdir all/hosting/$4/$2/$3/$1;
>         }
>         access_log      /var/log/nginx8080_access_log 123;
>         root    /$rootdir;
> }
> Но не помогло:
> 2006/02/09 09:48:52 [error] 17480#0: *295 open() "/$rootdir/myfile.jpg"
> failed
> (2: No such file or directory), client: xx.xx.xx.xx, server: 
> myhosting.ru, URL: "/
> myfile.jpg", host: "tm.myhosting.ru:8080"

-- 
engineer






More information about the nginx-ru mailing list