Перейти к содержанию

Конфигурация внешнего балансировщика нагрузки/прокси-сервера

Для правильной работы Системы необходимо указать внешний URL - адрес, по которому пользователи заходят в AW. URL состоит из нескольких частей (для примера рассмотрен URL - "https://aw-demo.ru/aw"):

  • Origin - часть, содержащая протокол и доменное имя (для данного примера - "https://aw-demo.ru");
  • Path - путь (часть после доменного имени) (для данного примера - "/aw").

Параметры конфигурации отвечающие за URL по которому доступна AW:

  • FRONTEND_URL - полный URL, на котором развернута AW (URL, по которому пользователи входят в AW). Значение не должно включать конечный символ /. Примеры:

    https://aw-demo.ru/aw
    https://aw-demo.ru
    

  • FRONTEND_BASE_HREF - путь относительно доменного имени. Значение должно включать начальный и конечный символы /. Примеры:

    /aw/
    /
    

Схема работы AW за reverse-proxy

Конфигурации reverse-proxy nginx в случае, когда FRONTEND_BASE_HREF отличен от "/"

Если Система (AW) располагается по URL, путь в котором отличен от "/", то необходимо применять внешний прокси-сервер (например, nginx), в котором нужно настроить переписывание адресов (URL Rewriting) при проксировании запросов.

В AW запросы должны поступать без префикса пути в URL, т.е., например, запрос к "https://aw-demo.ru/aw" должен переписываться в виде "http://aw-demo.ru/", а запрос к "https://aw-demo.ru/aw/api/some/path" должен переписываться в виде "http://aw-demo.ru/api/some/path".

К передаваемым HTML-документам не должно применяться переписывание адресов (URL Rewriting).

Ниже описан пример для AW, размещенного по адресу https://example.ru/aw (параметр конфигурации FRONTEND_URL), для веб-сервера AW выбран порт 5050 (параметр конфигурации AW_FRONTEND_HTTP_PORT). Тогда фрагмент конфигурации для nginx может выглядеть следующим образом:

  1. создайте файл /etc/nginx/conf.d/aw.conf (для RED ОС) или /etc/nginx/sites-enabled/aw.conf для Debian и Ubuntu,
  2. поместите в созданный файл директивы для настройки виртуального сервера nginx:

     upstream upstream_aw {
         server localhost:5050;
     }
    
     server {
    
         listen 80;
    
         server_name <IP-адрес или имя сервера, должен совпадать с FRONTEND_URL>
    
         access_log /var/log/nginx/aw.access.log;
         error_log /var/log/nginx/aw.error.log error;
    
         gzip on;
         gzip_disable "msie6";
         gzip_vary on;
         gzip_proxied any;
         gzip_comp_level 6;
         gzip_buffers 16 8k;
         gzip_http_version 1.1;
         gzip_types application/javascript text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss image/svg+xml text/javascript;
         client_max_body_size 100m;
         client_body_timeout 3600;
    
    
         location /aw {
             return 302 /aw/;
         }
    
         location  ~ ^/aw/(.*)$ {
             resolver 127.0.0.1 ipv6=off;
             rewrite /aw/(.*) /$1  break;
             proxy_pass http://upstream_aw;
             proxy_set_header Host $http_host;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection 'upgrade';
             proxy_cache_bypass $http_upgrade;
         }
     }
    

  3. проверьте корректность настройки командой sudo nginx -t:

    $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

Пример конфигурации nginx в качестве прокси-сервера для терминирования SSL трафика (настройка https)

Пример конфигурации nginx в качестве прокси-сервера для терминирования SSL трафика (настройка https):

  1. подключитесь к серверу AW по ssh;
  2. перейдите в директорию установки AW: cd /opt/aw/app;
  3. установите значение AW_FRONTEND_HTTP_PORT в отличное от 80 и 443, например 8088;
  4. перезапустите frontend, чтобы изменения вступили в силу: docker compose up -d;
  5. создайте файл /etc/nginx/conf.d/aw.conf (для RED ОС) или /etc/nginx/sites-enabled/aw.conf для Debian и Ubuntu;
  6. поместите в созданный файл директивы для настройки виртуального сервера nginx:

    server {
        listen 443 ssl http2;
    
        server_name <IP-адрес или имя сервера, должен совпадать с FRONTEND_URL>
    
        access_log /var/log/nginx/aw.access.log;
        error_log /var/log/nginx/aw.error.log error;
    
        gzip on;
        gzip_disable "msie6";
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types application/javascript text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss image/svg+xml text/javascript;
        client_max_body_size 100m;
        client_body_timeout 3600;
    
        ssl on;
    
        ssl_certificate <путь к сертификату>;
        ssl_certificate_key <путь к ключу>;
    
        location / {
        proxy_pass  http://127.0.0.1:8088;
        proxy_set_header Host $host;
        proxy_read_timeout 86400;
        }
    
        location ~ ^/ws {
        proxy_pass http://127.0.0.1:8088;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_read_timeout 86400;
        }
    
    }
    
    server {
        listen 80;
        server_name <IP-адрес или имя сервера, должен совпадать с FRONTEND_URL>;
        return 301 https://aw-demo.ru$request_uri;
    }
    
  7. проверьте корректность настройки командой sudo nginx -t:

    $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful