Назад | Перейти на главную страницу

Обратный прокси nginx, разгрузка ssl, кеширование и скорость страницы - все в одном.

В настоящее время мы размещаем все на серверах Windows IIS 7. Мы только что переехали в Azure, и, как и во многих облаках, размещение окон дороже, чем размещение Linux. У Azure есть свои ограничения для виртуальных машин (по сравнению с AWS), поскольку вы действительно можете привязать только один общедоступный IP-адрес к веб-сервису. Чтобы преодолеть это ограничение и создать некоторую отказоустойчивость и функциональность кэширования, мы рассматриваем NginX как балансировщик нагрузки, обратный прокси-сервер, который ставится перед нашими серверами IIS.

Недавно мы узнали, что Google-Pagspeed для Apache также доступен для NginX. На основе онлайн-руководств и нашего небольшого опыта мы полагаем, что можем получить все преимущества NginX, используя 3 отдельных уровня серверов NginX (см. Ниже). У меня вопрос: как это можно сделать всего на одном виртуальном хосте?

Вот пример того, что мы, вероятно, можем настроить сейчас:

Вопросы:

  1. Сможем ли мы отказаться от трех отдельных конфигураций NginX (виртуальных хостов) и просто объединить все в один? В таком случае любой пример того, как настроить NginX для этого в единственной конфигурации, был бы УДИВИТЕЛЬНЫМ!
  2. Как мы можем сохранить вышеперечисленные цели и передать X, перенаправленный для IP-адреса, на внутренние машины iis?
  3. Какие были бы предложения, если таковые имеются, в случае отказа нашего сервера NginX? С настройкой, описанной выше, это наша единственная точка отказа. Может ли наличие двух серверов Linux с настройкой выше, с комбинацией аварийного переключения DNS или просто двумя записями DNS решить проблему с отключением нашего сервера NginX?
  4. Насколько ресурсоемок NginX? Можно ли предположить, что сверхмалый «микро» экземпляр Azure с объемом оперативной памяти всего 768 МБ может обрабатывать 50–100 одновременных посетителей?

Заранее спасибо!!!!!


Ссылки:

NginX Pagespeed: http://ngxpagespeed.com/ngx_pagespeed_example/

Обратный прокси NginX: http://www.andrewparisio.com/2011/02/how-to-create-reverse-https-failover.html

  1. да, эти серверы nginx можно объединить в один. Просто используйте proxy_pass.
  2. См. Заголовок набора прокси в блоке http
  3. Двойные машины NGINX (та же конфигурация) в сочетании с циклическим перебором DNS (или поставить что-то вроде балансировщика нагрузки AWS впереди, не знаю, есть ли у вас что-то подобное в Azure)
  4. По крайней мере. Вы должны думать о тысячах соединений с NGINX. Ваш IIS, вероятно, будет узким местом. (Я не принимаю во внимание дополнительную нагрузку, которую обработка Pagespeed создаст для этой настройки, вам придется попробовать и выяснить)

Сначала в блоке http поместите:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    upstream pagespeed {
          server 127.0.0.1:8081;    # weight=10 max_fails=3 fail_timeout=30s;
    }
    upstream iis {
          server 192.168.0.100:80;    weight=10 max_fails=3 fail_timeout=10s;
          server 192.168.0.101:80;    weight=10 max_fails=3 fail_timeout=10s;
    }

Тогда вам понадобятся только следующие серверные блоки (урезанные)

    server {
    listen       443; #SSL offloader
    server_name  example.com;

         #do some ssl things here

    location / {
    proxy_pass   http://pagespeed; #proxy to pagespeed on same nginx    
    }
}
   server {
        listen       8081;
        server_name  example.com;

         #do some pagespeed things here
         #pagespeed on
    location / {
    proxy_pass   http://iis; # proxy to 2 backend IIS servers
    }
}

Используйте сокет unix в своей исходной конфигурации для еще большей производительности. Также вы можете поместить кеш скорости страниц в Memcached.