Перейти к основному содержимому

Настройка http-фронтенда, HTTPS

Помимо непосредственной пользы от HTTPS, есть ещё ряд ограничений, с которыми можно столкнуться если не настроить HTTPS и предлагать пользователям подключаться через HTTP без шифрования:

  • некоторые браузеры не разрешают включать уведомления для http-страниц
  • на некоторых мобильных устройствах нельзя подключиться без https в мобильном приложении YouGile (это ограничение самих мобильных ОС)

Обратите внимание: Мобильное приложение YouGile поддерживает подключение к серверу по протоколу HTTP при указании адреса в формате IP-адрес + порт. Однако следует учитывать, что использование HTTP не обеспечивает шифрование передаваемых данных и может привести к их перехвату (например, в небезопасных или публичных сетях). Рекомендуется использовать защищённое соединение по HTTPS с корректно настроенным SSL/TLS-сертификатом. Компания YouGile не несёт ответственности за возможные утечки данных или иные последствия, возникшие в результате использования небезопасного соединения по HTTP.

Чтобы включить https, необходимо поставить между YouGile и клиентами промежуточный http-сервер (nginx, IIS, Apache, …) и настроить в нём подключение через https.

Настройка IIS​

Импорт сертификата​

Чтобы импортировать ваш SSL-сертификат в IIS на Windows Server, выполните следующие шаги:

  1. Конвертация ключа и сертификата в формат PFX: Поскольку IIS требует один PFX файл (который содержит сертификат и приватный ключ), вам нужно объединить файлы .crt и .key в PFX файл. Для этого можно использовать OpenSSL:
openssl pkcs12 -export -out your-cert.pfx -inkey your-cert.key -in your-cert.crt

Вам нужно будет задать пароль для файла PFX, который потребуется при импорте в IIS.

  1. Импорт PFX в хранилище сертификатов Windows:
  • Откройте Диспетчер сертификатов Windows. Нажмите Win+R, введите mmc, нажмите OK или клавишу Enter.
Диспетчер сертификатов Windows
  • В меню нажмите Файл → Добавить или удалить оснастку.
Добавление оснастки
  • Выберите Сертификаты и нажмите Добавить.
Добавление сертификата
  • Выберите Компьютерный аккаунт и нажмите Далее, затем Готово.
Выбор Компьютерного аккаунта
  • В левой панели раскройте Сертификаты (локальный компьютер) → Личные → Сертификаты.
Добавление сертификатов для локального компьютера
  • Правой кнопкой мыши кликните по папке Сертификаты и выберите Все задачи → Импорт.
Импорт сертификатов
  • В мастере импорта выберите ваш PFX файл, укажите путь, введите пароль и завершите импорт.
Завершение импорта сертификатов
Завершение импорта сертификатов
Завершение импорта сертификатов
Завершение импорта сертификатов
  1. Привязка SSL-сертификата к вашему сайту в IIS:
  • Откройте Диспетчер IIS (Internet Information Services).
  • В левой панели выберите сервер и перейдите в раздел Сайты.
  • Выберите нужный сайт, к которому нужно привязать сертификат.
  • В правой панели выберите Привязки
Создание привязки
  • В открывшемся окне нажмите Добавить, выберите тип https, укажите домен, а также выберите импортированный сертификат.
Добавление привязки
Указание типа https и домена
  • Нажмите ОК и закройте окно.

Настройка обратного прокси​

  1. Установка Application Request и URL Rewrite:
  • Перейдите на сайт Application Request Routing. Скачайте и установите его, если он у вас ещё не установлен.
  • Перейдите на сайт URL Rewrite. Скачайте и установите его, если он у вас ещё не установлен.
  1. Настройка обратного прокси в IIS

Включение параметра «Проксирование запросов»:

  • Откройте Диспетчер IIS.
  • В левой панели выберите сервер и дважды кликните по пункту Application Request Routing.
  • В правой панели найдите и откройте раздел Application Request Routing Cache.
