Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 15 additions & 16 deletions services/nginx/config/default.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand All @@ -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;
}

Expand Down