JupyterHub starts successfully but shows "Not Found" at http://<host>:8000 (ConfigurableHTTPProxy 404 + ECONNREFUSED)

I’m deploying JupyterHub 5.2.1 on an Ubuntu 24.04 LTS GPU server using pyenv + pip. Everything installs correctly, and the server appears to start successfully. However, accessing http://<server-ip>:8000/ in a browser only shows “Not Found”

And the logs consistently show:

[ConfigProxy] error: 404 GET /
[ConfigProxy] error: Failed to get custom error page: Error: connect ECONNREFUSED 127.0.0.1:8081

It seems the proxy starts, but the Hub is not listening on port 8081.

Environment

  • OS: Ubuntu 24.04
  • Python: 3.11.9 (via pyenv)
  • JupyterHub: 5.2.1 (installed via pip)
  • JupyterLab: 4.3.6
  • Node.js: 22.14.0 (via nvm)
  • configurable-http-proxy: 4.6.3 (installed via npm)
  • Browser access URL: http://172.16.8.73:8000/
  • JupyterHub is started manually with a config file

Configuration (jupyterhub_config.py)

c = get_config()
c.JupyterHub.bind_url = 'http://0.0.0.0:8000'
c.JupyterHub.hub_bind_url = 'http://127.0.0.1:8081'
c.JupyterHub.hub_connect_url = 'http://127.0.0.1:8081'
c.Authenticator.allow_all = True
c.Spawner.default_url = '/lab'

Startup Command

jupyterhub -f ~/jupyterhub_config.py --debug

Logs (truncated, sensitive info removed)

[I JupyterHub app:3346] Running JupyterHub version 5.2.1
[I JupyterHub app:3376] Using Proxy: jupyterhub.proxy.ConfigurableHTTPProxy-5.2.1
[I JupyterHub proxy:752] Starting proxy @ http://0.0.0.0:8000
[ConfigProxy] info: Proxying http://0.0.0.0:8000 to (no default)
[ConfigProxy] info: Proxy API at http://127.0.0.1:8001/api/routes
[ConfigProxy] error: 404 GET /
[ConfigProxy] error: Failed to get custom error page: Error: connect ECONNREFUSED 127.0.0.1:8081

Things I Have Verified

  • Python + JupyterHub + JupyterLab are installed and working in a pyenv-managed virtualenv.
  • configurable-http-proxy is installed and correctly in the PATH.
  • Port 8000 is reachable from the browser.
  • Port 8081 is not responding (curl http://127.0.0.1:8081 fails).
  • No other processes are using port 8081.

Question

  • Why is the Hub backend not listening on port 8081?
  • Is there any known issue with hub_bind_url or hub_connect_url in JupyterHub 5.2.1?
  • How should I further debug this “404 GET /” + “ECONNREFUSED 127.0.0.1:8081” issue?

Any help or insights would be greatly appreciated!

Make sure to include logs up to and including “JupyterHub is now running at…”. Until then JupyterHub should not be expected to respond to http requests (e.g. you may see ECONNREFUSED from the proxy).

If it never gets there, it’s stuck somewhere, so please make sure to include more of the debug logs.