Настройка http-фронтенда, HTTPS
Помимо непосредственной пользы от HTTPS, есть ещё ряд ограничений, с которыми можно столкнуться если не настроить HTTPS и предлагать пользователям подключаться через HTTP без шифрования:
- некоторые браузеры не разрешают включать уведомления для http-страниц
- на некоторых мобильных устройствах нельзя подключиться без https в мобильном приложении YouGile (это ограничение самих мобильных ОС)
Чтобы включить https, необходимо поставить между YouGile и клиентами промежуточный http-сервер (nginx, IIS, Apache, …) и настроить в нём подключение через https.
Пример конфигурации для nginx
(nginx.conf)
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 120;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
gzip on;
server {
listen 80;
server_name <YOUR_SERVER_NAME>;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name <YOUR_SERVER_NAME>;
ssl_protocols TLSv1.2;
ssl_certificate <PATH_TO_CERT>;
ssl_certificate_key <PATH_TO_KEY>;
ssl_dhparam <PATH_TO_DHPARAM>;
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;
client_max_body_size 50M;
client_body_buffer_size 50M;
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;
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' '';
root /opt/yougile;
try_files $uri @local-data;
}
root /opt/yougile;
try_files $uri @local-data;
}
# Конец блока, который нужно удалить
location ~ /\. {
deny all;
}
location / {
proxy_pass http://localhost:8001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
proxy_read_timeout 1h;
proxy_connect_timeout 1h;
proxy_send_timeout 1h;
proxy_pass_header Server;
proxy_max_temp_file_size 0;
}
}
}
Настройка Apache2
Конфигурация для виртуального хоста Apache:
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName <YOUR_SERVER_NAME>
ServerAdmin <YOUR_ADMIN>
DocumentRoot "/opt/yougile"
ErrorLog /var/log/apache2/yougile.error.log
CustomLog /var/log/apache2/yougile.web.log combined
<Directory /opt/yougile/.well-known/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Require all granted
</Directory>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
SSLOptions +StrictRequire
SSLEngine on
# Настройки для использования самоподписанного сертификата
SSLCertificateFile /etc/apache2/ssl/yougile.crt
SSLCertificateKeyFile /etc/apache2/ssl/yougile.key
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options SAMEORIGIN
Header always set X-XSS-Protection "1; mode=block"
Header always set X-Content-Type-Options nosniff
# Ограничения на размер тела запроса
LimitRequestBody 52428800
ProxyTimeout 3600
# Gzip сжатие
AddOutputFilterByType DEFLATE text/plain text/xml text/css application/javascript application/json application/x-font-ttf
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|pdf|mp4|mp3|avi|wmv)$ no-gzip
# Обработка /user-data/
Alias /user-data/ "/opt/yougile/"
<Location /user-data/>
Header always set X-YouGile-Served "data"
Header always set Content-Disposition "attachment"
</Location>
<FilesMatch "\.(jpe?g|png|pdf|gif|mp4|m4p|mp3|avi|wmv)$">
Header always unset Content-Disposition
</FilesMatch>
# Необходимо указать путь для WebSocket-подключений
<Location /data/ws-native>
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
ProxyPass "ws://127.0.0.1:8001/data/ws-native"
ProxyPassReverse "ws://127.0.0.1:8001/data/ws-native"
</Location>
ProxyPreserveHost On
ProxyRequests Off
ProxyPass / http://127.0.0.1:8001/ connectiontimeout=3600 timeout=3600
ProxyPassReverse / http://127.0.0.1:8001/
ProxyPassMatch ^/(.*)$ ws://127.0.0.1:8001/$1
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
# Настройки для использования сертификата Let's Encrypt, необходимо прописать свой путь до цепочки сертификатов
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/yougile.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yougile.example.com/privkey.pem
</VirtualHost>
</IfModule>
Настройки прописываются в файле /etc/apache2/sites-available/yougile-ssl.conf
Для корректной работы конфигурации необходимо выполнить команды:
sudo a2ensite yougile-ssl.conf
sudo a2enmod ssl headers proxy proxy_http proxy_wstunnel rewrite
sudo systemctl restart apache2
Настройка IIS
Импорт сертификата
Чтобы импортировать ваш SSL-сертификат в IIS на Windows Server, выполните следующие шаги:
- Конвертация ключа и сертификата в формат PFX: Поскольку IIS требует один PFX файл (который содержит сертификат и приватный ключ), вам нужно объединить файлы .crt и .key в PFX файл. Для этого можно использовать OpenSSL:
openssl pkcs12 -export -out your-cert.pfx -inkey your-cert.key -in your-cert.crt
Вам нужно будет задать пароль для файла PFX, который потребуется при импорте в IIS.
- Импорт PFX в хранилище сертификатов Windows:
- Откройте Диспетчер сертификатов Windows. Нажмите Win+R, введите mmc, нажмите OK или клавишу Enter.

