solara
solara copied to clipboard
solara websocket fails when deployed behind two nginx proxies
I am trying to deploy Solara via FastAPI using nginx. Due to the nature of things, it is behind two proxies. I'm running into issues where the solara mount loads but the websocket connection to the kernel fails to load any of the content. Solara perptually displays a spinning "Loading app".
The browser console displays
rootPath /valis/solara [solara:495:17](https://api.sdss.org/valis/solara/)
solara init solara-main undefined [solara:633:13](https://api.sdss.org/valis/solara/)
Starting WebSocket: wss://api.sdss.org/valis/solara/jupyter/api/kernels/bf44100d-d4aa-47ad-976f-98bec8caaf00 [default.js:66:20](webpack://widgetti/solara-widget-manager8/node_modules/@jupyterlab/services/lib/kernel/default.js)
GET
wss://api.sdss.org/valis/solara/jupyter/api/kernels/bf44100d-d4aa-47ad-976f-98bec8caaf00/channels?session_id=33b7d8b8-f73c-4941-a997-c8a1779ee66a
Firefox can’t establish a connection to the server at wss://api.sdss.org/valis/solara/jupyter/api/kernels/bf44100d-d4aa-47ad-976f-98bec8caaf00/channels?session_id=33b7d8b8-f73c-4941-a997-c8a1779ee66a. [default.js:73:23](webpack://widgetti/solara-widget-manager8/node_modules/@jupyterlab/services/lib/kernel/default.js)
XHRGET
https://api.sdss.org/valis/solara/jupyter/api/kernels/bf44100d-d4aa-47ad-976f-98bec8caaf00?1716232215115
[HTTP/1.1 404 Not Found 87ms]
The network tab gives a 404 error on /valis/solara/jupyter/api/kernels/bf44100d-d4aa-47ad-976f-98bec8caaf00
and a 403 Forbidden error on /valis/solara/jupyter/api/kernels/bf44100d-d4aa-47ad-976f-98bec8caaf00/channels?session_id=xxx
with a NS_ERROR_WEBSOCKET_CONNECTION_REFUSED
note.
If I expose the first proxy, and navigate to the site, everything works correctly. I'm wondering if something is wrong with our second proxy setup? The SOLARA_ROOT_PATH
envvar is set to /valis/solara/
. We're also setting UVICORN_PROXY_HEADERS=1
and FORWARDED_ALLOW_IPS="*"
. Do y'all have any ideas on what could be going wrong or what is missing from our nginx setup?
Our first proxy nginx setup
location /valis {
proxy_pass http://valis;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Other headers
proxy_set_header Host $http_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_connect_timeout 86400;
proxy_read_timeout 86400;
}
# Solara WebSocket support
location /valis/solara/jupyter/ {
proxy_pass http://valis;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Other headers
proxy_set_header Host $http_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_connect_timeout 86400;
proxy_read_timeout 86400;
}
Our second proxy nginx setup
location /valis {
proxy_pass http://dataviz-vm.sdss.utah.edu/valis;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Other headers
proxy_set_header Host $http_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_set_header X-Script-Name /valis;
proxy_connect_timeout 86400;
proxy_read_timeout 86400;
}
# Solara WebSocket support
location /valis/solara/jupyter/ {
proxy_pass http://dataviz-vm.sdss.utah.edu/valis;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Other headers
proxy_set_header Host $http_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_set_header X-Script-Name /valis/solara/jupyter/;
proxy_connect_timeout 86400;
proxy_read_timeout 86400;
}