diff --git a/docker/web_nginx.conf b/docker/web_nginx.conf index 99f0d829375..8637f55f16e 100644 --- a/docker/web_nginx.conf +++ b/docker/web_nginx.conf @@ -111,6 +111,35 @@ server { return 429 '{"status": 429, "message": "Too Many Requests. Consider using https://openlibrary.org/developers/dumps."}'; } + location /opds/ { + proxy_pass https://ol-opds.prod.archive.org/; + + add_header Access-Control-Allow-Origin "*" always; + add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always; + add_header Access-Control-Allow-Headers "Content-Type, Authorization" always; + + # Handle preflight + if ($request_method = OPTIONS) { + return 204; + } + + add_header X-OPDS-Backend "ol-opds.prod.archive.org" always; + proxy_ssl_server_name on; + proxy_set_header Host ol-opds.prod.archive.org; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + + # optional but usually needed + proxy_redirect off; + } + + location = /opds { + add_header Access-Control-Allow-Origin "*" always; + add_header Access-Control-Allow-Methods "GET, OPTIONS" always; + add_header Access-Control-Allow-Headers "Content-Type" always; + return 308 /opds/; + } + location / { limit_req zone=web_limit burst=100 delay=10; limit_req zone=ua_rate_limit burst=25 delay=10;