# Redirect all HTTP traffic to HTTPS server { server_name _; listen {{$AIO_NGINX_PORT_HTTP}} default_server; listen [::]:{{$AIO_NGINX_PORT_HTTP}}; access_log {{$AIO_NGINX_LOGS_DIR}}/access.log; error_log {{$AIO_NGINX_LOGS_DIR}}/error.log; # Ideally we want 308 (permanent + keep original method), # but it is relatively new and not supported by some clients (e.g. cURL). return 307 https://$host:{{$AIO_NGINX_PORT_HTTPS}}$request_uri; } # Serve PR-preview requests server { server_name "~^pr(?[1-9][0-9]*)-(?[0-9a-f]{7,40})\."; listen {{$AIO_NGINX_PORT_HTTPS}} ssl http2; listen [::]:{{$AIO_NGINX_PORT_HTTPS}} ssl http2; ssl_certificate {{$AIO_LOCALCERTS_DIR}}/{{$AIO_DOMAIN_NAME}}.crt; ssl_certificate_key {{$AIO_LOCALCERTS_DIR}}/{{$AIO_DOMAIN_NAME}}.key; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; root {{$AIO_BUILDS_DIR}}/$pr/$sha; disable_symlinks on from=$document_root; index index.html; gzip on; gzip_comp_level 7; gzip_types *; access_log {{$AIO_NGINX_LOGS_DIR}}/access.log; error_log {{$AIO_NGINX_LOGS_DIR}}/error.log; error_page 404 /404.html; location "=/404.html" { internal; } location "~/[^/]+\.[^/]+$" { try_files $uri $uri/ =404; } location / { try_files $uri $uri/ /index.html =404; } } # Handle all other requests server { server_name _; listen {{$AIO_NGINX_PORT_HTTPS}} ssl http2 default_server; listen [::]:{{$AIO_NGINX_PORT_HTTPS}} ssl http2; ssl_certificate {{$AIO_LOCALCERTS_DIR}}/{{$AIO_DOMAIN_NAME}}.crt; ssl_certificate_key {{$AIO_LOCALCERTS_DIR}}/{{$AIO_DOMAIN_NAME}}.key; ssl_prefer_server_ciphers on; ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; access_log {{$AIO_NGINX_LOGS_DIR}}/access.log; error_log {{$AIO_NGINX_LOGS_DIR}}/error.log; # Health check location "~^/health-check/?$" { add_header Content-Type text/plain; return 200 ''; } # Check PRs previewability location "~^/can-have-public-preview/\d+/?$" { if ($request_method != "GET") { add_header Allow "GET"; return 405; } proxy_pass_request_headers on; proxy_redirect off; proxy_method GET; proxy_pass http://{{$AIO_PREVIEW_SERVER_HOSTNAME}}:{{$AIO_PREVIEW_SERVER_PORT}}$request_uri; resolver 127.0.0.1; } # Notify about CircleCI builds location "~^/circle-build/?$" { if ($request_method != "POST") { add_header Allow "POST"; return 405; } proxy_pass_request_headers on; proxy_redirect off; proxy_method POST; proxy_pass http://{{$AIO_PREVIEW_SERVER_HOSTNAME}}:{{$AIO_PREVIEW_SERVER_PORT}}$request_uri; resolver 127.0.0.1; } # Notify about PR changes location "~^/pr-updated/?$" { if ($request_method != "POST") { add_header Allow "POST"; return 405; } proxy_pass_request_headers on; proxy_redirect off; proxy_method POST; proxy_pass http://{{$AIO_PREVIEW_SERVER_HOSTNAME}}:{{$AIO_PREVIEW_SERVER_PORT}}$request_uri; resolver 127.0.0.1; } # Everything else location / { return 404; } }