jupyterhub redirect issue

Created on 13 Sep 2016  Â·  42Comments  Â·  Source: jupyterhub/jupyterhub

I am having issues with jupyterhub public port not working and the private port not being able to redirect the page to jupyter-single notebook after login.

If I define ports as:

Private port:

c.JupyterHub.hub_port = 8089

Public port:

c.JupyterHub.port = 8090

and open this url: http://127.0.0.1:8090/ on the node I get white screen "The connection was reset" but if I use the http://127.0.0.1:8089 (which I should not), it lets me log in but then does not redirect.

I am attaching my jupyterhub config file and the output I get in my terminal. Any help will be greatly appreciated!

Here is my config file (it's a big one, so my apologies for that):
$ more jupyterhub_config.py

# Configuration file for jupyterhub.
c = get_config()
#This is just an experiment
#import nbextensions
#End of experiment
import os
pjoin = os.path.join

#runtime_dir = os.path.join('~/.conda/envs/jupyterhub2/bin/jupyterhub')
runtime_dir = os.path.join('/userhome/username1/Work/Jupyterhub')
##ssl_dir = pjoin(runtime_dir, 'ssl')
ssl_dir = runtime_dir
if not os.path.exists(ssl_dir):
    os.makedirs(ssl_dir)

# https on :443
###c.JupyterHub.port = 80880
c.JupyterHub.ssl_key = pjoin(ssl_dir, 'ca.key')
c.JupyterHub.ssl_cert = pjoin(ssl_dir, 'ca.crt')

# put the JupyterHub cookie secret and state db
# in /var/run/jupyterhub
c.JupyterHub.cookie_secret_file = pjoin(runtime_dir, 'cookie_secret')
c.JupyterHub.db_url = pjoin(runtime_dir, 'jupyterhub.sqlite')
# or `--db=/path/to/jupyterhub.sqlite` on the command-line

#########################Original config start from here on:####################
#c.JupyterHub.ssl_key = '/userhome/username1/Work/Jupyterhub/ca.key'
#c.JupyterHub.ssl_cert = '/userhome/username1/Work/Jupyterhub/ca.crt'

###c.JupyterHub.port = 44223
######Private port:
c.JupyterHub.hub_port = 8089

#c.JupyterHub.hup_ip = 127.0.0.1
######Public port:
c.JupyterHub.port = 8090
# c.JupyterHub.proxy_api_port = 0
# c.JupyterHub.statsd_port = 8125
# This should be the full Error! Hyperlink reference not valid.

#------------------------------------------------------------------------------
# Configurable configuration
#------------------------------------------------------------------------------

#------------------------------------------------------------------------------
# LoggingConfigurable configuration
#------------------------------------------------------------------------------

# A parent class for Configurables that log.
#
# Subclasses have a log trait, and the default behavior is to get the logger
# from the currently running Application.

#------------------------------------------------------------------------------
# SingletonConfigurable configuration
#------------------------------------------------------------------------------

# A configurable that only allows one instance.
#
# This class is for classes that should only have one instance of itself or
# *any* subclass. To create and retrieve such a class use the
# :meth:`SingletonConfigurable.instance` method.

#------------------------------------------------------------------------------
# Application configuration
#------------------------------------------------------------------------------

# This is an application.

# The date format used by logging formatters for %(asctime)s
#c.Application.log_datefmt = '%Y-%m-%d %H:%M:%S'

# The Logging format template
#c.Application.log_format = '[%(name)s]%(highlevel)s %(message)s'

# Set the log level by value or name.
#c.Application.log_level = 30

#------------------------------------------------------------------------------
# JupyterHub configuration
#------------------------------------------------------------------------------

# An Application for starting a Multi-User Jupyter Notebook server.

# Grant admin users permission to access single-user servers.
#
# Users should be properly informed if this is enabled.
# c.JupyterHub.admin_access = False

# DEPRECATED, use Authenticator.admin_users instead.
# c.JupyterHub.admin_users = set()

# Answer yes to any questions (e.g. confirm overwrite)
# c.JupyterHub.answer_yes = False

# Dict of token:username to be loaded into the database.
#
# Allows ahead-of-time generation of API tokens for use by services.
# c.JupyterHub.api_tokens = {}

# Class for authenticating users.
#
# This should be a class with the following form:
#
# - constructor takes one kwarg: `config`, the IPython config object.
#
# - is a tornado.gen.coroutine
# - returns username on success, None on failure
# - takes two arguments: (handler, data),
#   where `handler` is the calling web.RequestHandler,
#   and `data` is the POST form data from the login page.
# c.JupyterHub.authenticator_class = 'jupyterhub.auth.PAMAuthenticator'
c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator'
c.LDAPAuthenticator.server_address = 'nihdcadhub.nih.gov'
c.LDAPAuthenticator.bind_dn_template = 'CN={username},OU=Users,OU=xxxxx,OU=xxx,OU=xx,DC=xxx,DC=xxx'
#c.LDAPAuthenticator.allowed_groups = ['CN=xxxxx OEB All,OU=Groups,OU=xxxxx,OU=xxx,OU=xx,DC=xxx,DC=xxx']
###c.LDAPAuthenticator.use_ssl = False
###c.LDAPAuthenticator.lookup_dn = True
# Active Directory
###c.LDAPAuthenticator.user_attribute = 'sAMAccountName'
# OpenLDAP
###c.LDAPAuthenticator.user_attribute = 'uid'

# The base URL of the entire application
###c.JupyterHub.base_url = 'http://127.0.0.1:8088/hub'

# Whether to shutdown the proxy when the Hub shuts down.
#
# Disable if you want to be able to teardown the Hub while leaving the proxy
# running.
#
# Only valid if the proxy was starting by the Hub process.
#
# If both this and cleanup_servers are False, sending SIGINT to the Hub will
# only shutdown the Hub, leaving everything else running.
#
# The Hub should be able to resume from database state.
c.JupyterHub.cleanup_proxy = True

# Whether to shutdown single-user servers when the Hub shuts down.
#
# Disable if you want to be able to teardown the Hub while leaving the single-
# user servers running.
#
# If both this and cleanup_proxy are False, sending SIGINT to the Hub will only
# shutdown the Hub, leaving everything else running.
#
# The Hub should be able to resume from database state.
c.JupyterHub.cleanup_servers = True

# The config file to load
c.JupyterHub.config_file = '/userhome/username1/Work/Jupyterhub/jupyterhub_config.py'

# Confirm that JupyterHub should be run without SSL. This is **NOT RECOMMENDED**
# unless SSL termination is being handled by another layer.
# c.JupyterHub.confirm_no_ssl = False

# Number of days for a login cookie to be valid. Default is two weeks.
# c.JupyterHub.cookie_max_age_days = 14

# The cookie secret to use to encrypt cookies.
#
# Loaded from the JPY_COOKIE_SECRET env variable by default.
# c.JupyterHub.cookie_secret = b''

# File in which to store the cookie secret.
# c.JupyterHub.cookie_secret_file = 'jupyterhub_cookie_secret'

# The location of jupyterhub data files (e.g. /usr/local/share/jupyter/hub)
###c.JupyterHub.data_files_path = '/userhome/username1/.conda/envs/jupyterhub2'

# Include any kwargs to pass to the database connection. See
# sqlalchemy.create_engine for details.
# c.JupyterHub.db_kwargs = {}

# url for the database. e.g. `sqlite:///jupyterhub.sqlite`
# c.JupyterHub.db_url = 'sqlite:///jupyterhub.sqlite'

# log all database transactions. This has A LOT of output
# c.JupyterHub.debug_db = False

# show debug output in configurable-http-proxy
c.JupyterHub.debug_proxy = True

# Send JupyterHub's logs to this file.
#
# This will *only* include the logs of the Hub itself, not the logs of the proxy
# or any single-user servers.
# c.JupyterHub.extra_log_file = ''
# put the log file in /var/log
###c.JupyterHub.extra_log_file = '/var/log/jupyterhub.log'
c.JupyterHub.extra_log_file = '/userhome/username1/Work/Jupyterhub/jupyterhub.log'

# Extra log handlers to set on JupyterHub logger
# c.JupyterHub.extra_log_handlers = []

# Generate default config file
# c.JupyterHub.generate_config = False

# The ip for this process
# c.JupyterHub.hub_ip = '127.0.0.1'

# The port for this process
# c.JupyterHub.hub_port = 8081

# The prefix for the hub server. Must not be '/'
###c.JupyterHub.hub_prefix = '/userhome'

# The public facing ip of the whole application (the proxy)
# c.JupyterHub.ip = ''

# Supply extra arguments that will be passed to Jinja environment.
# c.JupyterHub.jinja_environment_options = {}

# Interval (in seconds) at which to update last-activity timestamps.
# c.JupyterHub.last_activity_interval = 300

# Specify path to a logo image to override the Jupyter logo in the banner.
# c.JupyterHub.logo_file = ''

# File to write PID Useful for daemonizing jupyterhub.
# c.JupyterHub.pid_file = ''

# The public facing port of the proxy
# c.JupyterHub.port = 8000

# The ip for the proxy API handlers
# c.JupyterHub.proxy_api_ip = '127.0.0.1'

# The port for the proxy API handlers
# c.JupyterHub.proxy_api_port = 0

# The Proxy Auth token.
#
# Loaded from the CONFIGPROXY_AUTH_TOKEN env variable by default.
# c.JupyterHub.proxy_auth_token = ''
c.JupyterHub.proxy_auth_token = 'blah-blah-blah'

# Interval (in seconds) at which to check if the proxy is running.
# c.JupyterHub.proxy_check_interval = 30

# The command to start the http proxy.
#
# Only override if configurable-http-proxy is not on your PATH
###c.JupyterHub.proxy_cmd = ['configurable-http-proxy']

# Purge and reset the database.
# c.JupyterHub.reset_db = False

# The class to use for spawning single-user servers.
#
# Should be a subclass of Spawner.
###c.JupyterHub.spawner_class = 'jupyterhub.spawner.LocalProcessSpawner'
c.JupyterHub.spawner_class = 'sudospawner.SudoSpawner'
# Path to SSL certificate file for the public facing interface of the proxy
#
# Use with ssl_key
# c.JupyterHub.ssl_cert = ''

# Path to SSL key file for the public facing interface of the proxy
#
# Use with ssl_cert
# c.JupyterHub.ssl_key = ''

# Host to send statds metrics to
# c.JupyterHub.statsd_host = ''

# Port on which to send statsd metrics about the hub
# c.JupyterHub.statsd_port = 8125

# Prefix to use for all metrics sent by jupyterhub to statsd
# c.JupyterHub.statsd_prefix = 'jupyterhub'

# Run single-user servers on subdomains of this host.
#
# This should be the full Error! Hyperlink reference not valid.
#
# Provides additional cross-site protections for javascript served by single-
# user servers.
#
# Requires <username>.hub.domain.tld to resolve to the same host as
# hub.domain.tld.
#
# In general, this is most easily achieved with wildcard DNS.
#
# When using SSL (i.e. always) this also requires a wildcard SSL certificate.
# c.JupyterHub.subdomain_host = ''

# Paths to search for jinja templates.
# c.JupyterHub.template_paths = []

# Extra settings overrides to pass to the tornado application.
# c.JupyterHub.tornado_settings = {}

#------------------------------------------------------------------------------
# Spawner configuration
#------------------------------------------------------------------------------

# Base class for spawning single-user notebook servers.
#
# Subclass this, and override the following methods:
#
# - load_state - get_state - start - stop - poll

# Extra arguments to be passed to the single-user server
# c.Spawner.args = []
###c.Spawner.args = ['--NotebookApp.default_url=/notebooks/Welcome.ipynb']
# The command used for starting notebooks.
c.SudoSpawner.sudospawner_path = '/userhome/username1/.conda/envs/jupyterhub2/bin/sudospawner'
c.Spawner.cmd = ['jupyterhub-singleuser']

# Enable debug-logging of the single-user server
c.Spawner.debug = True

# The default URL for the single-user server.
#
# Can be used in conjunction with --notebook-dir=/ to enable  full filesystem
# traversal, while preserving user's homedir as landing page for notebook
#
# `%U` will be expanded to the user's username
###c.Spawner.default_url = '/userhome/`%U`'

# Disable per-user configuration of single-user servers.
#
# This prevents any config in users' $HOME directories from having an effect on
# their server.
c.Spawner.disable_user_config = False

# Whitelist of environment variables for the subprocess to inherit
c.Spawner.env_keep = ['PATH', 'PYTHONPATH', 'CONDA_ROOT', 'CONDA_DEFAULT_ENV', 'VIRTUAL_ENV', 'LANG', 'L
C_ALL']

# Environment variables to load for the Spawner.
#
# Value could be a string or a callable. If it is a callable, it will be called
# with one parameter, which will be the instance of the spawner in use. It
# should quickly (without doing much blocking operations) return a string that
# will be used as the value for the environment variable.
# c.Spawner.environment = {}

# Timeout (in seconds) before giving up on a spawned HTTP server
#
# Once a server has successfully been spawned, this is the amount of time we
# wait before assuming that the server is unable to accept connections.
# c.Spawner.http_timeout = 30

# The IP address (or hostname) the single-user server should listen on
###c.Spawner.ip = '127.0.0.1'

# The notebook directory for the single-user server
#
# `~` will be expanded to the user's home directory `%U` will be expanded to the
# user's username
c.Spawner.notebook_dir = '~/notebooks'
###c.Spawner.args = ['--NotebookApp.default_url=/notebooks/Welcome.ipynb']
# An HTML form for options a user can specify on launching their server. The
# surrounding `<form>` element and the submit button are already provided.
#
# For example:
#
#     Set your key:
#     <input name="key" val="default_key"></input>
#     <br>
#     Choose a letter:
#     <select name="letter" multiple="true">
#       <option value="A">The letter A</option>
#       <option value="B">The letter B</option>
#     </select>
# c.Spawner.options_form = ''

# Interval (in seconds) on which to poll the spawner.
# c.Spawner.poll_interval = 30

# Timeout (in seconds) before giving up on the spawner.
#
# This is the timeout for start to return, not the timeout for the server to
# respond. Callers of spawner.start will assume that startup has failed if it
# takes longer than this. start should return when the server process is started
# and its location is known.
# c.Spawner.start_timeout = 60

#------------------------------------------------------------------------------
# LocalProcessSpawner configuration
#------------------------------------------------------------------------------

# A Spawner that just uses Popen to start local processes as users.
#
# Requires users to exist on the local system.
#
# This is the default spawner for JupyterHub.

# Seconds to wait for process to halt after SIGINT before proceeding to SIGTERM
#c.LocalProcessSpawner.INTERRUPT_TIMEOUT = 10

# Seconds to wait for process to halt after SIGKILL before giving up
#c.LocalProcessSpawner.KILL_TIMEOUT = 5

# Seconds to wait for process to halt after SIGTERM before proceeding to SIGKILL
#c.LocalProcessSpawner.TERM_TIMEOUT = 5

#------------------------------------------------------------------------------
# Authenticator configuration
#------------------------------------------------------------------------------

# A class for authentication.
#
# The primary API is one method, `authenticate`, a tornado coroutine for
# authenticating users.

# set of usernames of admin users
#
# If unspecified, only the user that launches the server will be admin.
c.Authenticator.admin_users = set(['username1'])

# Dictionary mapping authenticator usernames to JupyterHub users.
#
# Can be used to map OAuth service names to local users, for instance.
#
# Used in normalize_username.
# c.Authenticator.username_map = {}

# Regular expression pattern for validating usernames.
#
# If not defined: allow any username.
# c.Authenticator.username_pattern = ''

# Username whitelist.
#
# Use this to restrict which users can login. If empty, allow any user to
# attempt login.
# c.Authenticator.whitelist = set()

#------------------------------------------------------------------------------
# LocalAuthenticator configuration
#------------------------------------------------------------------------------

# Base class for Authenticators that work with local Linux/UNIX users
#
# Checks for local users, and can attempt to create them if they exist.

# The command to use for creating users as a list of strings.
#
# For each element in the list, the string USERNAME will be replaced with the
# user's username. The username will also be appended as the final argument.
#
# For Linux, the default value is:
#
#     ['adduser', '-q', '--gecos', '""', '--disabled-password']
#
# To specify a custom home directory, set this to:
#
#     ['adduser', '-q', '--gecos', '""', '--home', '/customhome/USERNAME', '--
# disabled-password']
#
# This will run the command:
#
# adduser -q --gecos "" --home /customhome/river --disabled-password river
#
# when the user 'river' is created.
c.LocalAuthenticator.add_user_cmd = ['adduser', '-q', '--gecos', '""', '--home', '/customhome/USERNAME',
 '--disabled-password']

# If a user is added that doesn't exist on the system, should I try to create
# the system user?
c.LocalAuthenticator.create_system_users = True

# Automatically whitelist anyone in this group.
# c.LocalAuthenticator.group_whitelist = set()

#------------------------------------------------------------------------------
# PAMAuthenticator configuration
#------------------------------------------------------------------------------

# Authenticate local Linux/UNIX users with PAM

# The encoding to use for PAM
#c.PAMAuthenticator.encoding = 'utf8'

# Whether to open PAM sessions when spawners are started.
#
# This may trigger things like mounting shared filsystems, loading credentials,
# etc. depending on system configuration, but it does not always work.
#
# It can be disabled with::
#
#c.PAMAuthenticator.open_sessions = False
#c.PAMAuthenticator.open_sessions = True

# The PAM service to use for authentication.
#c.PAMAuthenticator.service = 'login'

Here is the output:

$ jupyterhub -f /userhome/username1/Work/Jupyterhub/jupyterhub_config.py --debug
[D 2016-09-12 14:19:16.907 JupyterHub application:529] Looking for /userhome/username1/Work/Jupyterhub/jupyterhub_config in None
[D 2016-09-12 14:19:16.908 JupyterHub application:549] Loaded config file: /userhome/username1/Work/Jupyterhub/jupyterhub_config.py
[I 2016-09-12 14:19:16.974 JupyterHub app:622] Loading cookie_secret from /userhome/username1/Work/Jupyterhub/cookie_secret
[D 2016-09-12 14:19:16.974 JupyterHub app:694] Connecting to db: sqlite:////userhome/username1/Work/Jupyterhub/jupyterhub.sqlite
[I 2016-09-12 14:19:17.030 JupyterHub app:785] Not using whitelist. Any authenticated user will be allowed.
[D 2016-09-12 14:19:17.070 JupyterHub app:888] Loaded users:
    username1 admin
     username2
     username3
[I 2016-09-12 14:19:17.076 JupyterHub app:1231] Hub API listening on http://127.0.0.1:8089/hub/
[I 2016-09-12 14:19:17.079 JupyterHub app:968] Starting proxy @ http://*:8090/
[D 2016-09-12 14:19:17.079 JupyterHub app:969] Proxy cmd: ['configurable-http-proxy', '--ip', '', '--port', '8090', '--api-ip', '127.0.0.1', '--api-port', '8091', '--default-target', 'http://127.0.0.1:8089', '--error-target', 'http://127.0.0.1:8089/hub/error', '--log-level', 'debug', '--ssl-key', '/userhome/username1/Work/Jupyterhub/ca.key', '--ssl-cert', '/userhome/username1/Work/Jupyterhub/ca.crt']
14:19:17.257 - info: [ConfigProxy] Proxying https://*:8090 to http://127.0.0.1:8089
14:19:17.261 - info: [ConfigProxy] Proxy API at http://127.0.0.1:8091/api/routes
[D 2016-09-12 14:19:17.285 JupyterHub app:997] Proxy started and appears to be up
[I 2016-09-12 14:19:17.286 JupyterHub app:1254] JupyterHub is now running at http://127.0.0.1:8090/
[I 2016-09-12 14:20:34.809 JupyterHub log:100] 302 GET / (@127.0.0.1) 1.93ms
[I 2016-09-12 14:20:34.819 JupyterHub log:100] 302 GET /hub (@127.0.0.1) 0.55ms
[D 2016-09-12 14:20:34.830 JupyterHub pages:35] User is not running: /hub/home
[I 2016-09-12 14:20:34.835 JupyterHub log:100] 302 GET /hub/ ([email protected]) 3.93ms
[I 2016-09-12 14:20:34.873 JupyterHub log:100] 200 GET /hub/home ([email protected]) 32.74ms
[D 2016-09-12 14:20:34.896 JupyterHub log:100] 200 GET /hub/static/css/style.min.css?v=91c753d3c28f12b7480e5d0d9e7c55b2 (@127.0.0.1) 7.97ms
[D 2016-09-12 14:20:34.898 JupyterHub log:100] 200 GET /hub/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce (@127.0.0.1) 1.33ms
[D 2016-09-12 14:20:34.912 JupyterHub log:100] 200 GET /hub/logo (@127.0.0.1) 13.55ms
[D 2016-09-12 14:20:34.947 JupyterHub log:100] 200 GET /hub/static/components/font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0 (@127.0.0.1) 1.66ms
[D 2016-09-12 14:20:34.955 JupyterHub log:100] 200 GET /hub/static/js/home.js?v=(& (@127.0.0.1) 1.42ms
[D 2016-09-12 14:20:34.993 JupyterHub log:100] 200 GET /favicon.ico (@127.0.0.1) 11.15ms
[D 2016-09-12 14:20:35.000 JupyterHub log:100] 200 GET /hub/static/components/jquery/jquery.min.js?v=(& (@127.0.0.1) 1.50ms
[D 2016-09-12 14:20:35.001 JupyterHub log:100] 200 GET /hub/static/js/jhapi.js?v=(& (@127.0.0.1) 1.05ms
[D 2016-09-12 14:20:35.012 JupyterHub log:100] 304 GET /favicon.ico (@127.0.0.1) 1.01ms
[D 2016-09-12 14:20:35.026 JupyterHub log:100] 200 GET /hub/static/js/utils.js?v=(& (@127.0.0.1) 1.48ms
[I 2016-09-12 14:20:40.378 JupyterHub log:100] 302 GET /hub/spawn ([email protected]) 4.58ms
[I 2016-09-12 14:20:40.382 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.99ms
[I 160912 14:20:40 mediator:68] Spawning /userhome/username1/.conda/envs/jupyterhub2/bin/jupyterhub-singleuser --user=username1 --port=38610 --cookie-name=jupyter-hub-token-username1 --base-url=/user/username1 --hub-host= --hub-prefix=/hub/ --hub-api-url=http://127.0.0.1:8089/hub/api --ip=127.0.0.1 '--notebook-dir=~/notebooks' --debug
[D 2016-09-12 14:20:41.410 username1 application:178] Searching ['/userhome/username1', '/userhome/username1/.jupyter', '/userhome/username1/.conda/envs/jupyterhub2/etc/jupyter', '/usr/local/etc/jupyter', '/etc/jupyter'] for config files
[D 2016-09-12 14:20:41.411 username1 application:529] Looking for jupyter_config in /etc/jupyter
[D 2016-09-12 14:20:41.411 username1 application:529] Looking for jupyter_config in /usr/local/etc/jupyter
[D 2016-09-12 14:20:41.411 username1 application:529] Looking for jupyter_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[D 2016-09-12 14:20:41.411 username1 application:529] Looking for jupyter_config in /userhome/username1/.jupyter
[D 2016-09-12 14:20:41.411 username1 application:529] Looking for jupyter_config in /userhome/username1
[D 2016-09-12 14:20:41.412 username1 application:529] Looking for jupyter_notebook_config in /etc/jupyter
[D 2016-09-12 14:20:41.412 username1 application:529] Looking for jupyter_notebook_config in /usr/local/etc/jupyter
[D 2016-09-12 14:20:41.412 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[W 2016-09-12 14:20:41.413 username1 loader:419] Unrecognized JSON config file version, assuming version 1
[D 2016-09-12 14:20:41.413 username1 application:549] Loaded config file: /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter/jupyter_notebook_config.json
[D 2016-09-12 14:20:41.415 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.jupyter
[D 2016-09-12 14:20:41.415 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1
[D 2016-09-12 14:20:41.420 username1 manager:45] [nb_conda_kernels] refreshing conda info
[D 2016-09-12 14:20:41.737 JupyterHub spawner:316] Polling subprocess every 30s
Using Anaconda Cloud api site https://api.anaconda.org
[D 2016-09-12 14:20:41.797 username1 manager:145] [nb_conda_kernels] refreshing conda kernelspecs
[I 2016-09-12 14:20:41.800 username1 manager:32] [nb_conda_kernels] enabled, 7 kernels found
[I 2016-09-12 14:20:41.844 username1 handlers:290] [nb_conda] enabled
[I 2016-09-12 14:20:41.883 username1 handlers:73] [nb_anacondacloud] enabled
[I 2016-09-12 14:20:41.932 username1 __init__:35] âś“ nbpresent HTML export ENABLED
[I 2016-09-12 14:20:41.932 username1 __init__:46] âś“ nbpresent PDF export ENABLED
[I 2016-09-12 14:20:41.938 username1 notebookapp:1128] Serving notebooks from local directory: /userhome/username1/notebooks
[I 2016-09-12 14:20:41.938 username1 notebookapp:1128] 0 active kernels
[I 2016-09-12 14:20:41.938 username1 notebookapp:1128] The Jupyter Notebook is running at: http://127.0.0.1:38610/user/username1/
[I 2016-09-12 14:20:41.938 username1 notebookapp:1129] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 2016-09-12 14:20:41.941 username1 log:47] 302 GET /user/username1 (127.0.0.1) 0.66ms
[D 2016-09-12 14:20:41.942 JupyterHub utils:84] Server at http://127.0.0.1:38610/user/username1 responded with 302
[I 2016-09-12 14:20:41.943 JupyterHub base:306] User username1 server took 1.558 seconds to start
[I 2016-09-12 14:20:41.943 JupyterHub orm:159] Adding user username1 to proxy /user/username1 => http://127.0.0.1:38610
[D 2016-09-12 14:20:41.945 JupyterHub orm:146] Fetching POST http://127.0.0.1:8091/api/routes/user/username1
14:20:41.951 - debug: [ConfigProxy] POST /user/username1 user=username1, target=http://127.0.0.1:38610
[D 2016-09-12 14:20:41.954 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:41.963 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 1576.38ms
[I 2016-09-12 14:20:41.970 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.21ms
[D 2016-09-12 14:20:42.202 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:42.208 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 233.92ms
[I 2016-09-12 14:20:42.212 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.75ms
[D 2016-09-12 14:20:42.431 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:42.437 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 220.85ms
[I 2016-09-12 14:20:42.443 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.76ms
[D 2016-09-12 14:20:42.692 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:42.700 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 251.54ms
[I 2016-09-12 14:20:42.705 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.08ms
[D 2016-09-12 14:20:42.980 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:42.988 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 276.85ms
[I 2016-09-12 14:20:42.994 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.94ms
[D 2016-09-12 14:20:43.233 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:43.239 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 240.30ms
[I 2016-09-12 14:20:43.243 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.82ms
[D 2016-09-12 14:20:43.488 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:43.497 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 248.48ms
[I 2016-09-12 14:20:43.503 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.16ms
[D 2016-09-12 14:20:43.728 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:43.735 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 228.23ms
[I 2016-09-12 14:20:43.738 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.74ms
[D 2016-09-12 14:20:43.984 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:43.992 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 248.32ms
[I 2016-09-12 14:20:43.996 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.06ms
[D 2016-09-12 14:20:44.242 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:20:44.250 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 248.99ms
[I 2016-09-12 14:22:43.050 JupyterHub log:100] 302 GET / (@127.0.0.1) 1.54ms
[I 2016-09-12 14:22:43.052 JupyterHub log:100] 302 GET /hub (@127.0.0.1) 0.41ms
[D 2016-09-12 14:22:43.056 JupyterHub pages:31] User is running: /user/username1
[D 2016-09-12 14:22:43.057 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:43.062 JupyterHub log:100] 302 GET /hub/ ([email protected]) 5.81ms
[I 2016-09-12 14:22:43.070 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.08ms
[D 2016-09-12 14:22:43.310 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:43.317 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 242.31ms
[I 2016-09-12 14:22:43.321 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.95ms
[D 2016-09-12 14:22:43.568 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:43.576 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 250.24ms
[I 2016-09-12 14:22:43.581 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.07ms
[D 2016-09-12 14:22:43.825 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:43.831 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 246.42ms
[I 2016-09-12 14:22:43.835 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.84ms
[D 2016-09-12 14:22:44.054 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:44.060 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 221.38ms
[I 2016-09-12 14:22:44.063 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.74ms
[D 2016-09-12 14:22:44.292 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:44.298 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 231.44ms
[I 2016-09-12 14:22:44.302 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.72ms
[D 2016-09-12 14:22:44.540 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:44.549 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 241.75ms
[I 2016-09-12 14:22:44.553 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.01ms
[D 2016-09-12 14:22:44.793 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:44.803 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 243.02ms
[I 2016-09-12 14:22:44.811 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 1.22ms
[D 2016-09-12 14:22:45.093 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:45.100 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 284.35ms
[I 2016-09-12 14:22:45.105 JupyterHub log:100] 302 GET /user/username1 (@127.0.0.1) 0.85ms
[D 2016-09-12 14:22:45.370 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-12 14:22:45.376 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 262.32ms
[D 2016-09-12 14:24:17.296 JupyterHub orm:146] Fetching GET http://127.0.0.1:8091/api/routes
[D 2016-09-12 14:25:42.037 username1 jupyterhub-singleuser:211] Clearing cookie cache
[D 2016-09-12 14:29:17.295 JupyterHub orm:146] Fetching GET http://127.0.0.1:8091/api/routes
[D 2016-09-12 14:30:41.996 username1 jupyterhub-singleuser:211] Clearing cookie cache
[D 2016-09-12 14:34:17.295 JupyterHub orm:146] Fetching GET http://127.0.0.1:8091/api/routes
[D 2016-09-12 14:35:42.038 username1 jupyterhub-singleuser:211] Clearing cookie cache
[D 2016-09-12 14:39:17.296 JupyterHub orm:146] Fetching GET http://127.0.0.1:8091/api/routes
question

All 42 comments

@ponomarevsy Would you mind pasting your output into the issue message using ``` before and after the code block. It makes it easier to read and for us to help you troubleshoot. Alternatively a service like pastebin can be used to link to long pages of output.

Thanks, Carol! Does that look better (please see above)?

Looks good @ponomarevsy. Thanks.

I really don't see anything wrong there, but the key is probably in the 'connection reset', because that means the proxy cannot see the Hub. Can you run it without selecting any custom ports?

Can you also check the output of:

configurable-http-proxy --version
jupyterhub --version

?

Sadly, it does not let me run jupyterhub on the default port because it is already taken by a system's process: "Failed to bind hub to http://x.x.x.x:8081/hub/" and "OSError: [Errno 98] Address already in use"

sudo netstat -antup | grep :8081

tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 12148/cmd

$ configurable-http-proxy --version
1.3.0
$ jupyterhub --version
0.6.1

Try with:

c.JupyterHub.hub_port = 10101
c.JupyterHub.port = 20202

I think there might be something funky with the ports.

Hmmm... I get the same symptoms. On public port 20202:

"http://x.x.x.x:20202"
"Safari Can't Open the Page
Safari can't open the page "x.x.x.x:20202" because the server unexpectedly dropped the connection. This sometimes occurs when the server is busy. Wait for a few minutes, and then try again."

On private port 10101: "http://x.x.x.x:10101" gets redirected to "http://x.x.x.x:10101/hub/home"
with "Start My Server", "Admin", "Log Out" and "Jupyter" buttons.

If I click on "Start My Server" I get "Safari Can't Open The Page
Too many redirects occurred trying to open "http://x.x.x.x:10101/hub/user/username1. This might occur if you open a page that is redirected to open another page which is redirected to open the original page."

If I click on "Admin" it opens the admin page: "http://x.x.x.x:10101/hub/admin" showing one running server under admin user username1, and many green "start server" buttons for other users, etc.

If I click on "Log Out" that brings me back to the login page at: http://x.x.x.x:10101/hub/login

If I click on "Jupyter" I get the same "Safari Can't Open the Page" message at this url: "http://x.x.x.x:10101/hub/user/username1"

My output:

$ jupyterhub -f /userhome/username1/Work/Jupyterhub/jupyterhub_config.py --debug

[D 2016-09-15 09:07:21.665 JupyterHub application:529] Looking for /userhome/username1/Work/Jupyterhub/jupyterhub_config in None
[D 2016-09-15 09:07:21.666 JupyterHub application:549] Loaded config file: /userhome/username1/Work/Jupyterhub/jupyterhub_config.py
[I 2016-09-15 09:07:21.902 JupyterHub app:622] Loading cookie_secret from /userhome/username1/Work/Jupyterhub/cookie_secret
[D 2016-09-15 09:07:21.916 JupyterHub app:694] Connecting to db: sqlite:////userhome/username1/Work/Jupyterhub/jupyterhub.sqlite
[D 2016-09-15 09:07:22.081 JupyterHub app:888] Loaded users:
    username1 admin
     username2
    username3
[I 2016-09-15 09:07:22.087 JupyterHub app:1231] Hub API listening on http://x.x.x.x:10101/hub/
[I 2016-09-15 09:07:22.090 JupyterHub app:968] Starting proxy @ http://*:20202/
[D 2016-09-15 09:07:22.090 JupyterHub app:969] Proxy cmd: ['configurable-http-proxy', '--ip', '', '--port', '20202', '--api-ip', '127.0.0.1', '--api-port', '20203', '--default-target', 'http://x.x.x.x:10101', '--error-target', 'http:// x.x.x.x:10101/hub/error', '--log-level', 'debug', '--ssl-key', '/userhome/username1/Work/Jupyterhub/ca.key', '--ssl-cert', '/userhome/username1/Work/Jupyterhub/ca.crt']
09:07:22.363 - info: [ConfigProxy] Proxying https://*:20202 to http://x.x.x.x:10101
09:07:22.366 - info: [ConfigProxy] Proxy API at http://127.0.0.1:20203/api/routes
[D 2016-09-15 09:07:22.395 JupyterHub app:997] Proxy started and appears to be up
[I 2016-09-15 09:07:22.396 JupyterHub app:1254] JupyterHub is now running at http://127.0.0.1:20202/
[I 2016-09-15 09:08:54.455 JupyterHub log:100] 302 GET / (@y.y.y.y) 1.84ms
[I 2016-09-15 09:08:54.456 JupyterHub log:100] 302 GET /hub (@y.y.y.y) 0.30ms
[D 2016-09-15 09:08:54.461 JupyterHub pages:35] User is not running: /hub/home
[I 2016-09-15 09:08:54.465 JupyterHub log:100] 302 GET /hub/ ([email protected]) 3.07ms
[I 2016-09-15 09:08:54.539 JupyterHub log:100] 200 GET /hub/home ([email protected]) 69.43ms
[D 2016-09-15 09:08:54.557 JupyterHub log:100] 200 GET /hub/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce (@y.y.y.y) 1.70ms
[D 2016-09-15 09:08:54.557 JupyterHub log:100] 200 GET /hub/static/css/style.min.css?v=91c753d3c28f12b7480e5d0d9e7c55b2 (@y.y.y.y) 10.52ms
[D 2016-09-15 09:08:54.586 JupyterHub log:100] 200 GET /hub/logo (@y.y.y.y) 3.38ms
[D 2016-09-15 09:08:54.657 JupyterHub log:100] 200 GET /hub/static/components/font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0 (@y.y.y.y) 20.28ms
[D 2016-09-15 09:08:54.659 JupyterHub log:100] 200 GET /hub/static/js/home.js?v=(& (@y.y.y.y) 1.22ms
[D 2016-09-15 09:08:54.659 JupyterHub log:100] 200 GET /favicon.ico (@y.y.y.y) 31.35ms
[D 2016-09-15 09:08:54.679 JupyterHub log:100] 200 GET /hub/static/components/jquery/jquery.min.js?v=(& (@y.y.y.y) 11.59ms
[D 2016-09-15 09:08:54.681 JupyterHub log:100] 200 GET /hub/static/js/jhapi.js?v=(& (@y.y.y.y) 1.13ms
[D 2016-09-15 09:08:54.698 JupyterHub log:100] 200 GET /hub/static/js/utils.js?v=(& (@y.y.y.y) 1.40ms
[I 2016-09-15 09:09:24.273 JupyterHub log:100] 302 GET / (@y.y.y.y) 1.33ms
[I 2016-09-15 09:09:24.274 JupyterHub log:100] 302 GET /hub (@y.y.y.y) 0.32ms
[D 2016-09-15 09:09:24.278 JupyterHub pages:35] User is not running: /hub/home
[I 2016-09-15 09:09:24.282 JupyterHub log:100] 302 GET /hub/ ([email protected]) 2.93ms
[I 2016-09-15 09:09:24.293 JupyterHub log:100] 200 GET /hub/home ([email protected]) 5.89ms
[D 2016-09-15 09:12:22.442 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[I 2016-09-15 09:16:17.064 JupyterHub log:100] 302 GET /hub/spawn ([email protected]) 6.32ms
[I 2016-09-15 09:16:17.067 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.79ms
[I 160915 09:16:17 mediator:68] Spawning /userhome/username1/.conda/envs/jupyterhub2/bin/jupyterhub-singleuser --user=username1 --port=55400 --cookie-name=jupyter-hub-token-username1 --base-url=/user/username1 --hub-host= --hub-prefix=/hub/ --hub-api-url=http://x.x.x.x:10101/hub/api --ip=127.0.0.1 '--notebook-dir=~/notebooks' --debug
[D 2016-09-15 09:16:18.436 JupyterHub spawner:316] Polling subprocess every 30s
[D 2016-09-15 09:16:19.082 username1 application:178] Searching ['/userhome/username1', '/userhome/username1/.jupyter', '/userhome/username1/.conda/envs/jupyterhub2/etc/jupyter', '/usr/local/etc/jupyter', '/etc/jupyter'] for config files
[D 2016-09-15 09:16:19.083 username1 application:529] Looking for jupyter_config in /etc/jupyter
[D 2016-09-15 09:16:19.083 username1 application:529] Looking for jupyter_config in /usr/local/etc/jupyter
[D 2016-09-15 09:16:19.083 username1 application:529] Looking for jupyter_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[D 2016-09-15 09:16:19.084 username1 application:529] Looking for jupyter_config in /userhome/username1/.jupyter
[D 2016-09-15 09:16:19.084 username1 application:529] Looking for jupyter_config in /userhome/username1
[D 2016-09-15 09:16:19.085 username1 application:529] Looking for jupyter_notebook_config in /etc/jupyter
[D 2016-09-15 09:16:19.085 username1 application:529] Looking for jupyter_notebook_config in /usr/local/etc/jupyter
[D 2016-09-15 09:16:19.085 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[W 2016-09-15 09:16:19.085 username1 loader:419] Unrecognized JSON config file version, assuming version 1
[D 2016-09-15 09:16:19.086 username1 application:549] Loaded config file: /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter/jupyter_notebook_config.json
[D 2016-09-15 09:16:19.088 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.jupyter
[D 2016-09-15 09:16:19.089 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1
[D 2016-09-15 09:16:19.093 username1 manager:45] [nb_conda_kernels] refreshing conda info
Using Anaconda Cloud api site https://api.anaconda.org
[D 2016-09-15 09:16:19.991 username1 manager:145] [nb_conda_kernels] refreshing conda kernelspecs
[I 2016-09-15 09:16:20.010 username1 manager:32] [nb_conda_kernels] enabled, 7 kernels found
[I 2016-09-15 09:16:20.128 username1 __init__:35] âś“ nbpresent HTML export ENABLED
[I 2016-09-15 09:16:20.128 username1 __init__:46] âś“ nbpresent PDF export ENABLED
[I 2016-09-15 09:16:20.133 username1 handlers:290] [nb_conda] enabled
[I 2016-09-15 09:16:20.247 username1 handlers:73] [nb_anacondacloud] enabled
[I 2016-09-15 09:16:20.253 username1 notebookapp:1128] Serving notebooks from local directory: /userhome/username1/notebooks
[I 2016-09-15 09:16:20.253 username1 notebookapp:1128] 0 active kernels
[I 2016-09-15 09:16:20.253 username1 notebookapp:1128] The Jupyter Notebook is running at: http://127.0.0.1:55400/user/username1/
[I 2016-09-15 09:16:20.253 username1 notebookapp:1129] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 2016-09-15 09:16:20.306 username1 log:47] 302 GET /user/username1 (127.0.0.1) 0.63ms
[D 2016-09-15 09:16:20.307 JupyterHub utils:84] Server at http://127.0.0.1:55400/user/username1 responded with 302
[I 2016-09-15 09:16:20.307 JupyterHub base:306] User username1 server took 3.238 seconds to start
[I 2016-09-15 09:16:20.307 JupyterHub orm:159] Adding user username1 to proxy /user/username1 => http://127.0.0.1:55400
[D 2016-09-15 09:16:20.309 JupyterHub orm:146] Fetching POST http://127.0.0.1:20203/api/routes/user/username1
09:16:20.312 - debug: [ConfigProxy] POST /user/username1 target=http://127.0.0.1:55400, user=username1
[D 2016-09-15 09:16:20.314 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:20.321 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 3250.10ms
[I 2016-09-15 09:16:20.326 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.13ms
[D 2016-09-15 09:16:20.554 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:20.560 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 230.04ms
[I 2016-09-15 09:16:20.564 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.67ms
[D 2016-09-15 09:16:20.789 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:20.795 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 227.75ms
[I 2016-09-15 09:16:20.799 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.74ms
[D 2016-09-15 09:16:21.035 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:21.041 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 238.86ms
[I 2016-09-15 09:16:21.047 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.12ms
[D 2016-09-15 09:16:21.301 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:21.308 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 256.51ms
[I 2016-09-15 09:16:21.312 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.88ms
[D 2016-09-15 09:16:21.541 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:21.547 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 231.60ms
[I 2016-09-15 09:16:21.551 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.79ms
[D 2016-09-15 09:16:21.778 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:21.784 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 229.63ms
[I 2016-09-15 09:16:21.788 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.70ms
[D 2016-09-15 09:16:22.015 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:16:22.021 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 229.82ms
[D 2016-09-15 09:17:22.403 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[I 2016-09-15 09:20:01.211 JupyterHub log:100] 200 GET /hub/admin ([email protected]) 49.38ms
[D 2016-09-15 09:20:01.221 JupyterHub log:100] 200 GET /hub/static/js/admin.js?v=(& (@y.y.y.y) 1.91ms
[D 2016-09-15 09:20:01.261 JupyterHub log:100] 200 GET /hub/static/components/moment/moment.js?v=(& (@y.y.y.y) 27.54ms
[D 2016-09-15 09:20:01.262 JupyterHub log:100] 200 GET /hub/static/components/bootstrap/js/bootstrap.min.js?v=(& (@y.y.y.y) 10.80ms
[D 2016-09-15 09:21:20.353 username1 jupyterhub-singleuser:211] Clearing cookie cache
[D 2016-09-15 09:22:22.405 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-09-15 09:22:35.410 JupyterHub pages:31] User is running: /user/username1
[D 2016-09-15 09:22:35.411 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:35.417 JupyterHub log:100] 302 GET /hub/ ([email protected]) 8.01ms
[I 2016-09-15 09:22:35.420 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.89ms
[D 2016-09-15 09:22:35.729 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:35.736 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 311.53ms
[I 2016-09-15 09:22:35.741 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.87ms
[D 2016-09-15 09:22:36.004 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:36.011 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 266.16ms
[I 2016-09-15 09:22:36.014 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.72ms
[D 2016-09-15 09:22:36.270 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:36.276 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 257.82ms
[I 2016-09-15 09:22:36.281 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.73ms
[D 2016-09-15 09:22:36.508 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:36.514 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 229.47ms
[I 2016-09-15 09:22:36.518 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.81ms
[D 2016-09-15 09:22:36.769 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:36.778 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 254.20ms
[I 2016-09-15 09:22:36.783 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.17ms
[D 2016-09-15 09:22:37.029 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:37.036 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 248.09ms
[I 2016-09-15 09:22:37.039 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.75ms
[D 2016-09-15 09:22:37.266 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:37.272 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 229.11ms
[I 2016-09-15 09:22:37.276 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 0.68ms
[D 2016-09-15 09:22:37.518 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 09:22:37.524 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 243.61ms
[I 2016-09-15 09:24:50.450 JupyterHub login:17] User logged out: username1
[I 2016-09-15 09:24:50.457 JupyterHub log:100] 302 GET /hub/logout ([email protected]) 7.57ms
[I 2016-09-15 09:24:50.461 JupyterHub log:100] 302 GET /hub/ (@y.y.y.y) 0.68ms
[I 2016-09-15 09:24:50.474 JupyterHub log:100] 200 GET /hub/login (@y.y.y.y) 10.33ms
[D 2016-09-15 09:26:20.352 username1 jupyterhub-singleuser:211] Clearing cookie cache
[D 2016-09-15 09:27:22.406 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes

The redirect loop when connecting to the Hub directly is completely expected, so there's no issue there, as you shouldn't ever connect directly to the Hub. It is extremely bizarre that you can connect to the Hub and the proxy can't, though. I've never seen that before, and cannot explain it.

You could try running the Hub on a different IP:

c.JupyterHub.hub_ip = 'a.b.c.d'

to see if there's something funny going on on localhost.

Can you include the proxy logs as well? They should be interleaved in the JupyterHub output. You can also set c.JupyterHub.debug_proxy = True for extra proxy output. Also, please remove the c.JupyterHub.extra_log_file configuration. You will get more and better information from the terminal output where JupyterHub runs, or redirecting that with:

jupyterhub 2>&1 &>> /path/to/jupyterhub.log

if you aren't running it in a terminal.

Thanks for your feedback, Min. Actually, I am already running the hub on eth0 IP address, not the localhost. Debug proxy is turned on and "c.JupyterHub.extra_log_file" is now removed. I will get back to you with more details.

If it's doing this on eth0, you might try switching it to 127, or another interface.

Sadly, I have started from localhost then moved to the eth0 IP. I am getting the same behavior. Is it possible that someone is blocking the port? Not sure why the private port works, though. Sorry for all the trouble and appreciate your help.

One more, perhaps, important detail. I am using Anaconda2 (v4.0) environment and call Jupyterhub from inside that environment. Is it possible that this issue is related to permissions or not being able to pass system variables? Also, I did not create a specific jupyterhub account or anything of that sort. I am running jupyterhub as myself, i.e. a user.

That really shouldn't be an issue. Once a port is open, it should be accessible. What user are you when you launch jupyterhub? And what Linux distro?

I run it as myself, i.e. not a super user or root. Jupyterhub executable is in ~/.conda/envs/jupyterhub2/bin/jupyterhub (my home folder).

$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: RedHatEnterpriseServer
Description: Red Hat Enterprise Linux Server release 7.0 (Maipo)
Release: 7.0
Codename: Maipo

Hi Min,

With "jupyterhub 2>&1 &>> /path/to/jupyterhub.log" I am getting the following output:

[D 2016-09-15 16:26:13.249 JupyterHub application:529] Looking for /userhome/username1/Work/Jupyterhub/jupyterhub_config in None
[D 2016-09-15 16:26:13.273 JupyterHub application:549] Loaded config file: /userhome/username1/Work/Jupyterhub/jupyterhub_config.py
[I 2016-09-15 16:26:13.480 JupyterHub app:622] Loading cookie_secret from /userhome/username1/Work/Jupyterhub/cookie_secret
[D 2016-09-15 16:26:13.480 JupyterHub app:694] Connecting to db: sqlite:////userhome/username1/Work/Jupyterhub/jupyterhub.sqlite
[D 2016-09-15 16:26:13.618 JupyterHub app:888] Loaded users: 
    username1 admin
     username2
           1 admin
           r admin
           s admin
           e admin
           u admin
           n admin
           m admin
           a admin
    username3
[I 2016-09-15 16:26:13.627 JupyterHub app:1231] Hub API listening on http://x.x.x.x:10101/hub/
[I 2016-09-15 16:26:13.632 JupyterHub app:968] Starting proxy @ http://*:20202/
[D 2016-09-15 16:26:13.632 JupyterHub app:969] Proxy cmd: ['configurable-http-proxy', '--ip', '', '--port', '20202', '--api-ip', '127.0.0.1', '--api-port', '20203', '--default-target', 'http://x.x.x.x:10101', '--error-target', 'http://x.x.x.x:10101/hub/error', '--log-level', 'debug', '--ssl-key', '/userhome/username1/Work/Jupyterhub/ca.key', '--ssl-cert', '/userhome/username1/Work/Jupyterhub/ca.crt']
16:26:13.961 - info: [ConfigProxy] Proxying https://*:20202 to http://x.x.x.x:10101
16:26:13.964 - info: [ConfigProxy] Proxy API at http://127.0.0.1:20203/api/routes
[D 2016-09-15 16:26:14.040 JupyterHub app:997] Proxy started and appears to be up
[I 2016-09-15 16:26:14.040 JupyterHub app:1254] JupyterHub is now running at http://127.0.0.1:20202/
[I 2016-09-15 16:26:58.983 JupyterHub log:100] 302 GET / (@y.y.y.y) 1.99ms
[I 2016-09-15 16:26:58.984 JupyterHub log:100] 302 GET /hub (@y.y.y.y) 0.45ms
[D 2016-09-15 16:26:58.991 JupyterHub pages:35] User is not running: /hub/home
[I 2016-09-15 16:26:58.997 JupyterHub log:100] 302 GET /hub/ ([email protected]) 4.17ms
[I 2016-09-15 16:26:59.068 JupyterHub log:100] 200 GET /hub/home ([email protected]) 65.50ms
[D 2016-09-15 16:26:59.088 JupyterHub log:100] 200 GET /hub/static/components/requirejs/require.js?v=6da8be361b9ee26c5e721e76c6d4afce (@y.y.y.y) 9.00ms
[D 2016-09-15 16:26:59.137 JupyterHub log:100] 200 GET /hub/static/js/home.js?v=(& (@y.y.y.y) 1.47ms
[D 2016-09-15 16:26:59.409 JupyterHub log:100] 200 GET /hub/static/js/jhapi.js?v=(& (@y.y.y.y) 1.56ms
[D 2016-09-15 16:26:59.410 JupyterHub log:100] 200 GET /hub/static/components/jquery/jquery.min.js?v=(& (@y.y.y.y) 13.73ms
[D 2016-09-15 16:26:59.414 JupyterHub log:100] 200 GET /hub/static/js/utils.js?v=(& (@y.y.y.y) 1.39ms
[I 2016-09-15 16:27:08.149 JupyterHub log:100] 302 GET /hub/spawn ([email protected]) 5.43ms
[I 2016-09-15 16:27:08.154 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.26ms
[I 160915 16:27:08 mediator:68] Spawning /userhome/username1/.conda/envs/jupyterhub2/bin/jupyterhub-singleuser --user=username1 --port=59945 --cookie-name=jupyter-hub-token-username1 --base-url=/user/username1 --hub-host= --hub-prefix=/hub/ --hub-api-url=http://x.x.x.x:10101/hub/api --ip=127.0.0.1 '--notebook-dir=~/notebooks' --debug
[D 2016-09-15 16:27:09.535 JupyterHub spawner:316] Polling subprocess every 30s
[D 2016-09-15 16:27:10.256 username1 application:178] Searching ['/userhome/username1', '/userhome/username1/.jupyter', '/userhome/username1/.conda/envs/jupyterhub2/etc/jupyter', '/usr/local/etc/jupyter', '/etc/jupyter'] for config files
[D 2016-09-15 16:27:10.257 username1 application:529] Looking for jupyter_config in /etc/jupyter
[D 2016-09-15 16:27:10.257 username1 application:529] Looking for jupyter_config in /usr/local/etc/jupyter
[D 2016-09-15 16:27:10.257 username1 application:529] Looking for jupyter_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[D 2016-09-15 16:27:10.258 username1 application:529] Looking for jupyter_config in /userhome/username1/.jupyter
[D 2016-09-15 16:27:10.258 username1 application:529] Looking for jupyter_config in /userhome/username1
[D 2016-09-15 16:27:10.259 username1 application:529] Looking for jupyter_notebook_config in /etc/jupyter
[D 2016-09-15 16:27:10.259 username1 application:529] Looking for jupyter_notebook_config in /usr/local/etc/jupyter
[D 2016-09-15 16:27:10.259 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[W 2016-09-15 16:27:10.259 username1 loader:419] Unrecognized JSON config file version, assuming version 1
[D 2016-09-15 16:27:10.260 username1 application:549] Loaded config file: /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter/jupyter_notebook_config.json
[D 2016-09-15 16:27:10.263 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.jupyter
[D 2016-09-15 16:27:10.263 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1
[D 2016-09-15 16:27:10.269 username1 manager:45] [nb_conda_kernels] refreshing conda info
Using Anaconda Cloud api site https://api.anaconda.org
[D 2016-09-15 16:27:11.539 username1 manager:145] [nb_conda_kernels] refreshing conda kernelspecs
[I 2016-09-15 16:27:11.542 username1 manager:32] [nb_conda_kernels] enabled, 7 kernels found
[I 2016-09-15 16:27:11.600 username1 handlers:290] [nb_conda] enabled
[I 2016-09-15 16:27:11.691 username1 __init__:35] ‚úì nbpresent HTML export ENABLED
[I 2016-09-15 16:27:11.691 username1 __init__:46] ‚úì nbpresent PDF export ENABLED
[I 2016-09-15 16:27:11.826 username1 handlers:73] [nb_anacondacloud] enabled
[I 2016-09-15 16:27:11.833 username1 notebookapp:1128] Serving notebooks from local directory: /userhome/username1/notebooks
[I 2016-09-15 16:27:11.833 username1 notebookapp:1128] 0 active kernels 
[I 2016-09-15 16:27:11.833 username1 notebookapp:1128] The Jupyter Notebook is running at: http://127.0.0.1:59945/user/username1/
[I 2016-09-15 16:27:11.833 username1 notebookapp:1129] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 2016-09-15 16:27:11.837 username1 log:47] 302 GET /user/username1 (127.0.0.1) 0.99ms
[D 2016-09-15 16:27:11.838 JupyterHub utils:84] Server at http://127.0.0.1:59945/user/username1 responded with 302
[I 2016-09-15 16:27:11.839 JupyterHub base:306] User username1 server took 3.681 seconds to start
[I 2016-09-15 16:27:11.839 JupyterHub orm:159] Adding user username1 to proxy /user/username1 => http://127.0.0.1:59945
[D 2016-09-15 16:27:11.841 JupyterHub orm:146] Fetching POST http://127.0.0.1:20203/api/routes/user/username1
16:27:11.848 - debug: [ConfigProxy] POST /user/username1 target=http://127.0.0.1:59945, user=username1
[D 2016-09-15 16:27:11.852 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:11.862 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 3702.03ms
[I 2016-09-15 16:27:11.867 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.09ms
[D 2016-09-15 16:27:12.171 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:12.181 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 307.45ms
[I 2016-09-15 16:27:12.186 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.26ms
[D 2016-09-15 16:27:12.488 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:12.497 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 305.08ms
[I 2016-09-15 16:27:12.503 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.17ms
[D 2016-09-15 16:27:12.803 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:12.812 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 303.20ms
[I 2016-09-15 16:27:12.817 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.21ms
[D 2016-09-15 16:27:13.103 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:13.111 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 288.18ms
[I 2016-09-15 16:27:13.116 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.21ms
[D 2016-09-15 16:27:13.400 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:13.408 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 285.98ms
[I 2016-09-15 16:27:13.413 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.15ms
[D 2016-09-15 16:27:13.693 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:13.702 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 283.57ms
[I 2016-09-15 16:27:13.707 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.15ms
[D 2016-09-15 16:27:13.996 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:27:14.006 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 292.21ms
[I 2016-09-15 16:27:25.323 JupyterHub log:100] 200 GET /hub/admin ([email protected]) 42.34ms
[D 2016-09-15 16:27:25.348 JupyterHub log:100] 200 GET /hub/static/js/admin.js?v=(& (@y.y.y.y) 1.32ms
[D 2016-09-15 16:27:25.388 JupyterHub log:100] 200 GET /hub/static/components/moment/moment.js?v=(& (@y.y.y.y) 31.46ms
[D 2016-09-15 16:27:25.388 JupyterHub log:100] 200 GET /hub/static/components/bootstrap/js/bootstrap.min.js?v=(& (@y.y.y.y) 12.09ms
[I 2016-09-15 16:27:36.950 JupyterHub orm:178] Removing user username1 from proxy
[D 2016-09-15 16:27:36.954 JupyterHub orm:146] Fetching DELETE http://127.0.0.1:20203/api/routes/user/username1
16:27:36.957 - debug: [ConfigProxy] DELETE /user/username1
[D 2016-09-15 16:27:37.551 JupyterHub spawner:524] Interrupting 96058
[I 2016-09-15 16:27:37.802 username1 notebookapp:1164] Interrupted...
[I 2016-09-15 16:27:37.802 username1 notebookapp:1083] Shutting down kernels
[I 2016-09-15 16:27:38.141 JupyterHub base:367] User username1 server took 1.189 seconds to stop
[I 2016-09-15 16:27:38.146 JupyterHub log:100] 204 DELETE /hub/api/users/username1/server ([email protected]) 1481.38ms
[I 160915 16:27:49 mediator:68] Spawning /userhome/username1/.conda/envs/jupyterhub2/bin/jupyterhub-singleuser --user=username1 --port=39656 --cookie-name=jupyter-hub-token-username1 --base-url=/user/username1 --hub-host= --hub-prefix=/hub/ --hub-api-url=http://x.x.x.x:10101/hub/api --ip=127.0.0.1 '--notebook-dir=~/notebooks' --debug
[D 2016-09-15 16:27:50.611 username1 application:178] Searching ['/userhome/username1', '/userhome/username1/.jupyter', '/userhome/username1/.conda/envs/jupyterhub2/etc/jupyter', '/usr/local/etc/jupyter', '/etc/jupyter'] for config files
[D 2016-09-15 16:27:50.612 username1 application:529] Looking for jupyter_config in /etc/jupyter
[D 2016-09-15 16:27:50.612 username1 application:529] Looking for jupyter_config in /usr/local/etc/jupyter
[D 2016-09-15 16:27:50.612 username1 application:529] Looking for jupyter_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[D 2016-09-15 16:27:50.612 username1 application:529] Looking for jupyter_config in /userhome/username1/.jupyter
[D 2016-09-15 16:27:50.612 username1 application:529] Looking for jupyter_config in /userhome/username1
[D 2016-09-15 16:27:50.613 username1 application:529] Looking for jupyter_notebook_config in /etc/jupyter
[D 2016-09-15 16:27:50.613 username1 application:529] Looking for jupyter_notebook_config in /usr/local/etc/jupyter
[D 2016-09-15 16:27:50.614 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter
[W 2016-09-15 16:27:50.614 username1 loader:419] Unrecognized JSON config file version, assuming version 1
[D 2016-09-15 16:27:50.614 username1 application:549] Loaded config file: /userhome/username1/.conda/envs/jupyterhub2/etc/jupyter/jupyter_notebook_config.json
[D 2016-09-15 16:27:50.617 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1/.jupyter
[D 2016-09-15 16:27:50.618 username1 application:529] Looking for jupyter_notebook_config in /userhome/username1
[D 2016-09-15 16:27:50.623 username1 manager:45] [nb_conda_kernels] refreshing conda info
[D 2016-09-15 16:27:50.818 JupyterHub spawner:316] Polling subprocess every 30s
Using Anaconda Cloud api site https://api.anaconda.org
[D 2016-09-15 16:27:51.109 username1 manager:145] [nb_conda_kernels] refreshing conda kernelspecs
[I 2016-09-15 16:27:51.112 username1 manager:32] [nb_conda_kernels] enabled, 7 kernels found
[I 2016-09-15 16:27:51.164 username1 handlers:290] [nb_conda] enabled
[I 2016-09-15 16:27:51.223 username1 __init__:35] ‚úì nbpresent HTML export ENABLED
[I 2016-09-15 16:27:51.223 username1 __init__:46] ‚úì nbpresent PDF export ENABLED
[I 2016-09-15 16:27:51.268 username1 handlers:73] [nb_anacondacloud] enabled
[I 2016-09-15 16:27:51.275 username1 notebookapp:1128] Serving notebooks from local directory: /userhome/username1/notebooks
[I 2016-09-15 16:27:51.275 username1 notebookapp:1128] 0 active kernels 
[I 2016-09-15 16:27:51.275 username1 notebookapp:1128] The Jupyter Notebook is running at: http://127.0.0.1:39656/user/username1/
[I 2016-09-15 16:27:51.275 username1 notebookapp:1129] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[I 2016-09-15 16:27:51.278 username1 log:47] 302 GET /user/username1 (127.0.0.1) 0.82ms
[D 2016-09-15 16:27:51.279 JupyterHub utils:84] Server at http://127.0.0.1:39656/user/username1 responded with 302
[I 2016-09-15 16:27:51.279 JupyterHub base:306] User username1 server took 1.822 seconds to start
[I 2016-09-15 16:27:51.280 JupyterHub orm:159] Adding user username1 to proxy /user/username1 => http://127.0.0.1:39656
[D 2016-09-15 16:27:51.282 JupyterHub orm:146] Fetching POST http://127.0.0.1:20203/api/routes/user/username1
16:27:51.284 - debug: [ConfigProxy] POST /user/username1 target=http://127.0.0.1:39656, user=username1
[I 2016-09-15 16:27:51.292 JupyterHub log:100] 201 POST /hub/api/users/username1/server ([email protected]) 1835.88ms
[I 2016-09-15 16:28:16.140 JupyterHub login:17] User logged out: username1
[I 2016-09-15 16:28:16.149 JupyterHub log:100] 302 GET /hub/logout ([email protected]) 6.66ms
[I 2016-09-15 16:28:16.154 JupyterHub log:100] 302 GET /hub/ (@y.y.y.y) 1.25ms
[I 2016-09-15 16:28:16.169 JupyterHub log:100] 200 GET /hub/login (@y.y.y.y) 10.58ms
[D 2016-09-15 16:28:39.863 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[D 2016-09-15 16:28:39.864 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token, {}
[I 2016-09-15 16:28:39.869 JupyterHub log:100] 302 POST /hub/login?next= (@y.y.y.y) 335.52ms
[I 2016-09-15 16:28:39.869 JupyterHub login:86] User logged in: username1
[D 2016-09-15 16:28:39.875 JupyterHub pages:31] User is running: /user/username1
[D 2016-09-15 16:28:39.876 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:39.884 JupyterHub log:100] 302 GET /hub/ ([email protected]) 7.73ms
[I 2016-09-15 16:28:39.889 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.15ms
[D 2016-09-15 16:28:40.164 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:40.173 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 278.50ms
[I 2016-09-15 16:28:40.179 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.23ms
[D 2016-09-15 16:28:40.447 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:40.456 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 270.70ms
[I 2016-09-15 16:28:40.462 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.31ms
[D 2016-09-15 16:28:40.749 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:40.758 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 290.39ms
[I 2016-09-15 16:28:40.763 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.27ms
[D 2016-09-15 16:28:41.030 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:41.036 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 268.68ms
[I 2016-09-15 16:28:41.042 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.03ms
[D 2016-09-15 16:28:41.334 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:41.341 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 293.84ms
[I 2016-09-15 16:28:41.347 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.34ms
[D 2016-09-15 16:28:41.636 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:41.645 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 291.91ms
[I 2016-09-15 16:28:41.651 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.20ms
[D 2016-09-15 16:28:41.945 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:41.954 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 296.81ms
[I 2016-09-15 16:28:41.960 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.31ms
[D 2016-09-15 16:28:52.268 JupyterHub pages:31] User is running: /user/username1
[D 2016-09-15 16:28:52.268 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:52.278 JupyterHub log:100] 302 GET /hub/ ([email protected]) 9.56ms
[I 2016-09-15 16:28:52.283 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.32ms
[D 2016-09-15 16:28:52.591 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:52.601 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 311.15ms
[I 2016-09-15 16:28:52.607 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.30ms
[D 2016-09-15 16:28:52.912 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:52.922 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 308.20ms
[I 2016-09-15 16:28:52.928 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.24ms
[D 2016-09-15 16:28:53.228 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:53.237 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 302.87ms
[I 2016-09-15 16:28:53.243 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.30ms
[D 2016-09-15 16:28:53.549 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:53.558 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 309.44ms
[I 2016-09-15 16:28:53.564 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.22ms
[D 2016-09-15 16:28:53.836 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:53.846 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 275.47ms
[I 2016-09-15 16:28:53.852 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.24ms
[D 2016-09-15 16:28:54.123 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:54.130 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 273.40ms
[I 2016-09-15 16:28:54.135 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.03ms
[D 2016-09-15 16:28:54.448 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:54.455 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 315.32ms
[I 2016-09-15 16:28:54.461 JupyterHub log:100] 302 GET /user/username1 (@y.y.y.y) 1.38ms
[D 2016-09-15 16:28:54.729 JupyterHub base:231] Setting cookie for username1: jupyter-hub-token-username1, {}
[I 2016-09-15 16:28:54.737 JupyterHub log:100] 302 GET /hub/user/username1 ([email protected]) 270.42ms

I am in a very similar situation to ponomarevsy. I might start digging into the redirect code, but am hoping for some guidance.

@slavenas If you could share your configuration, os, and debug logs, it would be helpful. Thanks 👍

@willingc I am using ubuntu16.04 on an openstackVM

@willingc in ~/jupyterhub_config.py

import dockerspawner
c.JupyterHub.spawner_class = 'dockerspawner.SystemUserSpawner'
from jupyter_client.localinterfaces import public_ips
c.JupyterHub.hub_ip = public_ips()[0]

plus my oauth inputs (oauth is working)

After hitting 'MyServer' I get 'page isn't working ... too many redirects' in the browser.

In the terminal where I ran

jupyterhub --ssl-key ***.key --ssl-cert ***.crt

the output is:

[I 2016-09-20 20:42:47.373 JupyterHub log:100] 302 GET /user/slavenas (@141.142.22.7) 0.92ms
[I 2016-09-20 20:42:47.382 JupyterHub log:100] 302 GET /hub/user/slavenas ([email protected]) 6.17ms
[I 2016-09-20 20:42:47.386 JupyterHub log:100] 302 GET /user/slavenas (@141.142.22.7) 0.49ms
[I 2016-09-20 20:42:47.395 JupyterHub log:100] 302 GET /hub/user/slavenas ([email protected]) 5.66ms
...

Thanks!

@slavenas make sure that you are not connecting directly to the ip,port of the Hub, but only the public IP of the proxy (default: 8000). The redirects you see suggest a connection directly to the Hub. The Hub should only get requests to /user/:name if you have bypassed the proxy.

Hi, Min! I have just downloaded the latest version of Jupyterhub (0.7.0). I have high hopes that the redirection issue will be resolved, but I got some new errors when running the new jupyterhub:

$ jupyterhub -f jupyterhub_config.py
[I 2016-12-05 10:18:07.244 JupyterHub app:724] Loading cookie_secret from /home/user/Work/Jupyterhub/cookie_secret
[W 2016-12-05 10:18:07.304 JupyterHub app:864] No admin users, admin interface will be unavailable.
[W 2016-12-05 10:18:07.304 JupyterHub app:865] Add any administrative users to `c.Authenticator.admin_users` in config.
[I 2016-12-05 10:18:07.304 JupyterHub app:892] Not using whitelist. Any authenticated user will be allowed.
[E 2016-12-05 10:18:07.306 JupyterHub app:1527]
    Traceback (most recent call last):
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/jupyterhub/app.py", line 1524, in launch_instance_async
        yield self.initialize(argv)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/types.py", line 179, in throw
        return self.__wrapped.throw(tp, *rest)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/jupyterhub/app.py", line 1310, in initialize
        yield self.init_users()
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/jupyterhub/app.py", line 909, in init_users
        for user in db.query(orm.User):
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2797, in __iter__
        return self._execute_and_instances(context)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/orm/query.py", line 2820, in _execute_and_instances
        result = conn.execute(querycontext.statement, self._params)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 945, in execute
        return meth(self, multiparams, params)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/sql/elements.py", line 263, in _execute_on_connection
        return connection._execute_clauseelement(self, multiparams, params)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1053, in _execute_clauseelement
        compiled_sql, distilled_params
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1189, in _execute_context
        context)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1393, in _handle_dbapi_exception
        exc_info
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 202, in raise_from_cause
        reraise(type(exception), exception, tb=exc_tb, cause=cause)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 185, in reraise
        raise value.with_traceback(tb)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 1182, in _execute_context
        context)
      File "/home/user/.conda/envs/jupyterhub2/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 469, in do_execute
        cursor.execute(statement, parameters)
    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: users.auth_state [SQL: 'SELECT users.id AS users_id, users.name AS users_name, users._server_id AS users__server_id, users.admin AS users_admin, users.last_activity AS users_last_activity, users.cookie_id AS users_cookie_id, users.state AS users_state, users.auth_state AS users_auth_state \nFROM users']

This looks like a database formatting issue to me. My config file has NOT changed much since last time, please see my previous posts. Thank you in advance!

@ponomarevsy please run jupyterhub upgrade-db to upgrade the Hub database. That should be in your error message, I'll have to figure out why it is not.

Thank you, Min! That fixed the database errors but I am back to redirect loops:

[W 2016-12-06 09:13:45.265 JupyterHub base:517]
                        Detected possible direct connection to Hub's private ip: http://W.X.Y.Z:10101/hub/user/username, bypassing proxy.
                        This will result in a redirect loop.
                        Make sure to connect to the proxied public URL http://127.0.0.1:20202/

Connecting to the proxied public URL http://127.0.0.1:20202/ or http://W.X.Y.Z:20202/ gives

The connection was reset

The connection to the server was reset while the page was loading.

    The site could be temporarily unavailable or too busy. Try again in a few moments.
    If you are unable to load any pages, check your computer's network connection.
    If your computer or network is protected by a firewall or proxy, make sure that Firefox is permitted to access the Web.

Connecting to http://W.X.Y.Z:10101/user/username lets me log in but produces

The page isn't redirecting properly

Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

    This problem can sometimes be caused by disabling or refusing to accept cookies.

On a separate issue, how do I enable HTTPS for JupyterHub? I see this warning at login:

Warning: JupyterHub seems to be served over an unsecured HTTP connection. We strongly recommend enabling HTTPS for JupyterHub.

Just tried changing

c.JupyterHub.proxy_api_ip = '127.0.0.1'

to

**c.JupyterHub.proxy_api_ip = 'W.X.Y.Z'**

Having also

######Private port:
c.JupyterHub.hub_port = 10101
####c.JupyterHub.data_files_path = '~/.conda/envs/jupyterhub2/bin/'
**c.JupyterHub.hub_ip = 'W.X.Y.Z'**
#c.JupyterHub.hub_ip = '127.0.0.1'
######Public port:
c.JupyterHub.port = 20202
# c.JupyterHub.proxy_api_port = 0
# c.JupyterHub.statsd_port = 8125
# This should be the full https://hub.domain.tld[:port]

That did not work either... brings back redirection issues again.

It is unlikely that you need to set the hub_ip or hub_api_ip. These are internal, and should only be the default (localhost) unless you are distributing your cluster across multiple servers. You should never connect directly to any port other than c.JupyterHub.port, the public port of the application (this is the reason you see this message:

Detected possible direct connection to Hub's private ip: http://W.X.Y.Z:10101/hub/user/username, bypassing proxy.

because connecting directly to the Hub bypassing the proxy should never happen.

Do you have any additional configuration you can share? Or perhaps some cookie-prohibiting settings in Firefox? Can you connect with a different browser and/or a private browsing window?

Hi Min!

This is how I define ports in jupyterhub_config.py:

######Private port:
c.JupyterHub.hub_port = 10101

c.JupyterHub.hub_ip = 'W.X.Y.Z' #NOT localhost (i.e., NOT 127.0.0.1)!!!

######Public port:
c.JupyterHub.port = 20202

Now, I start jupyterhub:

$ jupyterhub -f /home/username/Work/Jupyterhub/jupyterhub_config.py --no-ssl --debug
[D 2016-12-07 16:52:23.779 JupyterHub application:555] Looking for /home/usename/Work/Jupyterhub/jupyterhub_config in /home/usrname/Work/Jupyterhub
[D 2016-12-07 16:52:23.780 JupyterHub application:577] Loaded config file: /home/username/Work/Jupyterhub/jupyterhub_config.py
[I 2016-12-07 16:52:24.507 JupyterHub app:724] Loading cookie_secret from /home/username/Work/Jupyterhub/jupyterhub_cookie_secret
[D 2016-12-07 16:52:24.519 JupyterHub app:796] Connecting to db: sqlite:////home/username/Work/Jupyterhub/jupyterhub.sqlite
[W 2016-12-07 16:52:24.673 JupyterHub app:864] No admin users, admin interface will be unavailable.
[W 2016-12-07 16:52:24.673 JupyterHub app:865] Add any administrative users to `c.Authenticator.admin_users` in config.
[I 2016-12-07 16:52:24.673 JupyterHub app:892] Not using whitelist. Any authenticated user will be allowed.
[D 2016-12-07 16:52:24.690 JupyterHub app:1085] Loading state for username from db
[D 2016-12-07 16:52:24.691 JupyterHub app:1097] username not running.
[D 2016-12-07 16:52:24.697 JupyterHub app:1085] Loading state for username2 from db
[D 2016-12-07 16:52:24.697 JupyterHub app:1097] username2 not running.
[D 2016-12-07 16:52:24.698 JupyterHub app:1102] Loaded users:
    username admin
     username2 admin
[I 2016-12-07 16:52:24.708 JupyterHub app:1453] Hub API listening on http://W.X.Y.Z:10101/hub/
[I 2016-12-07 16:52:24.712 JupyterHub app:1176] Starting proxy @ http://*:20202/
[D 2016-12-07 16:52:24.713 JupyterHub app:1177] Proxy cmd: ['/path/to/proxy/bin/configurable-http-proxy', '--ip', '', '--port', '20202', '--api-ip', '127.0.0.1', '--api-port', '20203', '--default-target', 'http://W.X.Y.Z:10101', '--error-target', 'http://W.X.Y.Z:10101/hub/error', '--log-level', 'debug', '--ssl-key', '/home/username/Work/Jupyterhub/ca.key', '--ssl-cert', '/home/username/Work/Jupyterhub/ca.crt']
16:52:25.067 - info: [ConfigProxy] Proxying https://*:20202 to http://W.X.Y.Z:10101
16:52:25.070 - info: [ConfigProxy] Proxy API at http://127.0.0.1:20203/api/routes
[D 2016-12-07 16:52:25.121 JupyterHub app:1205] Proxy started and appears to be up
[I 2016-12-07 16:52:25.122 JupyterHub app:1485] JupyterHub is now running at http://127.0.0.1:20202/
[D 2016-12-07 16:57:25.167 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-12-07 17:02:25.158 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-12-07 17:07:25.158 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-12-07 17:12:25.157 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-12-07 17:17:25.157 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-12-07 17:22:25.158 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-12-07 17:27:25.158 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[D 2016-12-07 17:32:25.158 JupyterHub orm:146] Fetching GET http://127.0.0.1:20203/api/routes
[I 2016-12-07 17:35:52.585 JupyterHub log:100] 302 GET / (@W.X.Y.Z) 5.38ms
[I 2016-12-07 17:35:52.593 JupyterHub log:100] 302 GET /hub (@W.X.Y.Z) 0.65ms
[W 2016-12-07 17:35:52.597 JupyterHub pages:32] Disallowing redirect outside JupyterHub: ''
[D 2016-12-07 17:35:52.600 JupyterHub pages:53] User is not running: /hub/home
[I 2016-12-07 17:35:52.614 JupyterHub log:100] 302 GET /hub/ ([email protected]) 11.39ms
[I 2016-12-07 17:35:52.725 JupyterHub log:100] 200 GET /hub/home ([email protected]) 103.50ms
[D 2016-12-07 17:35:53.159 JupyterHub log:100] 200 GET /hub/static/components/font-awesome/fonts/fontawesome-webfont.woff?v=4.1.0 (@W.X.Y.Z) 59.14ms
[D 2016-12-07 17:35:53.180 JupyterHub log:100] 200 GET /hub/static/js/home.js?v=(& (@W.X.Y.Z) 18.87ms
[D 2016-12-07 17:35:53.238 JupyterHub log:100] 200 GET /hub/static/components/jquery/jquery.min.js?v=(& (@W.X.Y.Z) 37.53ms
[D 2016-12-07 17:35:53.240 JupyterHub log:100] 304 GET /favicon.ico (@W.X.Y.Z) 1.61ms
[D 2016-12-07 17:35:53.247 JupyterHub log:100] 200 GET /hub/static/js/jhapi.js?v=(& (@W.X.Y.Z) 5.44ms
[D 2016-12-07 17:35:53.274 JupyterHub log:100] 200 GET /hub/static/js/utils.js?v=(& (@W.X.Y.Z) 5.34ms

I open Chrome and type: "http://W.X.Y.Z:20202"
This gives me: "The W.X.Y.Z page isn’t working W.X.Y.Z didn’t send any data. ERR_EMPTY_RESPONSE"

Now I type "http://W.X.Y.Z:10101"
This redirects me to "http://W.X.Y.Z:10101/hub/login", asking me to login.
After login I get: "The W.X.Y.Z page isn’t working W.X.Y.Z redirected you too many times. Try clearing your cookies. ERR_TOO_MANY_REDIRECTS"

Clearing cookies does NOT help. Is port 20202 blocked? Now I check ports 10101 and 20202:

# netstat -t -l -p
# netstat -t -l -p -n

tcp        0      0 W.X.Y.Z:10101     0.0.0.0:*               LISTEN      99895/python
tcp        0      0 hostname.:ezmeeting-2 0.0.0.0:*               LISTEN      99895/python

tcp6       0      0 :::20202                :::*                    LISTEN      99899/node
tcp6       0      0 [::]:ipdtp-port         [::]:*                  LISTEN      99899/node

tcp        0      0 127.0.0.1:20203         0.0.0.0:*               LISTEN      99899/node
tcp        0      0 localhost.localdo:20203 0.0.0.0:*               LISTEN      99899/node

# netstat -antup | grep :10101
tcp        0      0 W.X.Y.Z:10101     0.0.0.0:*               LISTEN      99895/python
# netstat -antup | grep :20202
tcp6       0      0 :::20202                :::*                    LISTEN      99899/node
# netstat -antup | grep :20203
tcp        0      0 127.0.0.1:20203         0.0.0.0:*               LISTEN      99899/node

Do you see anything paranormal?

Interesting. So port 10101 is behaving exactly as expected/intended, but 20202 isn't. The only thing that looks suspicious is that it seems port 20202 is only listening on tcp6, not tcp4. I'm not sure what could cause that, because it should be listening on all interfaces by default, though I could be misinterpreting the netstat output. Try setting `c.JupyterHub.ip = 'W.X.Y.Z' to force a particular IP for listening, and connect to the public port 20202.

Once it works, don't forget to remove the configuration setting hub_ip to an external port, which you won't want in general. Never bypass the proxy to talk to the Hub, except for debugging things like this.

Thanks, Min! I have also noticed the tcp6 binding. I have added this line to my config file:

c.JupyterHub.ip = 'W.X.Y.Z'

Now when I start Jupyterhub I see this line:

[I 2016-12-09 10:08:19.092 JupyterHub app:1485] JupyterHub is now running at http://W.X.Y.Z:20202/

But navigating to page "http://W.X.Y.Z:20202/" produces the same output as before:
```The 156.40.177.32 page isn’t working
156.40.177.32 didn’t send any data.
ERR_EMPTY_RESPONSE

The tcp6 bind is now gone, though:

netstat -t -l -p

tcp 0 0 ai-submit2.n:ipdtp-port 0.0.0.0:* LISTEN 61326/node

netstat -t -l -p -n

tcp 0 0 W.X.Y.Z:20202 0.0.0.0:* LISTEN 61326/node

netstat -antup | grep :20202

tcp 0 0 W.X.Y.Z:20202 0.0.0.0:* LISTEN 61326/node

netstat -antup | grep :10101

tcp 0 0 W.X.Y.Z:10101 0.0.0.0:* LISTEN 61322/python

netstat -antup | grep :20203

tcp 0 0 127.0.0.1:20203 0.0.0.0:* LISTEN 61326/node
```

That's really weird. Can you run with c.JupyterHub.port = 10101, since we know that port got through?

What do you get for node --version? If it's less than 4, it's a good idea to install a more recent version of nodejs and then reinstall configurable-http-proxy with an updated version.

I have swapped ports, and now I am observing the opposite of what I had before, i.e. I can access the 20202 port (private), but NOT the 10101 port (public). From that I conclude that the proxy is not working as it should (public port never works!)... Very strange!

######Private port:
c.JupyterHub.hub_port = 20202
c.JupyterHub.hub_ip = 'W.X.Y.Z'
c.JupyterHub.ip = 'W.X.Y.Z'
######Public port:
c.JupyterHub.port = 10101

$ node --version
v4.5.0
$ configurable-http-proxy --version
1.3.0
$ jupyterhub --version
0.7.0

Version 1.3.1 is the latest version for configurable-http-proxy. Perhaps upgrading to the latest would resolve this.

Thanks, Carol! I just did the upgrade:

$ npm install -g configurable-http-proxy
$ configurable-http-proxy --version
1.3.1

Sadly, restarting Jupyterhub did NOT solve the issue. I am really out of ideas at this point...

Are you still seeing the same issue as https://github.com/jupyterhub/jupyterhub/issues/742#issuecomment-266052509 or different behavior?

Yes, Carol, the same private/public port behavior.

Can you check if the port to '20202' is open on any all devices and that it is not closed on any system or blocked by a firewall? Thanks.

Also deleting all of the cookies between tests would be helpful too.

I can telnet to the ports when jupyterhub is running:

$ telnet W.X.Y.Z 10101                   
Trying W.X.Y.Z...
Connected to W.X.Y.Z.
Escape character is '^]'.

$ telnet W.X.Y.Z 20202
Trying W.X.Y.Z...
Connected to W.X.Y.Z.
Escape character is '^]'.

And I've tried cleaning cookies in Chrome, Safari and Firefox web browsers with the same outcome.

Dear Jupyterhub developers! My colleague was able to run jupyterhub on his Ubuntu 16 virtual machine, without redirection issues. At this point it looks like we may have Bright Cluster Management (bcm) or RedHat 7 firewall interfering with the jupyterhub service. Would it be possible to have a video conference via WebEx/Lync session to debug the issue we have? Thank you in advance.

Closing this issue as it's been inactive for several months. Please feel free to open a new issue at the jupyter/help repo or reopen this issue. Thanks! :sunflower:

After changing the private port to

######Private port:
c.JupyterHub.hub_port = 10110

my public port suddenly started to work!!! This is a major breakthrough. Now I need to figure out how to run jupyterhub as sudo so that other members of our team will be able to see files in their home folders.

It works for other users if I run Jupyterhub as sudo. Thank you so much for your time and effort!!!

@ponomarevsy: I am facing similar issue. My jupyterhub is not able to spawn processes and suddently it starts working

Was this page helpful?
0 / 5 - 0 ratings

Related issues

satendrakumar picture satendrakumar  Â·  53Comments

danielballan picture danielballan  Â·  50Comments

dramaley picture dramaley  Â·  22Comments

yvan picture yvan  Â·  21Comments

danielfrg picture danielfrg  Â·  32Comments