I am not sure if this will help or even if it’s relevant, but I had similar sounding issues with seadoc, wikis, as well as the notification-server.
In my case I have my own NGINX in front of everything, and no matter what I did with my config, those services it would not proxy properly.
What I ended up doing to get it working work was edit seafile’s nginx config instead, inside the seafile-data mount (seafile-data/nginx/conf/seafile.nginx.conf).
Mine currently looks like this:
# -*- mode: nginx -*-
# Auto generated at 04/19/2025 03:08:42
server {
listen 80;
server_name seafile.xxxxx.com;
client_max_body_size 10m;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_read_timeout 310s;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Connection "";
proxy_http_version 1.1;
add_header Access-Control-Allow-Origin *;
client_max_body_size 0;
access_log /var/log/nginx/seahub.access.log seafileformat;
error_log /var/log/nginx/seahub.error.log;
}
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 0;
proxy_read_timeout 36000s;
access_log /var/log/nginx/seafhttp.access.log seafileformat;
error_log /var/log/nginx/seafhttp.error.log;
}
location /notification/ping {
proxy_pass http://notification_server:8083/ping;
access_log /var/log/nginx/notification.access.log seafileformat;
error_log /var/log/nginx/notification.error.log;
}
location /notification {
proxy_pass http://notification_server:8083/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
access_log /var/log/nginx/notification.access.log seafileformat;
error_log /var/log/nginx/notification.error.log;
}
location /seafdav {
rewrite ^/seafdav$ /seafdav/ permanent;
}
location /seafdav/ {
proxy_pass http://127.0.0.1:8080/seafdav/;
proxy_set_header Host $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-Host $server_name;
proxy_read_timeout 1200s;
client_max_body_size 0;
access_log /var/log/nginx/seafdav.access.log seafileformat;
error_log /var/log/nginx/seafdav.error.log;
}
location /:dir_browser {
# Logo of WebDAV
proxy_pass http://127.0.0.1:8080/:dir_browser;
}
location /media {
root /opt/seafile/seafile-server-latest/seahub;
}
location /sdoc-server/ {
proxy_pass http://seadoc:80/;
proxy_redirect off;
proxy_set_header Host $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-Host $server_name;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100m;
}
location /socket.io {
proxy_pass http://seadoc:80;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_redirect off;
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
I really dislike that I had to edit that file instead of my own that is in front, which looks like this FYI:
server {
server_name seafile.xxxxx.com;
listen 80;
listen 443 ssl http2;
ssl_certificate /letsencrypt/live/xxxxx.com/fullchain.pem;
ssl_certificate_key /letsencrypt/live/xxxxx.com/privkey.pem;
# Redirect non-https traffic to https
if ($scheme != "https") {
return 301 https://$host$request_uri;
}
resolver 127.0.0.11 valid=30s;
server_tokens off;
proxy_set_header X-Forwarded-For $remote_addr;
location / {
set $upstream seafile;
proxy_pass http://$upstream;
proxy_read_timeout 310s;
proxy_set_header Host $host;
proxy_set_header Scheme $scheme;
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-Forwarded-Host $host;
proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection '';
proxy_set_header Connection 'upgrade';
proxy_redirect off;
proxy_http_version 1.1;
client_max_body_size 0;
}
### moved the below stuff into seafile's own nginx file :(
# location /notification/ping {
# set $upstream notification_server;
# proxy_pass http://$upstream:8083/ping;
# }
# location /notification {
# set $upstream notification_server;
# proxy_pass http://$upstream:8083/;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# # proxy_set_header Upgrade 'websocket';
# proxy_set_header Connection 'upgrade';
# }
# location /sdoc-server/ {
# set $upstream seadoc;
# proxy_pass http://$upstream/;
# proxy_redirect off;
# proxy_set_header Host $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-Host $server_name;
# client_max_body_size 100m;
# }
# location /socket.io {
# set $upstream seadoc;
# proxy_pass http://$upstream;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection 'upgrade';
# proxy_redirect off;
# proxy_buffers 8 32k;
# proxy_buffer_size 64k;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header Host $http_host;
# proxy_set_header X-NginX-Proxy true;
# }
}