Вопрос или проблема
Я пытаюсь настроить Focalboard для работы в определенной подсекции с использованием Nginx. Я следовал шагам из официальной документации Focalboard и смог нормально его настроить. Однако после перемещения Focalboard в подсекцию /focalboard соединение WebSocket начало показывать проблемы.
Конфигурация Nginx:
upstream focalboard {
server localhost:8000;
keepalive 32;
}
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/certificate.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
# Конфигурация WebSocket
location /focalboard/ws/ {
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
client_body_timeout 60;
send_timeout 300;
lingering_timeout 5;
proxy_connect_timeout 1d;
proxy_send_timeout 1d;
proxy_read_timeout 1d;
proxy_pass http://focalboard;
}
# Стандартная конфигурация для Focalboard
location /focalboard/ {
client_max_body_size 50M;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_cache_revalidate on;
proxy_cache_min_uses 2;
proxy_cache_use_stale timeout;
proxy_cache_lock on;
proxy_http_version 1.1;
proxy_pass http://focalboard/;
}
}
Конфигурация Focalboard config.json:
{
"serverRoot": "https://example.com/focalboard",
"port": 8000,
"dbtype": "sqlite3",
"dbconfig": "./focalboard.db",
"postgres_dbconfig": "dbname=exampledb sslmode=disable",
"useSSL": false,
"webpath": "./pack",
"filespath": "./files",
"telemetry": true,
"prometheusaddress": ":9092",
"session_expire_time": 2592000,
"session_refresh_time": 18000,
"localOnly": false,
"enableLocalMode": true,
"localModeSocketLocation": "/var/tmp/example_local.socket"
}
После применения этой конфигурации я неоднократно получаю следующую ошибку:
Неожиданный закрытие, повторное открытие веб-сокета
Соединение WebSocket постоянно закрывается неожиданно и немедленно повторно открывается, что создает постоянный цикл.
- Есть ли что-то неправильное или отсутствует в моей конфигурации WebSocket Nginx?
- Как я могу устранить проблему с разъединением WebSocket при запуске Focalboard в подсекции?
Ответ или решение
Ошибка WebSocket "Неожиданный закрытие, повторное открытие WebSocket" после перемещения Focalboard в подкаталог Nginx
При настройке Focalboard в Nginx для работы в подкаталоге, пользователи могут столкнуться с проблемой, связанной с соединениями WebSocket, что проявляется в виде сообщения об ошибке: "Неожиданный закрытие, повторное открытие WebSocket". Давайте разберемся, что может быть причиной этой проблемы и как ее можно решить.
Анализ конфигурации Nginx
Ваш файл конфигурации Nginx выглядит в целом корректно, однако стоит обратить внимание на несколько ключевых моментов, которые могут вызывать проблемы с WebSocket:
-
Корректность URL-адреса WebSocket:
Убедитесь, что вы обращаетесь к WebSocket по правильному адресу. В вашем случае это должно бытьwss://example.com/focalboard/ws/
. Проверьте правильность прописки URL и его соответствие конфигурации сервера Focalboard. -
Перенаправление HTTP на WebSocket:
Убедитесь, что ваш клиент может установить соединение с WebSocket. Проверьте, что проксирование настроено корректно и WebSocket получает запросы на правильный путь. Вам не нужно будет добавлять/
в концеproxy_pass
, так как вы уже указываете путь вlocation
.location /focalboard/ws/ { proxy_pass http://focalboard; # уберите / в конце }
-
Заголовки для WebSocket:
Ваша конфигурация заголовков для WebSocket кажется правильной, однако важно убедиться в том, что передаются все необходимые заголовки. Попробуйте добавитьproxy_http_version 1.1;
и убедитесь, что он есть в секции, отвечающей за WebSocket.
Конфигурация Focalboard
Ваш файл config.json
также должен корректно отражать путь, по которому доступен Focalboard. Временно измените значение для serverRoot
, чтобы убедиться, что оно настроено правильно:
"serverRoot": "https://example.com/focalboard",
Проверка и отладка
-
Логи Nginx:
Проверьте логи ошибок Nginx для выявления любых дополнительных подсказок о том, что может вызывать проблему с WebSocket. Используйте команды вродеtail -f /var/log/nginx/error.log
, чтобы в реальном времени наблюдать за ошибками. -
Сетевые инструменты:
Используйте инструменты разработчика в вашем браузере (перейдите на вкладку "Сеть") для отслеживания запросов WebSocket. Обратите внимание на ответы, которые вы получаете от сервера, и проверьте, нет ли сообщений об ошибках. -
Тестирование локального подключения:
Если возможно, попробуйте протестировать Focalboard без прокси. Запустите его локально на том же сервере, чтобы убедиться, что проблема именно в конфигурации Nginx.
Заключение
Ошибка "Неожиданный закрытие, повторное открытие WebSocket" может быть вызвана множеством факторов, но правильная настройка конфигурации Nginx и настроек Focalboard в большинстве случаев решит проблему. Убедитесь, что все пути и заголовки настроены правильно, и внимательно следите за логами, чтобы выявить причину неполадок.
Если после всех проверок и измений проблема осталась, рассмотрите возможность обращения к сообществу Focalboard или на платформы поддержки для получения дополнительной помощи, возможно, у других пользователей были схожие проблемы.