StreamLit behind Nginx behind reverse proxy (load balancer)

Viewed 385

I have a Docker app running on an Nginx webserver, that works fine connecting directly to the webserver. However, the webserver is behind a separate Nginx reverse proxy server (functioning as WAF, load balancer, and in some cases directs path specific requests to different servers - as in this specific case).

The internal server config, which works if I connect directly to this server, look like:

  # redirect without the trailing slash because the author did not include the full path in the Docker app
  location /apppath/editor {
    return 302 /apppath/editor/;
  }
  location /apppath/editor/ {

        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-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_pass http://0.0.0.0:8501/editor/;
  }
  location /apppath {
    alias /var/www/dockerapp;
    try_files $uri $uri/ =404;
  }

I could not find examples of multiple levels of reverse proxy for a websocket app, so I have tried countless variations, but the public (LB/WAF) config currently looks like:

  location /apppath {
    #proxy_set_header X-Real-IP $remote_addr;
    #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #proxy_headers_hash_bucket_size 128;
    #proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    #proxy_buffering off;
    #proxy_set_header Forwarded "for=$proxy_add_x_forwarded_for;proto=$scheme";
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    #proxy_set_header Referer $http_referer;
    proxy_pass  https://10.0.6.13:443;
  }

From the public location, requests to /apppath/pages.html work fine, but when I attempt to hit /apppath/editor/ I see only "Please wait..." with the "Made with Streamlit" tag at the bottom.

My browser shows repeated requests for /apppath/editor/healthz and the console is full of:

WebsocketConnection WebSocket onerror
Uncaught Error: Unsupported state transition
State: PINGING_SERVER
Event: CONNECTION_TIMED_OUT
...
0 Answers
Related