Dynamische NGINX-Subdomänenunterstützung für vorhandenes Setup

Dynamische NGINX-Subdomänenunterstützung für vorhandenes Setup

Ich habe also dieses Setup, bei dem NGINX einwandfrei zu funktionieren scheint. Aber die Anforderung besteht jetzt darin, Unterstützung für dynamische Subdomains hinzuzufügen. Ich bin mir nicht sicher, wie das geht. Hilfe wäre sehr willkommen. Auch die Möglichkeit, sowohl für Domain als auch für Subdomain von www auf nicht www umzuleiten. Ich habe online gesucht, aber nichts schien für diese Lösung zu funktionieren.

Was ich versuche zu tun: Derzeit habe ich dieses Setup für normale Nicht-Subdomains. Zum Beispiel exampleDomain.com oderwww.beispieldomain.com. Jetzt möchte ich dynamische Subdomains einführen. zB sub1.exampleDomain.com oder sub50.exampleDomain.com. Das Problem, das ich habe, ist, dass ich nicht richtig auf Subdomains umleiten kann, falls eine existiert. Wenn jemand zB sub2.exampleDomain.com besucht, wird er auf exampleDomain.com umgeleitet. Meine Frage ist, wie ich Subdomains in dieses Setup einführen kann, damitwww.sub3.beispielDomain.comgeht zu sub3.exampleDomain.com/ sub3.exampleDomain.com geht zu sub3.exampleDomain.com undwww.beispieldomain.comgeht zu exampleDomain.com und exampleDomain.com geht zu exampleDomain.com. (Falls das hier Sinn ergibt :) )

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

Antwort1

Wie wäre es mit einem Beispiel aus derHandbuch:

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

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

Passen Sie sich einfach Ihrer Umgebung an.

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

Dies funktioniert nur für Subdomains und ignoriert www.

verwandte Informationen