NGINX: reescribe reglas para subdominios

NGINX: reescribe reglas para subdominios

Tengo un creador web SaaS. Cada inquilino tiene un subdominio.

Para los requisitos comerciales, necesito darle a cada inquilino su propio mapa del sitio. La cuestión no es la parte generacional, sino cómo presentarla.

Por el momento, he generado un mapa del sitio de índice y un mapa del sitio para cada inquilino.

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

Lo que me interesa hacer es crear una regla de reescritura que realizará una solicitud para tenant1.example.com/sitemap.xmlentregar el archivo public/sitemaps/sitemap.tenant1.xmlal que también se puede acceder tenant1.example.com/sitemaps/sitemap.tenant1.xmlen este momento.

¿Es esto posible hacer con una regla de reescritura?

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;
}

Respuesta1

Estás utilizando un bloque general serverpara manejar todos tus subdominios. Entonces, si nombras tus archivos de mapa de sitio XML usando el nombre real del subdominio en el nombre del archivo, entonces esto se vuelve muy fácil.

Por ejemplo, puedes crear un archivo sitemap.tenant1.example.com.xml. Luego puedes cargar ese archivo con un solo locationcon alias:

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

información relacionada