The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Автоматическое реплицирование статики между несколькими web серверами средствами nginx
На нескольких серверах время от времени появляется новые файлы, при этом
заранее не известно на каком именно сервере появится новый файл. Клиенты в
случайном порядке попадают на все серверы.

Задача сделать так, чтоб клиенту всегда отдавался новый файл, даже если его нет
в момент запроса на сервере. Чтобы клиент не видел 404. rsync не подходит,
точнее он может использоваться как дополнение.

Предположим дано 3 физических сервера и они отдают одну и туже статику для
одного домена stat.domain.com. Серверов может быть больше, решение легко маcштабируется.


Введем дополнительные доменные имена для обращения к конкретному серверу:

   stat.front-01.domain.com
   stat.front-02.domain.com
   stat.front-03.domain.com


Решение.

Решение будем строить на NGINX, используя proxy_pass + proxy_store.

Каждый сервер должен иметь 2 конфигурации с одинаковым корнем (root).

Первый блок конфигурации - "тупиковый", отвечает только по дополнительному
имени stat.front-XX.domain.com  и если нет файла отдает 404.

Второй блок конфигурации - "проксирующий", обращаются клиенты по имени хоста
stat.domain.com, и если файл не найден он будет искать на других серверах.

Итого, имеем:

   # тупиковый
   server {
       listen 80;
       server_name stat.front-01.domain.com;
       access_log off;
       location / {
           root /opt/www/stat.domain.com/;
       }
   }

   # проксирующий
   # может показаться что это решение, см. дальше.
   server {
       listen 80;
       server_name stat.domain.com;

       access_log off;

       location / {
           root /opt/www/stat.domain.com/;
           try_files $uri  @front-02 @front-03;  # кроме front-01
       }

       location @front-02{
               internal;
               proxy_pass   http://stat.front-02.domain.com; # забираем из "тупиковой" конфигурации
               proxy_set_header   Host   stat.front-02.domain.com;
               proxy_store on;
               proxy_store_access user:rw group:rw all:r;
               proxy_temp_path /opt/www/tmp;
               root            /opt/www/stat.domain.com/;
       break;
       }

       location @front-03{
               internal;
               proxy_pass         http://stat.front-03.domain.com;  # забираем из "тупиковой" конфигурации
               proxy_set_header   Host   stat.front-03.domain.com;
               proxy_store on;
               proxy_store_access user:rw group:rw all:r;
               proxy_temp_path /opt/www/tmp;
               root            /opt/www/stat.domain.com/;
       break;
       }
   }

здесь ключевым моментом является

   try_files $uri  @front-02 @front-03;  # кроме front-01

Кажется что все ок, и будет работать красиво но вот в чем проблема:

try_files в аргументах может иметь кучу файлов и только 1 URL, так что это
конфигурация НЕ РАБОТАЕТ..

Посмотрим на директиву proxy_next_upstream.

Вот в итоге что получилось:
(блок конфигурации универсальный и подходит для всех фронтов)
 
   # тупиковый
   server {
       listen 80;
       server_name stat.stat.domain.com;       #stat.front-01.domain.com - можно тоже добавить

       access_log off;

       location / {
           root /opt/www/stat.domain.com/;
       }
   }

   # проксирующий
   upstream  stat_backend  {
   #                server stat.front-01.domain.com ; #  себя комментируем
               server stat.front-02.domain.com ;
               server stat.front-03.domain.com ;
   }

   server {
       listen 80;
       server_name stat.domain.com;

       access_log off;

       location / {
           root /opt/www/stat.domain.com/;
           try_files $uri  @front-stat;
       }

       location @front-stat{
               internal;

               proxy_pass          http://stat_backend;
               proxy_next_upstream http_404;

               proxy_set_header   Host  stat.stat.domain.com;
               proxy_store on;
               proxy_store_access user:rw group:rw all:r;
               proxy_temp_path /opt/www/tmp;
               root            /opt/www/stat.domain.com;
       break;
       }

   }
 
23.05.2011 , Автор: Gara
Раздел:    Корень / Администратору / Сетевые сервисы / WWW, Apache httpd / Редирект, mod_rewrite

Обсуждение [ RSS ]
 
  • 1, Michael Shigorin, 00:17, 31/05/2011 [ответить] [смотреть все]
  • +/
    Занятно, спасибо.
     
  • 2, Клыкастый, 01:00, 03/06/2011 [ответить] [смотреть все]
  • +/
    отлично. А тем не менее nginx набирает обороты. Спасибо Игорю Сысоеву, продукт вышел отменный.
     
  • 3, Клыкастый, 02:23, 03/06/2011 [ответить] [смотреть все]
  • +/
    дичайшие извинения за оффтоп, просто порадуйтесь!

    в Рунете nginx over 50%

    http://stat.webnames.ru/?show=http&what=fullstats

     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:

     Добавить заметку
     Версия для печати
     
     Поиск заметки:
     

    Последние заметки
    - 12.05 Организация шифрованного бэкапа с помощью rdiff-backup, encfs и Dropbox
    - 11.05 Настройка беспроводного соединения в Debian GNU/Linux
    - 07.05 Использование Google Drive в Linux
    - 18.04 Использование нескольких сетевых стеков в Linux
    - 15.04 Восстановление стандартного KDE меню после его удаления (например, wine)
    - 11.04 Настройка gmirror при использовании GPT во FreeBSD 9
    - 09.04 Маршрутизатор на базе FreeBSD с приоритизация трафика средствами PF и ALTQ
    - 02.04 Частичное восстановление данных MySQL из бэкапа, созданного с использованием LVM
    - 21.03 Настройка DNSSEC в BIND 9.9
    - 17.03 Набор номера на Cisco IP Phone 7960/7940 из скрипта
    RSS | Следующие 15 записей >>


    ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

    Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

    Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

    Оформить подписку на год


      Закладки на сайте
      Проследить за страницей
    Created 1996-2012 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    RUNNet TopList