Soporte de subdominio dinámico NGINX para configuración existente

Soporte de subdominio dinámico NGINX para configuración existente

Tengo esta configuración en la que NGINX parece funcionar bien. Pero el requisito ahora es agregar soporte para subdominios dinámicos. No estoy seguro de cómo hacerlo. La ayuda sería muy apreciada. También para poder redirigir desde www a no www tanto para el dominio como para el subdominio. Busqué en línea pero nada parecía funcionar para esta solución.

Lo que estoy intentando hacer: actualmente tengo esta configuración para subdominios normales. Por ejemplo ejemploDominio.com owww.ejemplodominio.com. Ahora quiero presentar subdominios dinámicos. por ejemplo, sub1.exampleDomain.com o sub50.exampleDomain.com. El problema que tengo es que no puedo redirigir correctamente a los subdominios, si existe alguno. por ejemplo, si alguien visita sub2.exampleDomain.com, será redirigido a exampleDomain.com. Mi pregunta es ¿cómo puedo introducir subdominios en esta configuración para quewww.sub3.dominioejemplo.comva a sub3.exampleDomain.com/ sub3.exampleDomain.com va a sub3.exampleDomain.com ywww.ejemplodominio.comva a exampleDomain.com y exampleDomain.com va a exampleDomain.com. (Si algo de esto tiene sentido :))

server {
        listen 80;
        listen [::]:80;
        server_name exampleDomain.com www.exampleDomain.com;

        location ~ /.well-known/acme-challenge {
                allow all;
                root /var/www/html;
        }

        location / {
                return 301 https://exampleDomain.com$request_uri?;
        }
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name www.exampleDomain.com;

        server_tokens off;

        ssl_certificate /etc/letsencrypt/live/exampleDomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/exampleDomain.com/privkey.pem;

        ssl_buffer_size 8k;

        ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;

        ssl_protocols TLSv1.3 TLSv1.2;
        ssl_prefer_server_ciphers on;

        ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

        ssl_ecdh_curve secp384r1;
        ssl_session_tickets off;

        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 8.8.8.8;

        return 301 https://exampleDomain.com$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        server_name exampleDomain.com;
        server_tokens off;

        gzip on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
        gzip_min_length  500;
        gzip_buffers  4 32k;
        gzip_types  text/plain text/css application/javascript application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/svg;
        gzip_vary on;

        ssl_certificate /etc/letsencrypt/live/exampleDomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/exampleDomain.com/privkey.pem;

        ssl_buffer_size 8k;

        ssl_dhparam /etc/ssl/certs/dhparam-2048.pem;

        ssl_protocols TLSv1.3 TLSv1.2;
        ssl_prefer_server_ciphers on;

        ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

        ssl_ecdh_curve secp384r1;
        ssl_session_tickets off;

        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 8.8.8.8;

        location ~*  \.(jpg|jpeg|png|gif|ico)$ {
                expires 365d;
        }

        location / {
                try_files $uri @nodejs;
        }

        location @nodejs {
                proxy_pass http://nodejs:8080;
                add_header X-Frame-Options "SAMEORIGIN" always;
                add_header X-XSS-Protection "1; mode=block" always;
                add_header X-Content-Type-Options "nosniff" always;
                add_header Referrer-Policy "no-referrer-when-downgrade" always;
                add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
                # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
                # enable strict transport security only if you understand the implications
        }

        location /graphql {
                proxy_pass http://nodejs:8080;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
        }

        root /var/www/html;
        index index.html index.htm index.nginx-debian.html;
}

Respuesta1

¿Qué tal un ejemplo delmanual:

server {
    server_name   ~^(www\.)?(?<domain>.+)$;

    location / {
        root   /sites/$domain;
    }
}

Simplemente adopta a tu entorno.

server_name ~^(www\.)?(?<subdom>[^\.]*)\.your-external-domain\.com$;
location / {
    root   /sites/$subdom;
}

Esto sólo funciona para subdominios, ignorando www.

información relacionada