events { worker_connections 1024; } http { upstream docker-registry { server registry:5000; } map $upstream_http_docker_distribution_api_version $docker_distribution_api_version { '' 'registry/2.0'; } server { listen 80; server_name example.com www.example.com; server_tokens off; location /.well-known/acme-challenge/ { root /var/www/certbot; } location / { return 301 https://example.com$request_uri; } } # UNCOMMENT THIS AFTER GENERATING SSL CERTIFICATES # server { # listen 443 ssl; # http2 on; # sendfile on; # server_name example.com; # # ssl_certificate /etc/nginx/ssl/live/example.com/fullchain.pem; # ssl_certificate_key /etc/nginx/ssl/live/example.com/privkey.pem; # # ssl_protocols TLSv1.1 TLSv1.2; # ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # ssl_prefer_server_ciphers on; # ssl_session_cache shared:SSL:10m; # # client_max_body_size 0; # # chunked_transfer_encoding on; # # location ~* \.(eot|ttf|woff|woff2)$ { # add_header Access-Control-Allow-Origin "*"; # } # # # Docker Registry # location /v2/ { # # Simple requests # if ($request_method ~* "(GET|POST)") { # add_header "Access-Control-Allow-Origin" "*"; # add_header "Access-Control-Allow-Credentials" "true"; # } # # # Preflighted requests # if ($request_method = OPTIONS ) { # add_header "Access-Control-Allow-Origin" "*"; # add_header "Access-Control-Allow-Methods" "GET, POST, OPTIONS, HEAD"; # add_header "Access-Control-Allow-Headers" "Authorization, Origin, X-Requested-With, Content-Type, Accept"; # return 204; # } # # # Do not allow connections from docker 1.5 and earlier # # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents # if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) { # return 404; # } # # # To add basic authentication to v2 use auth_basic setting. # auth_basic "Registry realm"; # auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd; # # ## If $docker_distribution_api_version is empty, the header is not added. # ## See the map directive above where this variable is defined. # add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always; # # proxy_pass http://docker-registry; # proxy_set_header Host $http_host; # required for docker client's sake # proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto $scheme; # proxy_read_timeout 900; # } # # # Registry UI # location ^~ /registry { # auth_basic "Registry realm"; # auth_basic_user_file /etc/nginx/conf.d/nginx.htpasswd; # # rewrite ^/registry/?(.*)$ /$1 break; # # proxy_pass http://registry-ui; # sub_filter_once off; # sub_filter_types *; # sub_filter '"docker-registry-ui.css"' '"/registry/docker-registry-ui.css"'; # sub_filter '"docker-registry-ui.js"' '"/registry/docker-registry-ui.js"'; # sub_filter '"/favicon.ico"' '"/registry/favicon.ico"'; # } # # # Uptime kuma # location /uptime { # # Define upstream address # set $upstream_app uptime-kuma; # set $url_prefix uptime; # proxy_pass http://uptime-kuma:3001; # # # Set proxy headers # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # proxy_set_header X-Forwarded-Proto $scheme; # proxy_set_header X-Forwarded-Protocol $scheme; # proxy_set_header X-Forwarded-Host $http_host; # proxy_http_version 1.1; # proxy_set_header Upgrade $http_upgrade; # proxy_set_header Connection "upgrade"; # proxy_buffering off; # # # Redirect location headers # proxy_redirect ^ /$url_prefix; # proxy_redirect /dashboard /$url_prefix/dashboard; # # # Remove URL prefix to pass to the app # rewrite ^/uptime/?(.*)$ /$1 break; # # # Sub filters to replace hardcoded paths # proxy_set_header Accept-Encoding ""; # sub_filter_once off; # sub_filter_types *; # sub_filter '/assets/' '/$url_prefix/assets/'; # sub_filter '"assets/' '"$url_prefix/assets/'; # sub_filter '/dashboard' '/$url_prefix/dashboard'; # sub_filter '"/socket.io"' '"/$url_prefix/socket.io"'; # # sub_filter '"/icon.svg"' '"/$url_prefix/icon.svg"'; # sub_filter '"/favicon.ico"' '"/$url_prefix/favicon.ico"'; # sub_filter '"/manifest.json"' '"/$url_prefix/manifest.json"'; # } # } }