upstream jupyter_notebook {
    server               127.0.0.1:8888;
}

server {
    listen               80;
    server_name          jupyter.example.com;
    return               301 https://$host$request_uri;
}

server {
    listen               443 ssl;
    server_name          jupyter.example.com;

    ssl_certificate      example.com.crt;
    ssl_certificate_key  example.com.key;
    ssl_protocols        TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers          HIGH:!aNULL:!MD5;

    location / {
        proxy_pass            http://jupyter_notebook;
        proxy_set_header      Host $host;
    }

    location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? {
        proxy_pass            http://jupyter_notebook;
        proxy_set_header      Host $host;
        proxy_http_version    1.1;
        proxy_set_header      Upgrade "websocket";
        proxy_set_header      Connection "Upgrade";
        proxy_read_timeout    86400;
    }
}
