Настройка при работе с несколькими серверами

<< Показать Оглавление >>

Шифрование трафика      

Настройка при работе с несколькими серверами

atten_red

Приведённые настройки подразумевают, что nginx находится на одном хосте c Dictation Server.

Для настройки шифрования в системе с несколькими серверами и балансировщиком нагрузки nginx требуется установить перед каждым сервером и перед балансировщиком.

MultiServerSSL

Схема работы многосерверной системы с шифрованием

Так как hop-by-hop заголовки (в том числе Upgrade и Connection) не передаются от клиента к проксируемому серверу, то проксируемый сервер не узнает о намерении клиента сменить протокол с REST на WebSocket. Все заголовки следует передать явно.

Значение параметра $connection_upgrade определяется в map-е.

Обратите внимание, что в приведённых примерах потребуется заменить:

•[Certs] на сертификат в формате .crt;

•[Key] на ключ в формате .key;

•Доменное имя dct-bal.local на доменное имя или IP-адрес балансировщика нагрузки;

•Доменное имя dct-srv-01.local на доменное имя или IP-адрес проксируемого сервера Voice2Med.

Настройка nginx балансировщика нагрузки

Пример конфигурационного файла nginx, используемого для проксирования обращений к балансировщику v2m-bal.local:

 

#user nginx;

worker_processes  auto;

 

error_log /var/log/nginx/error.log notice;

pid    /var/run/nginx.pid;

 

events {

 worker_connections 1024;

}

 

http {

 # Изменение параметра $connection_upgrade в зависимости #

 # от значения $http_upgrade #

 # https://nginx.org/ru/docs/http/websocket.html #

 

 map $http_upgrade $connection_upgrade {

  default upgrade;

  ''   close;

 }

 

 server {

  listen       39260 ssl;

  server_name     dct-bal.local;

  ssl_protocols    TLSv1 TLSv1.1 TLSv1.2;

  ssl_certificate   [Certs];

  ssl_certificate_key [Key];

 

  location / {

   proxy_pass    http://localhost:39255;

   auth_basic    off;

   allow      all;

   proxy_buffering off;

   proxy_set_header Host      $host;

   proxy_set_header X-Real-IP    $remote_addr;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

   }

 }

}

 

Настройка nginx серверов Voice2Med

Пример конфигурационного файла nginx, используемого для проксирования обращений к каждому серверу на примере первого сервера dct-srv-01.local:

 

#user nobody;

worker_processes  auto;

 

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

 

#pid    logs/nginx.pid;

 

events {

 worker_connections 1024;

}

 

http {

 include    mime.types;

 default_type application/octet-stream;

 

 map $http_upgrade $connection_upgrade {

  default upgrade;

  ''   close;

 }

 

 sendfile      on;

 keepalive_timeout 65;

 

 upstream backend_ws {

  least_conn;

  server 127.0.0.1:34000; 

 }

 upstream backend_rest {

  least_conn;

  server 127.0.0.1:39255;

 }

 

 server {

  listen       34001 ssl;

  server_name     dct-srv-01.local;

  ssl_protocols    TLSv1 TLSv1.1 TLSv1.2;

  ssl_certificate   [Certs];

  ssl_certificate_key [Key];

 

  location / {

   proxy_pass http://backend_ws;

   proxy_http_version 1.1;

   proxy_buffering off;

   proxy_read_timeout 7d;

   proxy_send_timeout 7d;

   tcp_nodelay on;

   proxy_set_header Upgrade  $http_upgrade;

   proxy_set_header Connection $connection_upgrade;

  }

  error_page  500 502 503 504 /50x.html;

  location = /50x.html {

   root html;

  }

 }

 

 server {

  listen       39257 ssl;

  server_name     dct-srv-01.local;

  ssl_protocols    TLSv1 TLSv1.1 TLSv1.2;

  ssl_certificate   [Certs];

  ssl_certificate_key [Key];

  location / {

   proxy_pass http://backend_rest;

   auth_basic off;

   allow all;

   proxy_buffering         off;

   proxy_set_header Host      $host;

   proxy_set_header X-Real-IP    $remote_addr;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  }

  error_page  500 502 503 504 /50x.html;

  location = /50x.html {

   root html;

  }

 }

}

Настройка Dictation Server

Для каждого сервера внесите изменения в файл конфигурации. Ниже приводится пример для первого сервера v2m-srv-01.local.

Перейдите в папку:

%Programdata%\Speech Technology Center\DictationApp.Server\Settings

1.В файле Dictation.Asr.Service.Properties.Settings.config активируйте работу через балансировщик нагрузки и укажите строку подключения к серверу ConnectionStringForBalancer.

 

<Dictation.Asr.Service.Properties.Settings>

...

 <setting name="SendDataToBalancer" serializeAs="String">
        <value>True</value>
 </setting>
 <setting name="ConnectionStringForBalancer" serializeAs="String">
        <value>dct-srv-01.local;34001;39257</value>
 </setting>
...
</Dictation.Asr.Service.Properties.Settings>

 

2.В файле Dictation.Common.Properties.Settings.config укажите имя хоста с балансировщиком (настройка BalancerIp).

 

<Dictation.Common.Properties.Settings>
 <setting name="BalancerIp" serializeAs="String">
        <value>dct-bal.local</value>
 </setting>
...
</Dictation.Common.Properties.Settings>

 

atten_red

Если какого-то из файлов конфигурации в папке нет, создайте его и скопируйте в него настройки из примера.

Настройка Voice2Med Client

Для каждого клиентского приложения внесите изменения в файл конфигурации.

Откройте файл:

%Programfiles(x86)%\Speech Technology Center\Voice2Med Client\DictationApp.Client.dll.config

В секции Dictation.Common.Properties.CommonSettings укажите способ проверки сертификата безопасности в параметре SslCertificateVerification. Допустимые значения:

•Strict
SSL-сертификат должен быть подписан доверенным корневым сертификатом, и имя сервера должно совпадать с именем, указанным в сертификате (допустимо указывать IP-адрес вместо имени сервера);

•IgnoreName
SSL-сертификат должен быть подписан доверенным корневым сертификатом, но имя сервера не обязано совпадать с именем, указанным в сертификате;

•Insecure
SSL-сертификат может быть подписан недоверенным сертификатом.

 

<applicationSettings>

...

  <Dictation.Common.Properties.CommonSettings>

  ...

 <setting name="SslCertificateVerification" serializeAs="String">

        <value>Strict</value>

 </setting>

  ...

  </Dictation.Common.Properties.CommonSettings>

...

</applicationSettings>

atten_red

Если эта секция отсутствует, допишите ее в файл.