NGINX - Reescrever regras para subdomínios

NGINX - Reescrever regras para subdomínios

Eu tenho um construtor de sites SaaS. Cada inquilino possui um subdomínio.

Para requisitos comerciais, preciso fornecer a cada inquilino seu próprio mapa do site. A parte da geração não é a questão, mas como apresentá-la.

No momento, gerei um mapa do site de índice e um mapa do site para cada locatário.

$ ls public/sitemaps
sitemap.tenant1.xml
sitemap.tenant2.xml

O que estou interessado em fazer é criar uma regra de reescrita que fará uma solicitação para tenant1.example.com/sitemap.xmlservir o arquivo public/sitemaps/sitemap.tenant1.xmlque também está acessível tenant1.example.com/sitemaps/sitemap.tenant1.xmlno momento.

Isso é possível com uma regra de reescrita?

Extras

cat /etc/nginx/sites-enabled/example.com

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
  listen 80;
  server_name example.com;
  return 301 $scheme://www.example.com$request_uri;
}

upstream app {
    server localhost:3000 max_fails=3 fail_timeout=300;
}


server {
    listen 443 ssl;
    server_name *.example.com;

    root /var/www/app/public;

    ssl_certificate /etc/ssl/app.crt;
    ssl_certificate_key /etc/ssl/app.key;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam ...;
    ssl_ciphers ...;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;
    server_tokens off;

    try_files $uri/index.html $uri @app;

    location @app {
        proxy_pass http://app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

Responder1

Você está usando um bloco genérico serverpara lidar com todos os seus subdomínios. Portanto, se você nomear seus arquivos de mapa do site XML usando o nome real do subdomínio no nome do arquivo, isso será muito fácil.

Por exemplo, você pode criar um arquivo sitemap.tenant1.example.com.xml. Então você pode carregar esse arquivo com um único locationcom alias:

location = /sitemap.xml {
    alias /unix/path/to/sitemap.$host.xml;
}

informação relacionada