1 year ago

#377662

test-img

arod

Proxying shiny-server through Django and nginx

I'm running a docker containerized django app with nginx as a reverse proxy and want to include several shiny apps I've inherited. I want django to sit between shiny-server (which serves the apps) and the client (i.e. NOT reverse proxy certain urls directly to shiny-server). However shiny-server seems to be trying to use some kind of websocket and hence while some elements of the ui render properly, the main files (leaflet maps, plots etc) don't. Instead I get a gray overlay. The console displays some cryptic error messages i.e. Connection closed. Info: {"isTrusted":false}. My nginx configuration is as follows:

    #Connect to upstream shiny apps server
upstream shiny {
    server shiny:80;
}

#Connect upstream django server via uWSGI
upstream django {
    server django:8001;
}

#Required for shiny's WebSockets

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

server {
    listen 80;
    server_name 127.0.0.1;
    resolver 127.0.0.11;

    #Production settings
    #listen 8000;
    #server_name  195.134.90.182;

    charset utf-8;
    client_max_body_size 100M;

    #Serve django's media (Not Implemented)
    location /media/ {
        alias /var/www/media;
    }


    location /static/ {
        alias /var/www/static;
    }


    location / {
        proxy_http_version 1.1;  # you need to set this in order to use params below.
        proxy_pass http://django;
        proxy_set_header X-forwarded-FOR $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        # include /usr/src/wastewater_app/uwsgi_params;
        proxy_temp_file_write_size 64k;
        proxy_connect_timeout 100800s;
        proxy_send_timeout 100800;
        proxy_read_timeout 100800;
        proxy_buffer_size 64k;
        proxy_buffers 16 32k;
        proxy_busy_buffers_size 64k;
        proxy_redirect off;
        proxy_request_buffering off;
        proxy_buffering off;
        keepalive_timeout 650000;
    }

    #Proxy shiny requests to shiny-server
    location ~* /shiny/(.+) {
        rewrite ^/shiny/(.*)$ /$1 break;
        proxy_pass http://shiny/$1/;
        proxy_redirect http://shiny/ $scheme://$host/shiny/;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 100800s;
        proxy_send_timeout 100800;
        proxy_read_timeout 100800;
        keepalive_timeout 650000;
        # required for WebSockets
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        
    }

    location /__sockjs__/{
        proxy_pass http://shiny/;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 100800s;
        proxy_send_timeout 100800;
        proxy_read_timeout 100800;
        keepalive_timeout 650000;
    }
    location /ws {
        proxy_pass http://shiny/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_connect_timeout 100800s;
        proxy_send_timeout 100800;
        proxy_read_timeout 100800;
        keepalive_timeout 650000;
        }

I've also tried disabling sockets via:

#shiny-server.conf
sanitize_errors off;
disable_protocols websocket xdr-streaming xhr-streaming iframe-eventsource iframe-   htmlfile;

However the problem persists.I've tried pretty much every solution suggested on the web and several permutations thereof but none have worked for this case. Open to any and all suggestions (please note I'm not familiar with websockets)

r

django

nginx

shiny

shiny-server

0 Answers

Your Answer

Accepted video resources