Cronicle icon indicating copy to clipboard operation
Cronicle copied to clipboard

Add support for subdirectory in reverse proxy

Open gsahbi opened this issue 4 years ago • 3 comments

Add support for running the app behind a reverse proxy.

Example : https://proxy/c/

gsahbi avatar Aug 08 '20 22:08 gsahbi

That should be doable. If you using nginx you can try below config. The trick is to add additional config for socket.io

  location /scheduler/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection "upgrade";
        proxy_pass          http://localhost:3012/;

  }


  location /socket.io/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection "upgrade";

    proxy_pass          http://localhost:3012/socket.io/;
  }

mikeTWC1984 avatar Aug 17 '20 23:08 mikeTWC1984

That should be doable. If you using nginx you can try below config. The trick is to add additional config for socket.io

  location /scheduler/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection "upgrade";
        proxy_pass          http://localhost:3012/;

  }


  location /socket.io/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection "upgrade";

    proxy_pass          http://localhost:3012/socket.io/;
  }

I have exactly the same configuration but unfortunately it does not work :(

Here is my nginx configuration

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    server_name ***;
    location /wssh/ {
        ....
    }
    location /jupyterhub {
        proxy_pass http://127.0.0.1:8889;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # websocket headers
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_buffering off;
    }
    }
    location /cronicle/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection "Upgrade";
        proxy_pass                              http://localhost:3012/;
    }
    location /socket.io/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection "Upgrade";
        proxy_pass                              http://localhost:3012/socket.io/;
}

    listen 443 ssl; # managed by Certbot
    ssl_certificate **; # managed by Certbot
    ssl_certificate_key ***; # managed by Certbot
    include **; # managed by Certbot
    ssl_dhparam **; # managed by Certbot

}
server {
    if ($host = ***) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    listen 80;
    server_name ***;
    return 404; # managed by Certbot
}

Cronicle is running on http://127.0.0.1:3012/. If I navigate to host/cronicle I get this page (not a 404, that is a start)

Screen Shot 2020-12-12 at 15 18 47

guidocioni avatar Dec 12 '20 14:12 guidocioni

Ok I resolved adding two additional blocks for /api/ and /images/. Seems like all the request now return valid urls. Hope there are no more sublink to reverse proxy.

    location /api/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_buffering                         off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection $connection_upgrade;
        proxy_pass                              http://localhost:3012/api/;
    }
    location /images/ {
        client_max_body_size                    2048m;
        proxy_read_timeout                      86400s;
        proxy_send_timeout                      86400s;
        proxy_set_header                        X-Forwarded-Host $host;
        proxy_set_header                        X-Forwarded-Server $host;
        proxy_set_header                        X-Real-IP $remote_addr;
        proxy_set_header                        Host $host;
        proxy_set_header                        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version                      1.1;
        proxy_redirect                          off;
        proxy_buffering                         off;
        proxy_set_header                        Upgrade $http_upgrade;
        proxy_set_header                        Connection $connection_upgrade;
        proxy_pass                              http://localhost:3012/images/;
    }

guidocioni avatar Dec 12 '20 14:12 guidocioni