Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
debugging NGINX configuration for Jupyter
image: jupyter/datascience-notebook
image: nginx
- jupyter
- ./nginx.conf:/etc/nginx/nginx.conf
- ./letsencrypt.crt:/data/cert.crt
- /letsencrypt.key:/data/key.key
- 80:80
- 443:443
## Based on:
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/;
events {
worker_connections 1024;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
upstream jupyter {
server jupyter:8888 fail_timeout=0;
server {
listen 80;
rewrite ^ https://$host$request_uri? permanent;
server {
listen 443;
client_max_body_size 50M;
ssl on;
ssl_certificate /data/cert.crt;
ssl_certificate_key /data/key.key;
ssl_ciphers "AES128+EECDH:AES128+EDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains";
add_header X-Content-Type-Options nosniff;
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify on; # Requires nginx => 1.3.7
resolver_timeout 5s;
# Expose logs to "docker logs".
# See
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_pass http://jupyter;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~* /(api/kernels/[^/]+/(channels|iopub|shell|stdin)|terminals/websocket)/? {
proxy_pass http://jupyter;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
Copy link

xros commented Apr 4, 2016

Thanks this works!

Copy link

morphean commented Jul 21, 2016

what about just serving staring from / instead of ~?

where are the static files actually served from?

Copy link

dolvik commented Mar 12, 2017

Thanks. It helped

Copy link

javrasya commented Jul 28, 2017

Thank you, it works like a charm.

Copy link

Vaayne commented Sep 4, 2017

Thanks, It works for me

Copy link

coder4web commented Nov 15, 2017

Thanks, works with nginx mainline and JH 0.8.1

Copy link

afragop72 commented Oct 5, 2019

Thanks for this - that worked for me, as well.

Copy link

oharach1 commented Sep 25, 2020

Hi, does anyone has been trying transfer the NGINX user uid header to jupyternotebook session? I mean something like to identify the authenticated user on the notebook session.


Copy link

hannes commented Feb 4, 2021

Dude you saved our ass here just now. Thanks :)

Copy link

aabdulsalams commented Apr 2, 2022

Thank you!. You've saved my time :)))))))))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment