Napraw rozłączanie sesji edycji dokumentów CODE po 10 minutach
Jeśli dokument Collabora Online Development Edition (CODE) otwiera się normalnie, edycje działają, a następnie edytor rozłącza się po prawie dokładnie 10 minutach, zacznij od ścieżki WebSocket między przeglądarką a CODE. Powtarzalny limit 600 sekund znacznie bardziej sugeruje przekroczenie limitu czasu przez odwrotny serwer proxy, kontroler wejściowy, moduł równoważenia obciążenia lub zaporę sieciową niż udokumentowane domyślne liczniki bezczynności w CODE.
To rozróżnienie ma znaczenie, ponieważ zmiana ustawień bezczynności w CODE może ukryć prawdziwy problem bez naprawy połączenia obsługującego ruch edycyjny. Aktualny szablon konfiguracji Collabora dokumentuje 15-minutowy limit bezczynności dla każdego widoku i godzinę bezczynności dokumentu, a nie 10-minutowy limit sesji edycyjnych. Zobacz szablon coolwsd.xml . Jeśli użytkownicy aktywnie piszą, gdy następuje rozłączenie, ustawienie CODE tylko dla bezczynności jest jeszcze słabszym wytłumaczeniem.
Co zazwyczaj oznacza 10-minutowa rozłąka
Zweryfikowano: Opublikowany przykład Nginx firmy Collabora używa nagłówków aktualizacji WebSocket oraz typu long proxy_read_timeout 36000sdla głównego WebSocket. Sam Nginx dokumentuje, że połączenia WebSocket przez proxy są zamykane, gdy w skonfigurowanym czasie odczytu nie zostaną odebrane żadne dane, a jego domyślna proxy_read_timeoutwartość to 60 sekund. Zapoznaj się z podręcznikiem Collabora Online SDK oraz dokumentacją proxy Nginx WebSocket .
Zależne od środowiska: 600-sekundowy limit czasu może zostać wprowadzony przez inną warstwę proxy, nawet jeśli host Nginx przed CODE wygląda poprawnie. Typowe miejsca to Kubernetes Ingress, HAProxy, system równoważenia obciążenia w chmurze, WAF lub odwrotny serwer proxy upstream. Dokładny limit czasu i klucz konfiguracji zależą od tego komponentu.
Nie dowodzi tego sam objaw: „rozłącza się po 10 minutach” nie dowodzi, że odpowiedzialny jest komponent Nginx. Przechwyć uszkodzony WebSocket i skoreluj jego znacznik czasu z logami proxy i CODE, zanim zmienisz kilka warstw jednocześnie.
Działanie: odtwórz błąd przy użyciu narzędzi programistycznych przeglądarki i zapisz dokładny czas trwania żądania WebSocket.
Użyj panelu Sieć w przeglądarce, aby sprawdzić, czy edycja WebSocket kończy się w powtarzalnym momencie. To przykładowy widok diagnostyczny, a nie przechwycona sesja produkcyjna.
Krok 1: Sprawdź, czy rzeczywiście ginie WebSocket
Otwórz dokument, a następnie otwórz narzędzia programistyczne przeglądarki i przejdź do panelu Sieć. Filtruj ruch WebSocket. Ruch związany z edycją kodu zazwyczaj obejmuje WebSocket pod ścieżką /cool/. Pozostaw dokument otwarty po wystąpieniu awarii.
Po rozłączeniu sesji należy sprawdzić żądanie WebSocket. Najbardziej przydatne informacje to czas jego trwania, moment zamknięcia, status HTTP podczas początkowej aktualizacji oraz to, czy przeglądarka zgłasza błąd sieciowy. Czysty inicjał, 101 Switching Protocolsa następnie zamknięcie po około 600 sekundach wskazuje na czas życia połączenia lub zasadę braku aktywności gdzieś na ścieżce.
Jeśli WebSocket nie aktualizuje się pomyślnie, nie jest to problem „10-minutowego limitu czasu”; najpierw należy naprawić routing i nagłówki WebSocket. Jeśli WebSocket pozostaje połączony, podczas gdy edytor wyświetla błąd przechowywania lub zapisu, należy zamiast tego sprawdzić ścieżkę WOPI/przechowywania.
Działanie: zapisz czas rozpoczęcia i czas rozłączenia, a następnie porównaj te znaczniki czasu z dziennikami dostępu/błędów odwrotnego serwera proxy i kontenerem CODE lub dziennikami usług.
Krok 2: Sprawdź regułę odwrotnego proxy CODE przed zmianą wartości bezczynności CODE
W przypadku Nginx najważniejsze jest, aby lokalizacja WebSocket przekazała nagłówki aktualizacji i miała odpowiednio długi limit czasu odczytu. Podręcznik SDK Collabora przedstawia ten wzorzec dla głównego WebSocket:
Jeśli protokół TLS jest zakończony na serwerze Nginx, a CODE celowo obsługuje za nim zwykły protokół HTTP, schemat nadrzędny może być http://wyłączony. Nie kopiuj schematu bezmyślnie: musi on być zgodny z konfiguracją instancji CODE.
Jednym z powszechnych nieporozumień jest to, że proxy_connect_timeoutkontroluje czas życia już ustanowionej sesji edycji. Nie kontroluje; działa podczas nawiązywania połączenia z serwerem nadrzędnym. Ustawieniem najbardziej bezpośrednio istotnym dla ustanowionego serwera proxy WebSocket z okresami braku danych nadrzędnych jest proxy_read_timeout. Nginx dokumentuje to zachowanie w dokumentacji modułu proxy HTTP .
Działanie: zlokalizuj rzeczywisty blok Nginx, który odpowiada adresowi URL WebSocket CODE i sprawdź, czy limit czasu jest ustawiony w tym miejscu, a nie tylko w niezwiązanym pliku location.
Ustaw długi limit czasu dla reguły, która faktycznie obsługuje ruch CODE WebSocket. Dokładny protokół i ścieżka nadrzędna muszą być zgodne z wdrożeniem.
Krok 3: Uwzględnij zmiany w serwerze proxy CODE 26.04
W październiku 2026 roku aktualne informacje o wydaniu CODE 26.04 firmy Collabora wymieniają wersję CODE 26.04.4.2, wydaną 24 września 2026 roku. Seria 26.04 wprowadziła bardziej kompaktowy adres URL WebSocket. Firma Collabora zauważa, że istniejące konfiguracje serwerów proxy mogą wymagać aktualizacji; w późniejszych kompilacjach 26.04 CODE może powrócić do starszego adresu URL i generować ostrzeżenie audytu, gdy serwer proxy nie zostanie zaktualizowany. Użytkownicy Apache2 otrzymali wyraźne polecenie aktualizacji reguły ProxyPass podczas wprowadzania wersji 26.04. Zobacz oficjalne informacje o wydaniu CODE 26.04 .
Nie oznacza to, że każde 10-minutowe rozłączenie jest spowodowane zmianą kompaktowego adresu URL. Oznacza to, że 26.04 należy zweryfikować reguły odwrotnego proxy z dokumentacją wersji, z której faktycznie korzystasz, zwłaszcza jeśli problem pojawił się po aktualizacji.
Działanie: sprawdź wersję KODU w sekcji „Informacje o produkcie” lub w tagu obrazu kontenera, a następnie porównaj konfigurację serwera proxy z aktualnymi wytycznymi dotyczącymi serwera proxy Collabora. Nie zakładaj, że reguła skopiowana ze starszego wdrożenia 24.04 nadal jest idealna.
Krok 4: Sprawdź Kubernetes Ingress, HAProxy, Apache i inne middleboxy
Jeśli Nginx znajduje się tylko o jedną warstwę przed CODE, wydłużenie jego limitu czasu może nie wystarczyć. W przypadku Kubernetesa korzystającego z ingress-nginx, dokumentacja projektu zawiera adnotacje per-Ingress o nazwach nginx.ingress.kubernetes.io/proxy-read-timeouti nginx.ingress.kubernetes.io/proxy-send-timeout. Wytyczne dotyczące WebSocket zalecają wartości dłuższe niż jedna godzina w przypadku połączeń o długim czasie trwania. Zobacz oficjalne odniesienia do adnotacji Ingress-Nginx i notatki dotyczące WebSocket .
W przypadku HAProxy przykład SDK Collabora używa długiego limitu czasu tunelu dla ruchu w stylu WebSocket. W przypadku Apache, limit czasu ogólnego serwera proxy jest kontrolowany przez ProxyTimeout, ale CODE 26.04 wymaga również uwzględnienia bieżącego wzorca WebSocket ProxyPass. Własna dokumentacja Apache'a, mod_proxy, wyjaśnia, co ProxyTimeoutkontroluje.
Działanie: narysuj ścieżkę połączenia z przeglądarki do CODE i sprawdź każdy przeskok. Limit 600 sekund na każdym przeskoku może nadal zakończyć sesję.
Krok 5: Zweryfikuj i bezpiecznie przeładuj serwer proxy
Po edycji konfiguracji Nginx przetestuj ją przed ponownym załadowaniem:
sudo nginx -t
sudo systemctl reload nginx
Jeśli Nginx działa w kontenerze, zamiast zakładać systemctljego istnienie, należy użyć równoważnej procedury walidacji i ponownego ładowania uwzględniającej kontener. Ważne jest sprawdzenie składni przed zastąpieniem bieżącej konfiguracji.
Działanie: zmieniaj warstwy pojedynczo, zapisz poprzednią wartość, sprawdź poprawność konfiguracji, a następnie ponownie przetestuj ten sam przepływ pracy dokumentu.
Przed ponownym załadowaniem sprawdź poprawność konfiguracji odwrotnego serwera proxy, aby naprawa limitu czasu nie spowodowała oddzielnego problemu z dostępnością.
Krok 6: Udowodnij poprawność rozwiązania za pomocą testu dłuższego niż poprzedni próg
Nie przerywaj testowania po ponownym otwarciu dokumentu. Pozostaw tę samą sesję edycji połączoną znacznie dłużej niż poprzedni punkt awarii. W przypadku 10-minutowego objawu, 20-30-minutowe okno walidacyjne jest bardziej przydatne niż dwuminutowy test dymowy. Pozostaw panel Sieć otwarty i od czasu do czasu wprowadzaj zmiany, aby odróżnić aktywną edycję od całkowicie bezczynnej karty.
Dobry wynik ma trzy oznaki: połączenie WebSocket pozostaje nawiązane dłużej niż 10 minut, edytor nadal akceptuje edycje bez monitów o ponowne połączenie i w dziennikach pośredniczących lub CODE nie pojawia się żaden komunikat o przekroczeniu limitu czasu.
Jeśli połączenie nadal zostaje zamknięte dokładnie 10 minut po zwiększeniu limitu czasu najbliższego serwera proxy, jest to przydatny dowód na to, że inny przeskok nadal ma politykę 600 sekund.
Działanie: kontynuuj śledzenie na zewnątrz, aż do momentu zidentyfikowania komponentu, który emituje zamknięcie lub przekroczenie limitu czasu.
Po wprowadzeniu zmiany należy sprawdzić, czy protokół WebSocket pozostaje aktywny dłużej niż poprzednio przez 10 minut. Podany tutaj czas trwania ma charakter poglądowy.
Nie należy mylić liczników bezczynności CODE z 10-minutowym odcięciem sieci
Szablon konfiguracji CODE w górnym strumieniu obecnie podaje per_view.idle_timeout_secs900 sekund, czyli 15 minut. W jego opisie jest napisane, że widok jest przyciemniony, a aktualizacje zatrzymują się, gdy użytkownik jest nieaktywny. idle_timeout_secsDomyślna wartość na poziomie dokumentu to 3600 sekund, czyli jedna godzina, zanim bezczynny dokument zostanie usunięty.
Warto sprawdzić te wartości, jeśli Twoje zachowanie jest z nimi zgodne, ale żadna z domyślnych wartości nie wyjaśnia dokładnego rozłączenia po 600 sekundach. Jeśli ktoś wcześniej dostosował coolwsd.xmlzmienne środowiskowe, wartości Helm lub parametry kontenera, Twoje wdrożenie może różnić się od domyślnych.
Działanie: sprawdź efektywną konfigurację CODE dopiero po ustaleniu, czy awaria dotyczy poziomu sieci, czy aplikacji. Nie zwiększaj każdej wartości bezczynności jako pierwszej reakcji.
Szybka tabela diagnostyczna
Obserwowane zachowanie
Najbardziej przydatne następne sprawdzenie
Czego nie zakładać
Protokół WebSocket zamyka się po około 600 sekundach, gdy użytkownik jest aktywny
Przekroczenie limitu czasu serwera proxy, ruchu przychodzącego, modułu równoważenia obciążenia lub zapory sieciowej
Że stara konfiguracja proxy 24.04 jest automatycznie równoważna
Dotyczy to tylko kart bezczynnych i działających w tle
KOD zachowanie bezczynności na widok i pośrednie limity czasu bezczynności
Że awarie sesji aktywnej i sesji bezczynności mają tę samą przyczynę
WebSocket pozostaje otwarty, ale zapisywanie nie powiodło się
Dzienniki WOPI/przechowywania i żądania zapisu
Że przyczyną jest przekroczenie limitu czasu WebSocket
Podsumowanie
W przypadku sesji edycji CODE, która rozłącza się po powtarzalnych 10 minutach, najskuteczniejsza sekwencja to: potwierdzenie awarii WebSocket, weryfikacja odpowiedniej reguły odwrotnego proxy, sprawdzenie każdego przekroczenia limitu czasu pośrednika, uwzględnienie zmian ścieżki proxy CODE 26.04, bezpieczne ponowne załadowanie i przetestowanie poza starą granicą. Ustawienia bezczynności CODE należy zmieniać tylko wtedy, gdy zaobserwowane zachowanie i efektywna konfiguracja faktycznie na to wskazują.
Jeśli czas awarii nie jest powtarzalny lub jeśli logi CODE pokazują awarie, zakończenie procesu, obciążenie pamięci lub błędy WOPI w tym samym momencie, przestań traktować to jako zwykły przypadek przekroczenia limitu czasu. Takie objawy wymagają innej diagnozy.