"Load doc content error"

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;
    # }
}
2 Likes