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

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

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

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

  • Nginx1 - этот сервер находится перед Nginx2 и выполняет разгрузку SSL и кэширует статический контент на сервере linux, на котором он работает. Это будет кешировать статические ресурсы как на диск, так и на оперативную память.

  • NginX2 - этот сервер NginX находится перед Nginx3 и включает в себя Google Mod PagesSpeed ​​для NginX. Цель этого сервера - минимизировать и комбинировать скрипты и оптимизировать изображения. Поскольку эти операции могут быть дорогими, мы разместили NginX1 перед этим сервером.

  • NginX3 - (HA Proxy также будет работать, если мы застряли с 3 запущенными экземплярами NginX одновременно). Это последний сервер NginX, работающий на Linux. Его задача - просто выступать в качестве обратного прокси-сервера для нашей фермы IIS. Идея в том, что если мы запустим еще один сервер IIS (в настоящее время у нас есть только два), то мы просто добавим его в конфигурацию этого NginX, а Nginx выполнит балансировку нагрузки. Мы по-прежнему используем сессию Sticky (из-за некоторого неаккуратного кода asp / asp.net), но в аренду мы можем разделить рабочую нагрузку между различными виртуальными машинами и масштабировать их, добавляя машину в нашу "Ферму IIS" (не используя функцию фермы IIS).).

  • 2X IIS-серверы - это просто iis-серверы (все одинаковые), на которых настроено несколько сайтов, и сайты загружаются на них через FTP или Git.

Вопросы:

  1. Сможем ли мы отказаться от трех отдельных конфигураций NginX (виртуальных хостов) и просто объединить все в одно? Если да, то любой пример того, как настроить NginX для этого в одной конфигурации, будет УДИВИТЕЛЬНЫМ!
  2. Как мы можем сохранить цели, указанные выше, и передать X, перенаправленный по ip-адресу, на внутренние машины iis?
  3. Какие будут предложения, если таковые имеются в качестве запасного варианта в случае сбоя нашего сервера NginX? С настройкой выше это наша единственная точка отказа. Решит ли проблема с отключением нашего сервера NginX наличие двух серверов Linux с описанной выше настройкой, с сочетанием аварийного переключения DNS или просто наличие двух DNS-записей?
  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 ответ

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

Сначала в вашем блоке 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.

Другие вопросы по тегам