Назад | Перейти на главную страницу

Исправление ошибки WebSocket 404 с динамическим URL-адресом WebSocket под обратным прокси

Я использую Ubuntu, Apache, mod_proxy_wstunnel (Enabled), Shiny-Server и R. Я настроил shiny-server для локального прослушивания и Apache для запросов прокси для shiny-server. Я также установил базовую авторизацию в моей конфигурации Apache для всего домена.

Все в порядке, за исключением случаев, когда приложение блестящего сервера пытается сделать запрос веб-сокета. Я получаю следующую ошибку.

WebSocket connection to 'ws://xxxxxx.com/shiny-application/__sockjs__/407/ercpnzw1/websocket' failed: Error during WebSocket handshake: Unexpected response code: 401

Обычно я просто добавляю точный URL-адрес для веб-сокета, но этот URL-адрес sock.js динамически и всегда изменяется.

Есть ли способ решить эту проблему с помощью регулярного выражения в конфигурации apache?

Чтобы исправить эту проблему, скорее всего, вызванную обратным прокси-сервером с Shiny-server и Apache. Добавьте disable_websockets true; как показано ниже. ** ПРИМЕЧАНИЕ. ** Кажется, это работает только с более новыми версиями Shiny-Server (я считаю, что Shiny Server Professional v1.2.0).

# Define the user we should use when spawning R Shiny processes
run_as shiny;

disable_websockets true;

# Define a top-level server which will listen on a port
server {
  # Instruct this server to listen on port 3838
  listen 3838;

  # Define the location available at the base URL
  location / {
    #### PRO ONLY ####
    # Only up tp 20 connections per Shiny process and at most 3 Shiny processes
    # per application. Proactively spawn a new process when our processes reach 
    # 90% capacity.
    utilization_scheduler 20 .9 3;
    #### END PRO ONLY ####

    # Run this location in 'site_dir' mode, which hosts the entire directory
    # tree at '/srv/shiny-server'
    site_dir /srv/shiny-server;

    # Define where we should put the log files for this location
    log_dir /var/log/shiny-server;

    # Should we list the contents of a (non-Shiny-App) directory when the user 
    # visits the corresponding URL?
    directory_index on;
  }
}