Раздел Application Request Routing Cache
  • В правой части окна нажмите на Server Proxy Settings.

    Настройка Server Proxy Settings
  • Установите флажок Enable Proxy и нажмите Apply.

    Установка флага Enable Proxy
Добавление проксирования URL Rewrite
  • В правой части панели выберите Add Rule(s) и выберите Reverse Proxy.
Добавление правила Reverse Proxy
  • В открывшемся окне введите URL целевого сервера, на который вы хотите проксировать запросы (например, localhost:8001, если ваш сервис YouGile работает на этом порту).
Ввод URL целевого сервера
  • Нажмите Apply.

Дополнительная настройка (если требуется):

  • В разделе URL Rewrite можно настроить дополнительные параметры, такие как переписывание заголовков или более сложные правила маршрутизации.
  • Если ваш целевой сервер работает по HTTPS, убедитесь, что он корректно настроен для приёма SSL-трафика.

Добавление в IIS поддержки websocket​

Способ 1:

  • Откройте Server manager. Кликните Manage → Add Roles and Features
Добавление ролей и функций
  • В Server roles раскройте выпадающий список у Web Server (IIS) → Web Server → Application Development
  • Отметьте «галочкой» WebSocket Protocol
Добавление WebSocket Protocol
  • Установите роль

Способ 2:

  • Откройте Control Panel → Programs → Turn Windows features on or off
Переход на вкладку Windows features on or off из панели управления
  • В разделе Internet Information Services → World Wide Web Services → Application Development Features активируйте WebSocket Protocol
Добавление WebSocket Protocol

Дополнительные настройки в IIS​

После установки компонента WebSocket выполните следующие действия:

  • IIS Manager в панели Connections выберите имя сервера — для настройки на уровне сервера или разверните Sites и выберите конкретный сайт или приложение
Настройка сайта
  • В панели Features View дважды щёлкните Configuration Editor
Переход в редактор конфигурации
  • В поле Section выберите system.webServer/webSocket
Выбор system.webServer
  • Установите параметр enabled в значение True для включения поддержки WebSocket
Включение поддержки WebSocket
  • Убедитесь, что переменная сервера HTTP_SEC_WEBSOCKET_EXTENSIONS добавлена в список разрешённых server variables. По умолчанию IIS не позволяет изменять переменные сервера через правила переписывания, если они не добавлены в этот список
Добавление переменной сервера
  • Добавьте переменную HTTP_SEC_WEBSOCKET_EXTENSIONS в список разрешённых server variables
Добавление переменной в список разрешённых
  • В правилах входящего прокси для Web Author добавьте соответствующую переменную сервера

Настройка ограничения на размер загружаемых файлов в IIS (web.config)​

По умолчанию в IIS установлено ограничение на максимальный размер запроса 30 000 000 байт (около 28.6 МБ). При попытке загрузить файл большего размера IIS вернёт ошибку 413 Request Entity Too Large или 404.13 Not Found.

Настройка выполняется в конфигурационном файле web.config в корне каталога YouGile (как правило, C:\yougile\web.config). Если файл отсутствует, его необходимо создать.

Пример содержимого web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true">
<!-- Значение в байтах. Пример: 3 ГБ = 3221225472 -->
<requestLimits maxAllowedContentLength="3221225472" />
</requestFiltering>
</security>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8001/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

