diff --git a/reverse-proxy/conf.d.dev/default.conf b/reverse-proxy/conf.d.dev/default.conf index 9cdbf3b66..2f107183f 100644 --- a/reverse-proxy/conf.d.dev/default.conf +++ b/reverse-proxy/conf.d.dev/default.conf @@ -6,17 +6,20 @@ server { rewrite ^/api/archival/(.*)$ /$1 break; proxy_pass http://archival-api:80; include loc-includes/*; + include svr-includes/headers.conf; } location ^~ /api/directory/ { rewrite ^/api/directory/(.*)$ /$1 break; proxy_pass http://directory-api:80; include loc-includes/*; + include svr-includes/headers.conf; } location ^~ /api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://api-docs:8080; include loc-includes/*; + include svr-includes/headers.conf; } } \ No newline at end of file diff --git a/reverse-proxy/conf.d/default.conf b/reverse-proxy/conf.d/default.conf index 0ac024f7f..d0350d5b3 100644 --- a/reverse-proxy/conf.d/default.conf +++ b/reverse-proxy/conf.d/default.conf @@ -9,23 +9,27 @@ server { rewrite ^/api/archival/(.*)$ /$1 break; proxy_pass http://archival-api:80; include loc-includes/*; + include svr-includes/headers.conf; } location ^~ /api/directory/ { rewrite ^/api/directory/(.*)$ /$1 break; proxy_pass http://directory-api:80; include loc-includes/*; + include svr-includes/headers.conf; } location ^~ /api/ { rewrite ^/api/(.*)$ /$1 break; proxy_pass http://api-docs:8080; include loc-includes/*; + include svr-includes/headers.conf; } location / { proxy_pass http://web:80; include loc-includes/*; + include svr-includes/headers.conf; } } diff --git a/reverse-proxy/loc-includes/cors.conf b/reverse-proxy/loc-includes/cors.conf new file mode 100644 index 000000000..84f1c78c8 --- /dev/null +++ b/reverse-proxy/loc-includes/cors.conf @@ -0,0 +1,31 @@ +# https://enable-cors.org/server_nginx.html +# +# Wide-open CORS config for nginx +# +if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + # + # Custom headers and headers various browsers *should* be OK with but aren't + # + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + # + # Tell client that this pre-flight info is valid for 20 days + # + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + return 204; +} +if ($request_method = 'POST') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; +} +if ($request_method = 'GET') { + add_header 'Access-Control-Allow-Origin' '*'; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; + add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; + add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; +} \ No newline at end of file diff --git a/reverse-proxy/svr-includes/headers.conf b/reverse-proxy/svr-includes/headers.conf index 4bb10a733..227cd6d32 100644 --- a/reverse-proxy/svr-includes/headers.conf +++ b/reverse-proxy/svr-includes/headers.conf @@ -1,37 +1,6 @@ +add_header Referrer-Policy "no-referrer" always; +add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; -add_header Referrer-Policy "no-referrer" always; -add_header Content-Security-Policy "default-src 'none'; connect-src 'self'; img-src 'self' validator.swagger.io data:; manifest-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'none'; frame-ancestors 'none';" always; - -# https://enable-cors.org/server_nginx.html -# -# Wide-open CORS config for nginx -# -if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - # - # Custom headers and headers various browsers *should* be OK with but aren't - # - add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; - # - # Tell client that this pre-flight info is valid for 20 days - # - add_header 'Access-Control-Max-Age' 1728000; - add_header 'Content-Type' 'text/plain; charset=utf-8'; - add_header 'Content-Length' 0; - return 204; -} -if ($request_method = 'POST') { - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; - add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; -} -if ($request_method = 'GET') { - add_header 'Access-Control-Allow-Origin' '*'; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; - add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range'; - add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range'; -} \ No newline at end of file +add_header Content-Security-Policy "default-src 'none'; connect-src 'self'; img-src 'self' validator.swagger.io data:; manifest-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; base-uri 'self'; form-action 'none'; frame-ancestors 'none';" always; \ No newline at end of file diff --git a/reverse-proxy/svr-includes/security.conf b/reverse-proxy/svr-includes/security.conf index a98128d7f..99cc9632e 100644 --- a/reverse-proxy/svr-includes/security.conf +++ b/reverse-proxy/svr-includes/security.conf @@ -13,8 +13,6 @@ ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; -add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; - # https://support.cloudflare.com/hc/en-us/articles/204899617-Authenticated-Origin-Pulls