Mehrere Webseiten auf einem Nginx - Google bringt URLs durcheinander

Wolly300

Lieutenant
Registriert
Mai 2014
Beiträge
514
Hallo zusammen,

ich habe gerade folgendes Problem. Ich habe auf einem Linux Server einen Nginx mit mehreren Webseiten laufen. Jede Webseite hat eine eigene Domain, hier einmal zum Beispiel: Domain-A, Domain-B und Domain-C

Irgendwie muss etwas an den Dateien in sites-available falsch konfiguriert sein, weil in Google die Domains vermischt werden. Wenn ich z.B. in Google nach Inhalt-A suche, bekomme ich dazu auch die richtigen Ergebnisse, aber leider nicht unter der Domain-A, sondern Domain-B und Domain-C. Das verrücktest daran, wenn ich auf diese Links klicke, dann kommt vom Browser eine Meldung, dass dies keine Sichere Verbindung ist, aber nach dem Ignorieren, komme ich auf die richtige Webseite, nur unter der falschen Domain.
(Passiert für alle Domains/Webseiten auf diesem Server)

So sehen alle sites-available configs aus:

Code:
# http server block
server {
    listen 80;
    root /var/www/domain-a.de/;
    index index.html index.php;
    server_name domain-a.de;

    # letsencrypt folder
    location ^~ /.well-known/acme-challenge/ {
        allow all;
        root /var/www/letsencrypt/;
        default_type "text/plain";
        try_files $uri =404;
    }

    # http to https redirect
    location / {
        return 301 https://domain-a.de/$request_uri;
    }
}

# https server block
server {
    listen 443 ssl http2;
    server_name domain-a.de;
    root /var/www/domain-a.de/Webseite/;
    index index.html index.php;

    # ssl certificate
    ssl_certificate /etc/letsencrypt/live/domain-a.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain-a.de/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/domain-a.de/chain.pem;
   
    # Strict Transport Security (HSTS)
    add_header Strict-Transport-Security "max-age=63072000" always;
   
    # Enable Search Engine Friendly URLs
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
   
    # security headers
    add_header Referrer-Policy "unsafe-url";
    add_header X-XSS-Protection "1; mode=block";
    add_header Cache-Control "no-transform";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options SAMEORIGIN;
   
    # deny running scripts inside writable directories
    location ~* /(images|cache|media|logs|tmp)/.*\.(php|pl|py|jsp|asp|sh|cgi)$ {
        return 403;
        error_page 403 /403_error.html;
    }
   
    # php config
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include /etc/nginx/fastcgi.conf;
    }
   
    # caching of files
    location ~* \.(ico|pdf|flv)$ {
        expires 1y;
    }
   
    location ~* \.(js|css|png|jpg|jpeg|gif|swf|xml|txt|webp)$ {
        expires 14d;
    }
}

Seht Ihr den Fehler, oder habt eine Ahnung woran das liegen kann?
 
Vielleicht hat sich in /etc/nginx/nginx.conf auch noch irgendwie
eine Config zu den Domains eingeschlichen. Ich hatte das auch mal
eine Zeit lang, das die Zertifikate dort mit eingetragen wurden, da
hatte ich ähnliche Probleme dann.
 
  • Gefällt mir
Reaktionen: Azghul0815
Alle mit php und leiten ins selbe php root verzeichnis?
 
nginx konfiguration ist eine wissenschaft für sich

nginx liefert immer inhalte aus auch unter falschen domain namen! weil ein server immer, als der default server, genommen wird. du musst also im prinzip bei nginx, immer zwingend einen default server definieren der dann nur 404 aus spuckt

und erst dann deine eigenen server zu den eigentlichen domain namen, so dass, nginx die inhalt für Domain A, wirklich nur zu Domain A heraus gibt, und nicht zu Domain B und C

https://nginx.org/en/docs/http/request_processing.html#how_to_prevent_undefined_server_names (hinter das listen sollte hier noch "default_server" stehen und das gleiche nochmal, für https
 
  • Gefällt mir
Reaktionen: Der Lord
add_header Strict-Transport-Security "max-age=0; includeSubdomains; preload" always;

erstmal nur scharf schalten wenn das system bereit ist produktiv eingesetz zu werden. sonst hat man nur kopfschmerzen.

letsencrypt: ist für jede domain ein eigenes zertifikat vorhanden? weiß man auch nicht anhand mangelnder vollständigkeit der configs.
 
tdbr schrieb:
Alle mit php und leiten ins selbe php root verzeichnis?
Ja genau
Ergänzung ()

kieleich schrieb:
nginx konfiguration ist eine wissenschaft für sich

nginx liefert immer inhalte aus auch unter falschen domain namen! weil ein server immer, als der default server, genommen wird. du musst also im prinzip bei nginx, immer zwingend einen default server definieren der dann nur 404 aus spuckt

und erst dann deine eigenen server zu den eigentlichen domain namen, so dass, nginx die inhalt für Domain A, wirklich nur zu Domain A heraus gibt, und nicht zu Domain B und C

https://nginx.org/en/docs/http/request_processing.html#how_to_prevent_undefined_server_names (hinter das listen sollte hier noch "default_server" stehen und das gleiche nochmal, für https
Ja, ich habs gesehen, mein default file ist falsch, aber wie mache ich das mit dem SSL? Für welche Domain soll ich da ein Zertifikat holen?
Ergänzung ()

mikesh schrieb:
add_header Strict-Transport-Security "max-age=0; includeSubdomains; preload" always;

erstmal nur scharf schalten wenn das system bereit ist produktiv eingesetz zu werden. sonst hat man nur kopfschmerzen.

letsencrypt: ist für jede domain ein eigenes zertifikat vorhanden? weiß man auch nicht anhand mangelnder vollständigkeit der configs.
Ok, thx

Ja, jede Domain hat Ihr eigenes Zertifikat.
 
das zertifikat für den default server wird eh immer falsch sein, da kannst du ein self signed nehmen

oder, wenn du absolut eins von letsencrypt willst. manche hoster geben auf den server einen default host namen ( vserver123456.hostname.de o.ä. ) da könnte man dieses als default server hostname nehmen

oder du machst eine subdomain badservername.deinedomain.de ... aber mir ist lieber mein realer domian name tauch bei sowas gar nicht erst auf
 
Zurück
Oben