- В меню нажмите Файл → Добавить или удалить оснастку.

- Выберите Сертификаты и нажмите Добавить.

- Выберите Компьютерный аккаунт и нажмите Далее, затем Готово.

- В левой панели раскройте Сертификаты (локальный компьютер) → Личные → Сертификаты.

- Правой кнопкой мыши кликните по папке Сертификаты и выберите Все задачи → Импорт.

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




- Привязка SSL-сертификата к вашему сайту в IIS:
- Откройте Диспетчер IIS (Internet Information Services).
- В левой панели выберите сервер и перейдите в раздел Сайты.
- Выберите нужный сайт, к которому нужно привязать сертификат.
- В правой панели выберите Привязки

- В открывшемся окне нажмите Добавить, выберите тип https, укажите домен, а также выберите импортированный сертификат.


- Нажмите ОК и закройте окно.
Настройка обратного прокси
- Установка Application Request и URL Rewrite:
- Перейдите на сайт Application Request Routing. Скачайте и установите его, если он у вас ещё не установлен.
- Перейдите на сайт URL Rewrite. Скачайте и установите его, если он у вас ещё не установлен.
- Настройка обратного прокси в IIS
Включение параметра "Проксирование запросов":
- Откройте Диспетчер IIS.
- В левой панели выберите сервер и дважды кликните по пункту Application Request Routing.
- В правой панели найдите и откройте раздел Application Request Routing Cache.

- В правой части окна нажмите на Server Proxy Settings.

- Установите флажок Enable Proxy и нажмите Apply.


- В правой части панели выберите Add Rule(s) и выберите Reverse Proxy.

- В открывшемся окне введите URL целевого сервера, на который вы хотите проксировать запросы (например,
localhost:8080
, если ваш сервис YouGile работает на этом порту).

- Нажмите 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

- Установите роль
Способ 2:
- Откройте Control Panel → Programs → Turn Windows features on or off

- В разделе Internet Information Services → World Wide Web Services → Application Development Features активируйте WebSocket Protocol

Дополнительные настройки в IIS
После установки компонента WebSocket выполните следующие действия:
- IIS Manager в панели Connections выберите имя сервера — для настройки на уровне сервера или разверните Sites и выберите конкретный сайт или приложение

- В панели Features View дважды щёлкните Configuration Editor

- В поле Section выберите system.webServer/webSocket

- Установите параметр enabled в значение True для включения поддержки WebSocket

- Убедитесь, что переменная сервера HTTP_SEC_WEBSOCKET_EXTENSIONS добавлена в список разрешённых server variables. По умолчанию IIS не позволяет изменять переменные сервера через правила переписывания, если они не добавлены в этот список

- Добавьте переменную HTTP_SEC_WEBSOCKET_EXTENSIONS в список разрешённых server variables

- В правилах входящего прокси для Web Author добавьте соответствующую переменную сервера
Проверка работы 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, вот пример таких сервисов:
Обычно, при покупке сертификата, вы получаете несколько файлов: сертификат для вашего домена и один или несколько промежуточных сертификатов вплоть до корневого. Их необходимо объединить в один файл и поставить его в качестве сертификата на ваш сервер. Если вы поставите только сертификат для вашего домена, некоторые клиенты не смогут проверить его подлинность, нужно именно объединить эти сертификаты. Чтобы объединить сертификаты, достаточно скопировать текст, который в них содержится в один файл. Посмотрите на сайте издателя вашего сертификата, скорее всего, там есть подробные инструкции.