The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Пример привязки к географическому положению посетителя в nginx"
Отправлено auto_tips, 16-Июл-08 18:35 
Для начала, следует прочитать о директивах модуля ngx_http_geo_module:
http://sysoev.ru/nginx/docs/http/ngx_http_geo_module.html

Во вторую очередь нам нужно получить список сетей в нужном формате.
Так как мне нужно отделить только российские IP, у меня делается так:

   curl -f -o - http://noc.masterhost.ru/allrunet/runet \
   http://noc.zenon.net/nets/current | grep -v "0.0.0.0/0" | \
   grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\/[0-9]\+" | \
   sort | uniq | sed 's/$/ ru;/' > /etc/nginx/rugeo.conf;

   /etc/init.d/nginx reload


Одно из условий - пользователи из любых стран с установленной cookie ALLOWIMAGES
не должны подвергаться дискриминации по географическому признаку.

Соответственно составляем файл конфигурации nginx.

Определяем страну (в контексте http):

   geo  $country  {
    default          en;
    include          /etc/nginx/rugeo.conf;
   }


В блоке конфигурации интересующего нас server пишем:

   location = /spacer.gif {
        empty_gif;
   }

   location ~* \.(jpg|jpeg|gif|png)$ {
    set  $allow_images  1;

    if ($country = 'en') {
        set  $allow_images  0;
    }

    if ($http_cookie ~* ALLOWIMAGES) {
        set  $allow_images  1;
    }

    if ($allow_images != 1) {
        rewrite  ^/images/.*$ /spacer.gif break;
    }
    
        expires         7d;
        root /home/www/htdocs;
        if (!-f $request_filename) {
                proxy_pass        http://backend;
        }
   }


Таким образом всем посторонним иностранцам вместо фотографий будет видна пустота,
а всем своим фотографии будут видны откуда бы они не заходили.

Для ситуаций, когда блокировка обусловлена экономией трафика, http://sergeyx.livejournal.com/ в комментарии
советует использовать бесплатную сеть доставки контента CoralCDN (http://www.coralcdn.org):

Руководство по настройке: http://wiki.coralcdn.org/wiki.php?n=Main.Servers
Например, запросив http://www.test.ru.nyud.net:8080/img/test.gif сеть CoralCDN выступит
в роли кэшируюшего прокси для доставки нужного файла.

Пример для организации отдачи трафика через CoralCDN для посетителей с некорректным referer:

   location /i/ {
      ...
      # Избегаем зацикливания для запросов от CoralCDN
      if ($http_user_agent ~ CoralWebPrx) {
         break;
      }
      if ($query_string ~ coral-no-serve) {
         break;
      }
      # Перенаправляем запросы только на существующие файлы
      if (!-f $request_filename) {
         break;
      }
      # Для посетителей с некорректным referer делаем редирект в CoralCDN
      # корректность определяем через встроенную переменную nginx $invalid_referer
      # вместо SITE нужно подставить имя хоста.
      if ($invalid_referer) {
         rewrite ^(.+)$ http://SITE.nyud.net$1;
      }
      ...
   }


Пример для Apache с mod_rewrite:

   RewriteEngine on
   RewriteCond %{HTTP_USER_AGENT} !^CoralWebPrx
   RewriteCond %{QUERY_STRING} !(^|&)coral-no-serve$
   RewriteRule ^/images/foo(.*)$  http://foo.bar.nyud.net:8080/images/foo$1 [R,L]
или можно сразу подставить HTTP_HOST
   RewriteRule ^/images/foo(.*)$ http://%{HTTP_HOST}.nyud.net:8080/images/foo$1 [R,L]

URL: http://alexkbs.livejournal.com/358906.html
Обсуждается: http://www.opennet.ru/tips/info/1717.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру