- Балансировка нагрузки между серверами IIS с помощью Nginx
- Настройка веб серверов в ферме IIS
- Настройка балансировки нагрузки на Nginx
- Nginx windows мы iis
- Как добавить nginx на действующий Windows 2008 Server + IIS 7.5?
- Создание кластера IIS с балансировкой нагрузки средствами Nginx
- Настройка веб серверов в ферме IIS
- Настройка балансировки нагрузки на Nginx
Балансировка нагрузки между серверами IIS с помощью Nginx
Официальным решением MSFT для организации балансировки нагрузки между веб-серверами Windows в ферме IIS является расширение Application Request Routing (ARR). В этой статье мы рассмотрим схему, при которой, в качестве балансировщика нагрузки между веб серверами Internet Information Services (IIS версии 8.0 и выше), будет использоваться хорошо зарекомендовавший себя HTTP/реверс прокси Nginx.
Nginx это простой, быстрый и надежный HTTP сервер. Использование Nginx целесообразно в первую очередь для статических веб-сайтов и в качестве реверс прокси перед высоконагруженными динамическими сайтами. Nginx позволяет быстро обрабатывать статические запросы, выполнять прокси-кэширования и реализовывать простые функции балансировки нагрузки.
В нашем примере, веб ферма состоит из двух IIS серверов на базе Windows Server 2012. В качестве фронд-энд сервера будет выступать сервер Linux с установленным Nginx. В случае необходимости эту конфигурацию можно с лёгкостью масштабировать, добавив необходимое количество серверов IIS. Nginx способен скрывать за собой множество бэкенд веб серверов, распределяя запросы между ними с помощью различных правил. Добавление или удаление любого сервера IIS из такой фермы не сказывается на доступности сайта с точки зрения пользователей.
Настройка веб серверов в ферме IIS
В первую очередь, на обоих веб-северах Windows нужно установить роль IIS. Задача выполняется с помощью консоли Server Manager или при помощи PowerShell:
import-module servermanager
Install-WindowsFeature -Name Web-Server, Web-Mgmt-Tools
На отдельном сервере файловом сервере Windows создадим две сетевые папки:
- В первой будет хранится общая конфигурация IIS — \\file-srv1\iis_config
- Во-второй – файлы сайтов — \\file-srv1\iis_site
В разрешениях обоих общих папок добавьте группу Everyone с правами Full Control.
Затем на обоих сайтах нужно установить расширение ARR Helper, которое позволит использовать в заголовках IIS правильные адреса посетителей (иначе там всегда будет указан ip адрес сервера с Nginx). Данное расширение входит в состав IIS Application Request Routing package (ARR) 3.0 и после установки последнего на любом сервере, его дистрибутив requestrouterhelper_x64.msi может быть вручную скопирован из каталога %ProgramFiles%\IIS\Application Request Routing.
После установки IIS, скопируйте содержимое каталога c:\inetpub\wwwroot в сетевую папку \\file-srv1\iis_site. После этого в консоли управления IIS, выберите сайт DefaultWebSite и откройте его настройки (Basic Settings), указав в поле Physical path путь к сетевой папке.
Настройте сайт в соотвествии со своими требованиями, проверьте, что он корректно открывается и работает. Затем, откройте раздел Shared Configuration и нажмите на кнопку Export Configuration.
Укажите полный путь к сетевой папке, в которой будет храниться конфигурация IIS, и укажите пароль для ключей шифрования.
Включите опцию Enable shared configuration, и укажите путь к сетевой шаре с конфигурацией IIS. Нажмите Apply и укажите пароль.
Затем укажите учетную запись, из-под которой должен быть запущен пул IIS. Причем эта учетная запись также должна иметь RW права на доступ к ранее описанным сетевым каталогам (как правило используется специальная доменная служебная запись или групповая сервисная запись gMSA). Для этого откройте секцию IIS Authentication и измените параметры анонимной аутентификации (Anonymous Authentication), указав имя пользователя.
Попробуйте открыть сайт. Если все работает, перейдите к следующему этапу.
Теперь нужно аналогично настроить второй сервер. Установите ARRhelper, подключите общую конфигурацию IIS из сетевой папки, укажите учетную запись для запуска пула.
Настройка балансировки нагрузки на Nginx
После того, как конфигурация веб серверов IIS закончена, можно перейти к настройке Nginx.
Установите nginx командой:
sudo apt-get install nginx
После установки отредактируйте конфигурационный файл /etc/nginx/sites-enabled/default
Nginx windows мы iis
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Добавлю. В системных вызовах есть 2-битовое поле вида АПИ. Одно значение — kernel, другое — win32k.sys, третье — IIS, четвертое зарезервировано.
S>Поделитесь источником плиз, Руссинович о таком предательски молчит.
Нет, не молчит. Именно из книги Соломона-Руссиновича
As you’ll see in Chapter 6, each thread has a pointer to its system service table. Windows 2000 has two built-in system service tables, but up to four are supported. The system service dispatcher determines which table contains the requested service by interpreting a 2-bit field in the 32-bit system service number as a table index. The low 12 bits of the system service number serve as the index into the table specified by the table index. The fields are shown in Figure 3-9.
Figure 3-9 System service number to system service translation
A primary default array table, KeServiceDescriptorTable, defines the core executive system services implemented in Ntosrknl.exe. The other table array, KeServiceDescriptorTableShadow, includes the Win32 USER and GDI services implemented in the kernel-mode part of the Win32 subsystem, Win32k.sys. The first time a Win32 thread calls a Win32 USER or GDI service, the address of the thread’s system service table is changed to point to a table that includes the Win32 USER and GDI services. The KeAddSystemServiceTable function allows Win32k.sys and other device drivers to add system service tables. If you install Internet Information Services (IIS) on Windows 2000, its support driver (Spud.sys) upon loading defines an additional service table, leaving only one left for definition by third parties. With the exception of the Win32k.sys service table, a service table added with KeAddSystemServiceTable is copied into both the KeServiceDescriptorTable array and the KeServiceDescriptorTableShadow array.
>И рассказывает о всякой фигне типа хитрой диспетчеризации, Zw и Nt префиксах (см врезку Kernel-Mode System Service Dispatching)
Об этом он тоже рассказывает, верно.
| От: | Sinix |
Дата: | 17.10.10 13:28 | |
Оценка: |
| От: | Pavel Dvorkin |
Дата: | 17.10.10 13:32 | |
Оценка: | +1 |
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Нет, не молчит. Именно из книги Соломона-Руссиновича
S>Ух ты! Спасибо! В 5м издании абзац заканчивается на «The KeAddSystemServiceTable function allows Win32k.sys to add a system service table.». Вот что единственное, что не нравится в Руссиновиче — пока не сравнишь два издания, об изменениях во внутренностях не узнаешь
Одно из двух — либо убрали, либо к 5 изданию он посчитал, что это не так уж важно — книга-то не резиновая.
А поле там по-прежнему двухбитовое ?
Как добавить nginx на действующий Windows 2008 Server + IIS 7.5?
Дано. Windows 2008 Server + IIS 7.5.
Установлена самописная БД (которая работает только под Виндовс) которая через CGI-скрипт формирует html-страницы.
Это библиотечный каталог. База обновляется раз в месяц.
Сервер очень загружен, и 80-90% процесорного времениуходит на формирование скриптом страниц.
Хотел попробывать добавить nginx. Возможно он позволить формировать страницу один раз, а потом как из кеша ее доставать?
Желательно установить nginx на эту же машину.
Как я понял надо:
1. Скачать и установить nginx — это понятно.
2. Перенаправить IIS на порт 8080 (например) а nginx’у указать куда перенаправлять запросы. — Вот тут я незнаю как это сделать.
Заранее спасибо за ответы.
- Вопрос задан более трёх лет назад
- 694 просмотра
Вопрос немного не в ту ветку, но попробую помочь.
Вам нужно в конфигурационных файлах nginx-а описать upstream-ы. В вашем случае апстрим будет 127.0.0.1:8080 — ваш IIS. Посмотрите документацию по модулю здесь
nginx.org/ru/docs/http/ngx_http_upstream_module.html
Потом для нужного виртуального хоста, который будет слушать порт 80 нужно спроксировать нужный location на IIS, который слушает localhost на порту 8080.
О том, как проксировать почитайте документацию по модулю nginx_proxy_module
nginx.org/ru/docs/http/ngx_http_proxy_module.html#.
Совсем забыл про кеш. Ну собственно сам модель Nginx_proxy_module и позволяет кешировать. Почитайте все на той же странице. Там есть директива proxy_cache
Константин: конечно можно. Берете ubuntu или CentOS сервер, настраиваете там nginx с соблюдением изложенных выше рекомендаций, только в upstreams.conf вам уже придется писать не 127.0.0.1:8080 а IP вашего Windows Server 2008, где развернут IIS. Порт на IIS в таком случае менять уже нет необходимости. Поправите в dns A-запись на сервер с Linux и все.
Nginx на linux даст вам еще одно преимущество в плане кеширования. Сделайте на linux-машине раздел tmpfs (в оперативной памяти) и храните proxy_cache именно на этом разделе. Скорость ответа сервера возрастет до запредельных значений. 🙂
Создание кластера IIS с балансировкой нагрузки средствами Nginx
Официальным решением MSFT для организации балансировки нагрузки между веб-серверами Windows в ферме IIS является расширение Application Request Routing (ARR) . В этой статье мы рассмотрим схему, при которой, в качестве балансировщика нагрузки между веб серверами Internet Information Services (IIS версии 8.0 и выше), будет использоваться хорошо зарекомендовавший себя HTTP/реверс прокси Nginx.
Nginx это простой, быстрый и надежный HTTP сервер. Использование Nginx целесообразно в первую очередь для статических веб-сайтов и в качестве реверс прокси перед высоконагруженными динамическими сайтами. Nginx позволяет быстро обрабатывать статические запросы, выполнять прокси-кэширования и реализовывать простые функции балансировки нагрузки.
Совет . Основной недостаток Application Request Routing (ARR) по сравнению с Nginx – он не позволяет отслеживать HTTP запросы для нескольких сайтов и требует дополнительной лицензии на Windows.
В нашем примере, веб ферма состоит из двух IIS серверов на базе Windows Server 2012. В качестве фронд-энд сервера будет выступать сервер Linux с установленным Nginx. В случае необходимости эту конфигурацию можно с лёгкостью масштабировать, добавив необходимое количество серверов IIS. Nginx способен скрывать за собой множество бэкенд веб серверов, распределяя запросы между ними с помощью различных правил. Добавление или удаление любого сервера IIS из такой фермы не сказывается на доступности сайта с точки зрения пользователей.
Настройка веб серверов в ферме IIS
В первую очередь, на обоих веб-северах Windows нужно установить роль IIS . Задача выполняется с помощью консоли Server Manager или при помощи PowerShell :
import-module servermanager
Install-WindowsFeature -Name Web-Server, Web-Mgmt-Tools
На отдельном сервере файловом сервере Windows создадим две сетевые папки:
- В первой будет хранится общая конфигурация IIS — \\file-srv1\iis_config
- Во-второй – файлы сайтов — \\file-srv1\iis_site
В разрешениях обоих общих папок добавьте группу Everyone с правами Full Control.
Затем на обоих сайтах нужно установить расширение ARR Helper , которое позволит использовать в заголовках IIS правильные адреса посетителей (иначе там всегда будет указан ip адрес сервера с Nginx). Данное расширение входит в состав IIS Application Request Routing package (ARR) 3.0 и после установки последнего на любом сервере, его дистрибутив requestrouterhelper_x64.msi может быть вручную скопирован из каталога %ProgramFiles%\IIS\Application Request Routing.
После установки IIS, скопируйте содержимое каталога c:\inetpub\wwwroot в сетевую папку \\file-srv1\iis_site. После этого в консоли управления IIS, выберите сайт DefaultWebSite и откройте его настройки ( Basic Settings ), указав в поле Physical path путь к сетевой папке.
Настройте сайт в соотвествии со своими требованиями, проверьте, что он корректно открывается и работает. Затем, откройте раздел Shared Configuration и нажмите на кнопку Export Configuration .
Укажите полный путь к сетевой папке, в которой будет храниться конфигурация IIS, и укажите пароль для ключей шифрования.
Включите опцию Enable shared configuration , и укажите путь к сетевой шаре с конфигурацией IIS. Нажмите Apply и укажите пароль.
Затем укажите учетную запись, из-под которой должен быть запущен пул IIS. Причем эта учетная запись также должна иметь RW права на доступ к ранее описанным сетевым каталогам (как правило используется специальная доменная служебная запись или групповая сервисная запись gMSA ). Для этого откройте секцию IIS Authentication и измените параметры анонимной аутентификации (Anonymous Authentication), указав имя пользователя.
Попробуйте открыть сайт. Если все работает, перейдите к следующему этапу.
Теперь нужно аналогично настроить второй сервер. Установите ARRhelper, подключите общую конфигурацию IIS из сетевой папки, укажите учетную запись для запуска пула.
Настройка балансировки нагрузки на Nginx
После того, как конфигурация веб серверов IIS закончена, можно перейти к настройке Nginx.
Установите nginx командой:
sudo apt-get install nginx
После установки отредактируйте конфигурационный файл /etc/nginx/sites-enabled/default
В нашем случае получился такой конфиг:
#список веб серверов IIS, между которыми нужно распределять нагрузку
upstream web_servers <
server 192.168.1.13;
server 192.168.1.14;
>
#порт
server <
listen 80;
location / <
proxy_pass http://winitpro.ru;
# настройка заголовков
proxy_set_header X-proxy 192.168.1.12;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
# Ошибки, при которых nginx должен переключатся на следующий сервер
proxy_next_upstream error timeout invalid_header http_500 http_404;
proxy_set_header X-Client-IP $remote_addr;
>
>
Сохраните файл и перезапустите nginx:
sudo /etc/init.d/nginx restart
Осталось настроить DNS записи сайтов, так чтобы они указывали на ip адрес сервера nginx и убедиться, что запросы распределяются между веб серверами по алгоритму round robin.