diff --git a/services/nginx/config/default.conf b/services/nginx/config/default.conf index 48ae5e059..0cb593b29 100644 --- a/services/nginx/config/default.conf +++ b/services/nginx/config/default.conf @@ -26,6 +26,14 @@ map $uri $is_entity_path { ~^/[A-Za-z_]+:[A-Za-z0-9_.-]+$ 1; } +# True when request is from a bot AND targets an entity path. +# Bots hitting entity pages get proxied to the API meta endpoint +# for link-preview HTML; everyone else gets the SPA. +map "$is_bot:$is_entity_path" $serve_meta { + default 0; + "1:1" 1; +} + upstream api { server api:8000; } @@ -36,31 +44,22 @@ server { server_name _; - # Main location - handle bot detection for entity pages location / { root /var/www; index index.html; - # If it's a bot AND an entity path, proxy to meta endpoint - set $serve_meta 0; - if ($is_bot = 1) { - set $serve_meta "B"; - } - if ($is_entity_path = 1) { - set $serve_meta "${serve_meta}E"; - } + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - # Both conditions met - proxy to backend meta endpoint - if ($serve_meta = "BE") { + # Serve link-preview HTML to bots visiting entity pages + if ($serve_meta = 1) { rewrite ^/(.*)$ /v3/api/meta/$1 break; proxy_pass http://api; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } - # Regular users get the SPA + # Everyone else gets the SPA try_files $uri /index.html; }