Разделение портов

Разделение портов — настройка nginx так, чтобы веб-интерфейс администратора и трафик клиентов RuDesktop обслуживались на разных TCP-портах. Это позволяет, например, оставить административный веб только во внутренней сети, а клиентский endpoint открыть наружу

Для разделения портов, используемых для подключения клиентов и веб-интерфейса, необходимо:

  1. Создать копию основного конфига nginx под отдельный server-блок для клиентов:

    cp /etc/nginx/sites-available/rudesktop /etc/nginx/sites-available/rudesktop-client
    
  2. Отредактировать скопированный файл по пути /etc/nginx/sites-available/rudesktop-client

    Важно

    В файле меняем только то, что описано ниже. Остальные location-блоки (в частности, /v1/ — WebSocket к relay / rz, /static/, /download/, /root.pem, /favicon.ico), include rudesktop_params; и SSL-параметры — оставляем как есть: они нужны на клиентском порту для работы клиентов и проксирования встроенных эндпоинтов

    1. Удалить из копии первый server { listen 80; } блок (с редиректом return 301 https://$host$request_uri;):

      Этот блок уже обслуживается основным vhost-ом /etc/nginx/sites-enabled/rudesktop для того же server_name. Если оставить его в копии — при перезагрузке nginx выдаст предупреждение conflicting server name on 0.0.0.0:80, ignored, и второй блок будет молча проигнорирован

    2. Найти блок server { со строкой listen 443 ssl; и заменить значение 443 на удобный вам порт (этот порт будет использоваться для подключения клиентов RuDesktop к серверу):

      server {
      
        server_name 192.168.10.10;
      
        listen 8443 ssl;
      
    3. Найти блок location / { и заменить на следующее:

      location /api/ {
        add_header 'Cache-Control' 'no-cache';
        include proxy_params;
        proxy_pass http://unix:/run/rudesktop-web.sock;
      }
      
    4. Добавить новый блок location /media/ { после блока location /api/ {

      location /media/ {
        add_header 'Cache-Control' 'no-cache';
        include proxy_params;
        proxy_pass http://unix:/run/rudesktop-web.sock;
      }
      
    5. Добавить новый блок location /portal/ { после блока location /media/ {

      location /portal/ {
        return 301 https://$host:[АДМИН_ПОРТ]$request_uri;
      }
      

      Важно

      Вместо [АДМИН_ПОРТ] подставьте порт из /etc/nginx/sites-enabled/rudesktop (строка listen) — это порт админского веб-интерфейса. Если он не менялся, используйте 443

  3. Активировать конфиг:

    ln -s /etc/nginx/sites-available/rudesktop-client /etc/nginx/sites-enabled/rudesktop-client
    
  4. Проверить корректность конфигурации nginx:

    nginx -t
    
  5. Перезагрузить сервер командой:

    rude restart
    
  6. Указать клиентский порт в настройках сервера, чтобы установочные скрипты и пакеты (.sh, .msi, .apk) прописывали клиентам корректный порт:

    В административной панели откройте Настройки → Настройки мостов и задайте параметр Порт подключения клиентов равным порту из клиентского server-блока (в примере — 8443)

    Важно

    Без этого шага установщик берёт порт из адреса, по которому открыта веб-панель (443), и клиент подключается на 443 вместо клиентского порта