
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.xml
entregar el archivo public/sitemaps/sitemap.tenant1.xml
al que también se puede acceder tenant1.example.com/sitemaps/sitemap.tenant1.xml
en 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 server
para 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 location
con alias
:
location = /sitemap.xml {
alias /unix/path/to/sitemap.$host.xml;
}