openvibers/openvibe.coupons Commits
Coupons: nginx hardening from the pre-launch security review (#22)
Changes
@@@ -15,6 +15,9 @@ limit_req_zone $binary_remote_addr zone=ovcoupons_lookup:10m rate=5r/s;limit_req_zone $binary_remote_addr zone=ovcoupons_api:10m rate=5r/s;limit_req_zone $binary_remote_addr zone=ovcoupons_auth:10m rate=10r/m;limit_req_zone $binary_remote_addr zone=ovcoupons_forms:10m rate=2r/s;++# Pages per address; the sitemaps, feeds and llms-full.txt (each reads every public row) slower.++limit_req_zone $binary_remote_addr zone=ovcoupons_pages:10m rate=10r/s;++limit_req_zone $binary_remote_addr zone=ovcoupons_index:10m rate=30r/m;server {listen 80;@@@ -97,13 +100,21 @@ server {}# ── The Events webhook: OpenVibe.Events delivers over loopback, never through the public vhost ──-- location /internal/ { return 404; }++ location ~* ^/internal(/|$) { return 404; }# ── Prometheus metrics: host-local scrapers only (http://127.0.0.1:4850/metrics) ──-- location = /metrics { return 404; }++ location ~* ^/metrics(/|$) { return 404; }++++ # ── Sitemaps, feeds and llms-full.txt: built from every public row on each request ──++ location ~* ^/(sitemap[^/]*\.xml|sitemaps/|llms-full\.txt|feed\.|atom\.xml|.*/feed\.xml$) {++ limit_req zone=ovcoupons_index burst=10 nodelay;++ proxy_pass http://127.0.0.1:4850;++ }# ── Pages, feeds, sitemaps, robots.txt, llms.txt, static assets ──++ # (No proxy_set_header here: one would drop every server-level header, Host and X-Forwarded-Proto included.)location / {++ limit_req zone=ovcoupons_pages burst=40 nodelay;proxy_pass http://127.0.0.1:4850;}
@@ -15,6 +15,9 @@ limit_req_zone $binary_remote_addr zone=ovcoupons_lookup:10m rate=5r/s;
@@ -15,6 +15,9 @@ limit_req_zone $binary_remote_addr zone=ovcoupons_lookup:10m rate=5r/s;
limit_req_zone $binary_remote_addr zone=ovcoupons_api:10m rate=5r/s;
limit_req_zone $binary_remote_addr zone=ovcoupons_api:10m rate=5r/s;
limit_req_zone $binary_remote_addr zone=ovcoupons_auth:10m rate=10r/m;
limit_req_zone $binary_remote_addr zone=ovcoupons_auth:10m rate=10r/m;
limit_req_zone $binary_remote_addr zone=ovcoupons_forms:10m rate=2r/s;
limit_req_zone $binary_remote_addr zone=ovcoupons_forms:10m rate=2r/s;
+# Pages per address; the sitemaps, feeds and llms-full.txt (each reads every public row) slower.
+limit_req_zone $binary_remote_addr zone=ovcoupons_pages:10m rate=10r/s;
+limit_req_zone $binary_remote_addr zone=ovcoupons_index:10m rate=30r/m;
server {
server {
listen 80;
listen 80;
@@ -97,13 +100,21 @@ server {
@@ -97,13 +100,21 @@ server {
}
}
# ── The Events webhook: OpenVibe.Events delivers over loopback, never through the public vhost ──
# ── The Events webhook: OpenVibe.Events delivers over loopback, never through the public vhost ──
- location /internal/ { return 404; }
+ location ~* ^/internal(/|$) { return 404; }
# ── Prometheus metrics: host-local scrapers only (http://127.0.0.1:4850/metrics) ──
# ── Prometheus metrics: host-local scrapers only (http://127.0.0.1:4850/metrics) ──
- location = /metrics { return 404; }
+ location ~* ^/metrics(/|$) { return 404; }
+
+ # ── Sitemaps, feeds and llms-full.txt: built from every public row on each request ──
+ location ~* ^/(sitemap[^/]*\.xml|sitemaps/|llms-full\.txt|feed\.|atom\.xml|.*/feed\.xml$) {
+ limit_req zone=ovcoupons_index burst=10 nodelay;
+ proxy_pass http://127.0.0.1:4850;
+ }
# ── Pages, feeds, sitemaps, robots.txt, llms.txt, static assets ──
# ── Pages, feeds, sitemaps, robots.txt, llms.txt, static assets ──
+ # (No proxy_set_header here: one would drop every server-level header, Host and X-Forwarded-Proto included.)
location / {
location / {
+ limit_req zone=ovcoupons_pages burst=40 nodelay;
proxy_pass http://127.0.0.1:4850;
proxy_pass http://127.0.0.1:4850;
}
}