ServerException Server error: `POST [...] /cool/convert-to/png` resulted in a `502 Bad Gateway` response: error code: 502

Nextcloud log has many entries like this:

[richdocuments] Error: Failed to convert preview: Server error: `POST https://<REDACTED_DOMAIN>/cool/convert-to/png` resulted in a `502 Bad Gateway` response:
error code: 502

	GET /core/preview?fileId=442190&x=32&y=32&mimeFallback=true&v=ac4028&a=0
	from REDACTED_IP by REDACTED_USER at 17 Nov 2025, 2:25:44 pm

Document server is otherwise working fine with documents, etc.

Also seems similar to this, but thread was closed: Nextcloud + Collabora OK but image preview of filetype send errors

Also ref to this issue rasied in Nextcloud forums November 2024: Numerous logging entries from richdocumentscode NC30.0.1 - ℹ️ Support - Nextcloud community

In my case, I’m not using Docker.

Your Nextcloud is asking Collabora to generate previews using:

POST /cool/convert-to/png

Most common causes:

  1. Reverse-proxy timeout (nginx/Apache/Traefik) — increase proxy timeouts.
  2. Collabora conversion worker crash / bug — check journalctl -u loolwsd for errors.
  3. Collabora can’t spawn LibreOffice for preview (OOM or missing libs).
  4. Misconfigured proxy path — double-check /cool upstream config.

Quick tests:

curl https://your-domain/hosting/discovery
curl -F "file=@test.docx" https://your-domain/cool/convert-to/png
journalctl -u loolwsd -n 100

If you send me 5–10 lines of coolwsd logs around a failing preview and your proxy config, I can tell you the exact cause.

Thanks
Darshan

Hi Darshan,

Thanks for getting back.

So for quick tests:

curl https://REDACTED/hosting/discovery

Rightly returns a bunch of <wopi-discovery> XML as expected.

The next showed some warnings, but otherwise nothing on stdout:

$ curl -F "file=@test.odt" https://REDACTED/cool/convert-to/png
Warning: Binary output can mess up your terminal. Use "--output -" to tell 
Warning: curl to output it to your terminal anyway, or consider "--output 
Warning: <FILE>" to save to a file.

Then from journal:

$ journalctl -u coolwsd -n 100
Nov 21 14:27:49 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:27:49.122490 +1100 [ kitbroker_001 ] WRN  #20: Background save process disconnected but not terminated 1928390| kit/KitWebSocket.cpp:352
Nov 21 14:27:49 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:27:49.122563 +1100 [ kitbroker_001 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:28:06 REDACTED coolwsd[1820566]: wsd-1820566-1915134 2025-11-21 14:28:06.670111 +1100 [ docbroker_001 ] WRN  Client session [188] not found to forward message: o16036 unloaded: viewid=6 views=2| wsd/DocumentBroker.cpp:5278
Nov 21 14:32:14 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:32:14.617492 +1100 [ kitbroker_001 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:32:14 REDACTED coolwsd[1929381]: kit-1915128-1929381 2025-11-21 14:32:14.618642 +1100 [ kitbgsv_006_00b ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:32:15 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:32:15.939859 +1100 [ kitbroker_001 ] WRN  #20: Background save process disconnected but not terminated 1929381| kit/KitWebSocket.cpp:352
Nov 21 14:32:15 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:32:15.940789 +1100 [ kitbroker_001 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:34:51 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:34:51.366289 +1100 [ kitbroker_001 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:34:51 REDACTED coolwsd[1929830]: kit-1915128-1929830 2025-11-21 14:34:51.367461 +1100 [ kitbgsv_006_00c ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:34:52 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:34:52.693120 +1100 [ kitbroker_001 ] WRN  #20: Background save process disconnected but not terminated 1929830| kit/KitWebSocket.cpp:352
Nov 21 14:34:52 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:34:52.693152 +1100 [ kitbroker_001 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:41:22 REDACTED coolwsd[1820566]: wsd-1820566-1915134 2025-11-21 14:41:22.143915 +1100 [ docbroker_001 ] WRN  Client session [078] not found to forward message: o20585 unloaded: viewid=4 views=2| wsd/DocumentBroker.cpp:5278
Nov 21 14:43:26 REDACTED coolwsd[1820566]: wsd-1820566-1915134 2025-11-21 14:43:26.014148 +1100 [ docbroker_001 ] WRN  Client session [187] not found to forward message: o20595 unloaded: viewid=5 views=1| wsd/DocumentBroker.cpp:5278
Nov 21 14:49:07 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:49:07.160961 +1100 [ kitbroker_001 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:49:07 REDACTED coolwsd[1932719]: kit-1915128-1932719 2025-11-21 14:49:07.162127 +1100 [ kitbgsv_006_00d ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:49:08 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:49:08.485833 +1100 [ kitbroker_001 ] WRN  #20: Background save process disconnected but not terminated 1932719| kit/KitWebSocket.cpp:352
Nov 21 14:49:08 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:49:08.486665 +1100 [ kitbroker_001 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:49:12 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:49:12.868426 +1100 [ kitbroker_001 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:49:12 REDACTED coolwsd[1932785]: kit-1915128-1932785 2025-11-21 14:49:12.869852 +1100 [ kitbgsv_006_00e ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:49:14 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:49:14.166835 +1100 [ kitbroker_001 ] WRN  #20: Background save process disconnected but not terminated 1932785| kit/KitWebSocket.cpp:352
Nov 21 14:49:14 REDACTED coolwsd[1915128]: kit-1915128-1915128 2025-11-21 14:49:14.166835 +1100 [ kitbroker_001 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:56:15 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 14:56:15.395475 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:56:15 REDACTED coolwsd[1934160]: kit-1916558-1934160 2025-11-21 14:56:15.396722 +1100 [ kitbgsv_00d_001 ] WRN  #19: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 14:56:16 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 14:56:16.618652 +1100 [ kitbroker_009 ] WRN  #19: Background save process disconnected but not terminated 1934160| kit/KitWebSocket.cpp:352
Nov 21 14:56:16 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 14:56:16.619805 +1100 [ kitbroker_009 ] WRN  #19: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:01:27 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:01:27.466052 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:01:27 REDACTED coolwsd[1935197]: kit-1916558-1935197 2025-11-21 15:01:27.468707 +1100 [ kitbgsv_00d_002 ] WRN  #19: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:01:28 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:01:28.758790 +1100 [ kitbroker_009 ] WRN  #19: Background save process disconnected but not terminated 1935197| kit/KitWebSocket.cpp:352
Nov 21 15:01:28 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:01:28.758897 +1100 [ kitbroker_009 ] WRN  #19: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:04:42 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:04:42.571382 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:04:42 REDACTED coolwsd[1935760]: kit-1916558-1935760 2025-11-21 15:04:42.572563 +1100 [ kitbgsv_00d_003 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:04:43 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:04:43.927169 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1935760| kit/KitWebSocket.cpp:352
Nov 21 15:04:43 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:04:43.928102 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:16:01 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:16:01.932612 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:16:01 REDACTED coolwsd[1937901]: kit-1916558-1937901 2025-11-21 15:16:01.934131 +1100 [ kitbgsv_00d_004 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:16:03 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:16:03.551962 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1937901| kit/KitWebSocket.cpp:352
Nov 21 15:16:03 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:16:03.552001 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:17:19 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:17:19.050309 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:17:19 REDACTED coolwsd[1938210]: kit-1916558-1938210 2025-11-21 15:17:19.051547 +1100 [ kitbgsv_00d_005 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:17:20 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:17:20.403881 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1938210| kit/KitWebSocket.cpp:352
Nov 21 15:17:20 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:17:20.404691 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:25:51 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:25:51.736081 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:25:51 REDACTED coolwsd[1939769]: kit-1916558-1939769 2025-11-21 15:25:51.737020 +1100 [ kitbgsv_00d_006 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:25:53 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:25:53.119184 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1939769| kit/KitWebSocket.cpp:352
Nov 21 15:25:53 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:25:53.120145 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:29:01 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:29:01.340170 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:29:01 REDACTED coolwsd[1940329]: kit-1916558-1940329 2025-11-21 15:29:01.341720 +1100 [ kitbgsv_00d_007 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:29:03 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:29:03.289105 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1940329| kit/KitWebSocket.cpp:352
Nov 21 15:29:03 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:29:03.289143 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:29:48 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:29:48.953619 +1100 [ kitbroker_009 ] WRN  Unusual extremely large tile combine of size 4352x512 (17x2 tiles to serve 4 tiles: 11% in 8.5MB| common/RenderTiles.hpp:115
Nov 21 15:30:25 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:30:25.451903 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:30:25 REDACTED coolwsd[1940681]: kit-1916558-1940681 2025-11-21 15:30:25.453999 +1100 [ kitbgsv_00d_008 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:30:26 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:30:26.929559 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1940681| kit/KitWebSocket.cpp:352
Nov 21 15:30:26 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:30:26.929621 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:35:56 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:35:56.616203 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:35:56 REDACTED coolwsd[1941629]: kit-1916558-1941629 2025-11-21 15:35:56.617221 +1100 [ kitbgsv_00d_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:35:57 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:35:57.912829 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1941629| kit/KitWebSocket.cpp:352
Nov 21 15:35:57 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:35:57.912864 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:40:43 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:40:43.514973 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:40:43 REDACTED coolwsd[1942662]: kit-1916558-1942662 2025-11-21 15:40:43.516123 +1100 [ kitbgsv_00d_00a ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:40:44 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:40:44.644221 +1100 [ kitbroker_009 ] WRN  #20: Background save process disconnected but not terminated 1942662| kit/KitWebSocket.cpp:352
Nov 21 15:40:44 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:40:44.645107 +1100 [ kitbroker_009 ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:45:51 REDACTED coolwsd[1916558]: kit-1916558-1916558 2025-11-21 15:45:51.466356 +1100 [ kitbroker_009 ] WRN  #21: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283
Nov 21 15:45:51 REDACTED coolwsd[1943571]: kit-1916558-1943571 2025-11-21 15:45:51.467490 +1100 [ kitbgsv_00d_00b ] WRN  #20: Socket still open post onDisconnect(), forced shutdown.| net/Socket.hpp:1283

I can’t remember where I got the nginx proxy config (most likely based on the official repo here), nor how much it’s been modified for our production, but here it is:

# ANSIBLE_IGNORE_THIS_FILE

server {
    listen 80;
    server_name REDACTED;

    location / {
      return 301 https://$http_host$request_uri;
    }

}



server {
    listen 443 ssl http2;
    server_name REDACTED;

    ssl_certificate [...]

[...]

    # REDACTED_NAME added 2025-08-27 for very large docs!
    client_max_body_size 512m;

    location /browser {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $http_host;
    }

    location /loleaflet {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $http_host;
    }

    # WOPI discovery URL
    location /hosting/discovery {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $http_host;
    }

    # capabilities
    location /hosting/capabilities {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $http_host;
    }

    # main web connection
    location ~ ^/cool/(.*)/ws$ {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }

    # download, presentation and image upload
    location ~ ^/(c|l)ool {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $http_host;
    }

    # priority rule to match admin console websocket
    location ^~ /cool/adminws {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_read_timeout 36000s;
    }

    # REDACTED_NAME added 2023-06-03
    # default PHP uptime status landing page only
    location = / {
        root /var/www/collabora;
        try_files $uri $uri/ /index.php;
        index index.php;
        fastcgi_param HTTP_PROXY "";
        fastcgi_intercept_errors off;
        fastcgi_hide_header X-Powered-By;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_read_timeout 300s;
    }

    # REDACTED_NAME added 2023-11-01
    # ignore everything else non-specific
    location / {
        return 404;
    }
}