Some or all of the below information will be requested if it isn’t supplied; for fastest response please provide as much as you can. ![]()
The Basics
- Nextcloud Server version (e.g., 29.x.x):
34.0.2
- Operating system and version (e.g., Ubuntu 24.04):
Ubuntu 24.04.4 LTS
- Web server and version (e.g, Apache 2.4.25):
image: nextcloud:34-apache
- Reverse proxy and version _(e.g. nginx 1.27.2)
container nginx proxy
- PHP version (e.g, 8.3):
image: nextcloud:34-apache
- Is this the first time you’ve seen this error? (Yes / No):
no
- When did this problem seem to first start?
When using aio talk
- Installation method (e.g. AlO, NCP, Bare Metal/Archive, etc.)
aio-talk, docker
- Are you using CloudfIare, mod_security, or similar? (Yes / No)
no
Summary of the issue you are facing:
Using my docker compose file, I have tried to configure the high performance backend in junction with nextcloud.
Whenever I try to write something in a chatroom or I try to create one, it fails.
Except when I write, what I’ve written stays in the chat at some unknown point after the failure messages displays.
Nextcloud shows that both high performance backend and the turn server should work.
![]()
Log entries
Nextcloud
Please provide the log entries from your Nextcloud log that are generated during the time of problem (via the Copy raw option from Administration settings->Logging screen or from your nextcloud.log located in your data directory). Feel free to use a pastebin/gist service if necessary.
[spreed] Warnung: Client error: `POST https://<signalDomain>/api/v1/room/9dtjkyde` resulted in a `403 Forbidden` response:
Authentication check failed
POST /ocs/v2.php/apps/spreed/api/v1/chat/9dtjkyde
von <ip Address> von <admin> um 12.08.2026, 23:47:17
[spreed] Warnung: Client error: POST https://<signalDomain>/api/v1/room/9dtjkyde resulted in a 403 Forbidden response:Authentication check failed
POST /ocs/v2.php/apps/spreed/api/v1/chat/9dtjkyde
von <ip Address> von <admin> um 12.08.2026, 23:47:17
Web Browser
If the problem is related to the Web interface, open your browser inspector Console and Network tabs while refreshing (reloading) and reproducing the problem. Provide any relevant output/errors here that appear.
setVisualLastReadMessageId token=9dtjkyde id=53 talk-main.js:210:1240258
XHR POST
https://<domain>/ocs/v2.php/apps/spreed/api/v1/chat/9dtjkyde
[HTTP/2 400 482ms]
Scrolling to a focused message programmatically talk-main.js:210:1243078
error while submitting message AxiosError: Request failed with status code 400 talk-main.js:20:259156
AxiosError: Request failed with status code 400
tY AxiosError.js:102
t$ settle.js:19
ir xhr.js:62
t1 xhr.js:78
t1 xhr.js:16
tZ dispatchRequest.js:46
promise callback*_request Axios.js:196
request Axios.js:41
tW Axios.js:257
tH bind.js:12
xi messagesService.ts:172
request CancelableRequest.ts:34
postNewMessage messagesStore.js:1310
ET vuex.esm-bundler.js:322
dispatch vuex.esm-bundler.js:1055
dispatch vuex.esm-bundler.js:937
postMessage NewMessage.vue:1089
handleSubmit NewMessage.vue:1081
ir runtime-core.esm-bundler.js:199
is runtime-core.esm-bundler.js:206
n6 runtime-core.esm-bundler.js:4494
onEnter NcRichContenteditable-Qw614bJ5.mjs:793
59762/_B/tW[5]< NcRichContenteditable-Qw614bJ5.mjs:956
tH runtime-dom.esm-bundler.js:1856
tH runtime-dom.esm-bundler.js:1879
ir runtime-core.esm-bundler.js:199
is runtime-core.esm-bundler.js:206
tq runtime-dom.esm-bundler.js:759
talk-main.js:210:562475
Conversations were saved to BrowserStorage. Estimated object size: 7.71 kB talk-main.js:20:204411
Web server / Reverse Proxy
The output of your Apache/nginx/system log in /var/log/____:
PASTE HERE
Configuration
YML File
services:
ddclient:
image: lscr.io/linuxserver/ddclient:latest
container_name: ddclient
environment:
- PUID=1000 # Your user ID
- PGID=1000 # Your group ID
- TZ=Europe/Berlin # Set your timezone
volumes:
- ./config:/config # ddclient.conf goes here
restart: unless-stopped
network_mode: "host"
db:
container_name: db
image: mariadb:10.11
command: --transaction-isolation=READ-COMMITTED
restart: unless-stopped
volumes:
- ./mysql:/var/lib/mysql:Z
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MARIADB_AUTO_UPGRADE=1
- MARIADB_DISABLE_UPGRADE_BACKUP=1
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- net-internal-nextcloud
redis:
container_name: redis
image: redis:alpine
restart: unless-stopped
networks:
- net-internal-nextcloud
app:
container_name: app
# pin to version 33.x to reduce potential impact after automatic
# container updates
image: nextcloud:34-apache
restart: unless-stopped
volumes:
# NOTE: The `volumes` config of the `cron` and `app` containers must match
- ./nextcloud/html:/var/www/html:z
- ./php-config/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
expose:
- 80
environment:
- VIRTUAL_HOST=${domain}
- LETSENCRYPT_HOST=${domain}
- NEXTCLOUD_TALK_INTERNAL_SECRET=${ncInternalSecret}
- INTERNAL_SECRET=${ncInternalSecret}
- REDIS_HOST=redis
- MYSQL_HOST=db
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- TURN_SECRET=${ncTurnSecret}
- SIGNALING_SECRET=${ncSignalingSecret}
depends_on:
- db
- redis
# Added proxy container dependency below.
# It is unclear on when or why it happens, but sometimes NC manages to start before the proxy
# and it breaks for whatever weird reason resulting in the need of manual proxy container res>
- proxy
labels:
com.centurylinklabs.watchtower.depends-on: db,redis,proxy
networks:
- net-internal-nextcloud
- default
talk_hpb:
container_name: talk_hpb
image:
init: true
ports:
- 3478:3478/tcp
- 3478:3478/udp
- 8081:8081/tcp
expose:
- 8081
- 3478
environment:
- NC_DOMAIN=${domain}
- TALK_HOST=${signalDomain}
- TALK_PORT=3478
- VIRTUAL_HOST=${signalDomain}
- VIRTUAL_PORT=8081
- TURN_SECRET=${ncTurnSecret}
- SIGNALING_SECRET=${ncSignalingSecret}
- TZ=Europe/Berlin
- INTERNAL_SECRET=${ncInternalSecret}
- LETSENCRYPT_HOST=${signalDomain}
- REDIS_HOST=redis
restart: unless-stopped
networks:
- net-internal-nextcloud
- default
cron:
container_name: cron
# pin to version 30.x to reduce potential impact after automatic
# container updates
image: nextcloud:34-apache
restart: unless-stopped
volumes:
# NOTE: The `volumes` config of the `cron` and `app` containers must match
- ./nextcloud/html:/var/www/html:z
entrypoint: /cron.sh
depends_on:
- db
- redis
labels:
com.centurylinklabs.watchtower.depends-on: db,redis,proxy
proxy:
container_name: nginx
image: nginxproxy/nginx-proxy:alpine
restart: unless-stopped
ports:
- 80:80
- 443:443
# - 3478:3478
# - 8081:8081
environment:
- ACME_HTTP_CHALLENGE_LOCATION=true
volumes:
- ./nginx/certs:/etc/nginx/certs:ro,z
- ./nginx/html:/usr/share/nginx/html:z
- ./nginx/dhparam:/etc/nginx/dhparam:z
- ./nginx/vhost.d:/etc/nginx/vhost.d:z
- ./nginx/uploadsize.conf:/etc/nginx/conf.d/uploadsize.conf:ro
- /var/run/docker.sock:/tmp/docker.sock:z,ro
- ./nginx/conf.d:/etc/nginx/conf.d
networks:
net-internal-nextcloud:
aliases:
- ${domain}
- ${signalDomain}
default:
acme:
image: nginxproxy/acme-companion:latest
container_name: nginx-acme
restart: unless-stopped
depends_on:
- proxy
- ddclient
environment:
- DEFAULT_EMAIL=${letsencryptEmail}
volumes:
- ./nginx/certs:/etc/nginx/certs:rw
- ./nginx/vhost.d:/etc/nginx/vhost.d
- ./nginx/html:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./acme:/etc/acme.sh
volumes_from:
- proxy
networks:
- default
#
watchtower:
container_name: watchtower
image: containrrr/watchtower:latest
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# commands:
# --cleanup - remove old images
# --schedule - update schedule in seconds, minute, hour, day of month, month, day of week
# --stop-timeout - wait more than 10s to shut down the container
# there is plenty of time middle in the night
command: --cleanup --schedule "0 30 20 * * *" --stop-timeout 180s
networks:
- net-watchtower
environment:
- DOCKER_API_VERSION=1.44
networks:
# separate network for Watchtower communication
net-watchtower:
# internal communication of all Nextcloud containers
net-internal-nextcloud:
internal: true
enable_ipv6: false
ipam:
config:
- subnet: 10.10.10.0/24
# separate network for static webserber
# net-web:
# separate network for Pi-hole
net-pihole:
web:
driver: bridge
external: true
enable_ipv6: true
ipam:
config:
- subnet: 192.18.0.0/16
- subnet: 2001:db8:1::/64
Apps
The output of occ app:list (if possible).