Основные параметры:

  • maxAllowedContentLength — задаёт максимальный размер тела запроса в байтах (например, 1073741824 для 1 ГБ или 3221225472 для 3 ГБ). Максимально допустимый потолок параметра в IIS — 4 294 967 295 байт (≈ 4 ГБ минус 1 байт).

    Обратите внимание: На практике IIS стабильно работает с файлами объёмом до 1–2 ГБ. Если требуется регулярно загружать файлы большего размера, рекомендуется использовать Nginx.

  • allowDoubleEscaping="true" — разрешает обработку URL с двойным экранированием. Этот параметр необходим для корректной загрузки и скачивания файлов, содержащих в названии специальные символы (например, кавычки ", кодируемые как %22), которые IIS по умолчанию блокирует по соображениям безопасности.

Настройка Nginx​

Nginx на Windows Server возможно использовать в качестве альтернативы IIS, особенно если планируется регулярная загрузка файлов большого объёма (более 1–2 ГБ) или требуется гибкая настройка проксирования и таймаутов.

⚠️ Конфликт портов с IIS и AD FS:

  • Перед установкой Nginx убедитесь, что служба IIS остановлена (net stop w3svc).
  • Если на том же сервере развёрнут AD FS, системный драйвер http.sys в Windows монопольно занимает порт 443 (это требование для Device Registration Service). В Windows Nginx и AD FS физически не могут одновременно слушать 443 порт на одном IP-адресе.
  • Решение: если AD FS находится на том же сервере, оставьте AD FS на порту 443, а Nginx настройте на порт 8443 (этот порт поддерживается Cloudflare и обратными прокси, YouGile будет доступен по адресу https://your-domain:8443). Если AD FS нет или он вынесен на отдельный сервер, Nginx использует стандартный порт 443.

1. Подготовка и остановка IIS​

Остановите службы IIS:

net stop w3svc

# Отключите автозапуск службы IIS (опционально)
sc config w3svc start= disabled

Убедитесь, что порты 80 и 443 (или 8443) свободны:

netstat -ano | findstr ":80 "
netstat -ano | findstr ":443"

2. Установка Nginx​

  1. Скачайте стабильную версию Nginx для Windows с официального сайта: nginx.org.
  2. Распакуйте архив в корень диска: C:\nginx.
  3. Создайте каталоги для конфигураций и сертификатов:
    New-Item -ItemType Directory -Path "C:\nginx\conf\conf.d" -Force
    New-Item -ItemType Directory -Path "C:\nginx\conf\snippets" -Force
    New-Item -ItemType Directory -Path "C:\nginx\ssl" -Force

3. Подготовка SSL-сертификатов​

Если у вас сертификат в формате PFX (например, экспортированный из хранилища сертификатов Windows):

# Экспорт открытой части сертификата в .crt
openssl pkcs12 -in "C:\nginx\ssl\your-certificate.pfx" -clcerts -nokeys -out "C:\nginx\ssl\your-certificate.crt"

# Экспорт приватного ключа в .key (без пароля)
openssl pkcs12 -in "C:\nginx\ssl\your-certificate.pfx" -nocerts -nodes -out "C:\nginx\ssl\your-certificate.key"

4. Конфигурация Nginx​

1. Основной конфигурационный файл (C:\nginx\conf\nginx.conf):

worker_processes  1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
types_hash_max_size 2048;

# Лимиты размера запроса
client_max_body_size 500M;
client_body_buffer_size 50M;
client_body_timeout 300s;

# Таймауты
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;

# Gzip сжатие
gzip on;
gzip_http_version 1.1;
gzip_comp_level 5;
gzip_min_length 4096;
gzip_proxied any;
gzip_types text/plain text/xml text/css application/x-javascript application/javascript application/json application/x-font-ttf;
gzip_vary on;

# Подключение конфигураций сайтов
include conf.d/*.conf;
}

2. SSL-параметры (C:\nginx\conf\snippets\ssl-params.conf):

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA;
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;

3. Proxy-параметры (C:\nginx\conf\snippets\proxy-params.conf):

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_pass_header Server;
proxy_max_temp_file_size 0;

# Отключение буферизации для быстрой передачи больших файлов
proxy_request_buffering off;
proxy_buffering off;

4. Конфигурация YouGile (C:\nginx\conf\conf.d\yougile.conf):

# Редирект HTTP -> HTTPS
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}

# HTTPS сервер
server {
listen 443 ssl http2;
server_name yourdomain.com;

include snippets/ssl-params.conf;

ssl_certificate C:/nginx/ssl/your-certificate.crt;
ssl_certificate_key C:/nginx/ssl/your-certificate.key;

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;

# Статические файлы пользователей (удалите блок, если используется restrictUserDataAccess)
location /user-data/ {
add_header X-YouGile-Served data;
add_header 'Content-Disposition' 'attachment';

location ~* \.(jpe?g|png|pdf|gif|mp4|m4p|mp3|avi|wmv)$ {
add_header 'Content-Disposition' '';
alias C:/yougile/user-data/;
}

alias C:/yougile/user-data/;
}

# Запрет доступа к скрытым файлам
location ~ /\. {
deny all;
}

# Проксирование на YouGile
location / {
proxy_pass http://localhost:8001;
include snippets/proxy-params.conf;

# Таймауты для длительных операций
proxy_read_timeout 1h;
proxy_connect_timeout 1h;
proxy_send_timeout 1h;
}
}

Примечание: Если на сервере работает AD FS, укажите listen 8443 ssl http2;.

Проверьте корректность конфигурации:

C:\nginx\nginx.exe -t

5. Установка Nginx как службы Windows (WinSW)​

Чтобы Nginx автоматически запускался в фоновом режиме вместе с Windows Server, настройте его как службу с помощью утилиты WinSW:

  1. Скачайте WinSW-x64.exe со страницы релизов WinSW и сохраните как C:\nginx\nginx-service.exe:

    Invoke-WebRequest -Uri "https://github.com/winsw/winsw/releases/download/v3.0.0-alpha.11/WinSW-x64.exe" -OutFile "C:\nginx\nginx-service.exe"
  2. Создайте файл конфигурации службы C:\nginx\nginx-service.xml:

    <service>
    <id>nginx</id>
    <name>Nginx Web Server</name>
    <description>Nginx Reverse Proxy for YouGile</description>
    <executable>C:\nginx\nginx.exe</executable>
    <stopexecutable>C:\nginx\nginx.exe</stopexecutable>
    <stoparguments>-s stop</stoparguments>
    <workingdirectory>C:\nginx</workingdirectory>
    <log mode="roll-by-size">
    <sizeThreshold>10240</sizeThreshold>
    <keepFiles>8</keepFiles>
    </log>
    <onfailure action="restart" delay="10 sec"/>
    <startmode>Automatic</startmode>
    </service>
  3. Установите и запустите службу (от имени администратора):

    C:\nginx\nginx-service.exe install
    net start nginx

Управление службой:

net stop nginx     # Остановка
net start nginx # Запуск

Проверка работы HTTPS​

Иногда бывает так, что сертификат для HTTPS настроен неправильно, из-за чего некоторые пользователи не могут войти в мобильное приложение YouGile. При этом, в браузере HTTPS работает нормально. Это происходит из-за того, что сервер присылает неполный сертификат. Проверить это можно, выполнив в командной строке:

openssl s_client -connect <домен>:<порт>

здесь домен — это домен, с которого доступен YouGile (напр. yougile.mycompany.com), порт, как правило, это 443.

Если есть какие-то ошибки с сертификатом, то они будут написаны в выводе этой команды, например, может присутствовать такая строка:

Verify return code: 21 (unable to verify the first certificate)

Если коробка YouGile доступна в интернете, то можно также воспользоваться сервисами по проверке правильности настройки https, вот пример таких сервисов:

Обычно, при покупке сертификата, вы получаете несколько файлов: сертификат для вашего домена и один или несколько промежуточных сертификатов вплоть до корневого. Их необходимо объединить в один файл и поставить его в качестве сертификата на ваш сервер. Если вы поставите только сертификат для вашего домена, некоторые клиенты не смогут проверить его подлинность, нужно именно объединить эти сертификаты. Чтобы объединить сертификаты, достаточно скопировать текст, который в них содержится в один файл. Посмотрите на сайте издателя вашего сертификата, скорее всего, там есть подробные инструкции.