Duplizierung in der Nginx-Weiterleitungskonfiguration vermeiden?

Duplizierung in der Nginx-Weiterleitungskonfiguration vermeiden?

Weiterleitungen einrichtenwwwnicht-wwwUndHTTPHTTPSgleichzeitig bin ich auf ein Duplizierungsproblem gestoßen, das ich nicht beheben konnte.

Auf meiner Domain – lassen Sie es so sein example.com– habe ich eine Website mit dem primären Namen another.example.com. Ich möchte, dass die Anfragen an example.com, www.example.com, und www.another.example.coman umgeleitet werden another.example.comund dass alle HTTP-Anfragen gleichzeitig an HTTPS umgeleitet werden; ich möchte auch HTTP/2 und IPv6 unterstützen.

Ich habe keine Probleme damit, dies zum Laufen zu bringen, aber ich schaffe es nicht, die Duplizierung eines wesentlichen Teils der Konfigurationsdatei (nämlich der HTTPS-Zertifikatseinstellungen) zu vermeiden. Alle Versuche, die Duplizierung zu reduzieren, führen dazu, dass eine oder mehrere oder alle Weiterleitungen nicht mehr funktionieren (manchmal zusammen mit HTTP/2).

Bitte werfen Sie einen Blick auf die Konfiguration und machen Sie Vorschläge zur Bereinigung:

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

server {
    listen 443;
    listen [::]:443;
    server_name www.another.example.com www.example.com example.com;
    return 301 https://another.example.com$request_uri;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    server_name another.example.com;
    root /usr/share/nginx/another.example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    listen [::]:443 ssl http2;
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

Antwort1

server {
    server_name another.example.com;
    root /usr/share/nginx/another.example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    listen [::]:443 ssl http2;
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name www.another.example.com www.example.com example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    rewrite ^/(.*)$ https://another.example.com/$1 permanent;
}
server {
    listen 80;
    listen [::]:80;
    server_name www.another.example.com www.example.com another.example.com example.com;
    location / {
        if ($host !~* ^(www)) {
          rewrite ^/(.*)$ https://another.example.com/$1 permanent;
        }
    }
}

verwandte Informationen