Nginx – WWW aus HTTPS entfernen

Nginx – WWW aus HTTPS entfernen

Ich möchte um Hilfe bei der folgenden Nginx-Konfiguration bitten, damit URLs wie https://www.mywebsite.comumgeschrieben werden als https://mywebsite.com. Ich verwende derzeit die folgende Konfiguration:

server {
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}
server {
    listen 80;
    server_name mywebsite.com;

    # Some more settings...
}
server {
    listen 443 ssl;
    server_name mywebsite.com;

    ssl_certificate path_to_ssl_certificate;
    ssl_certificate_key path_to_ssl_certificate_key;

    # Some more settings...
}

Falls das wichtig ist: Das von mir verwendete Zertifikat ist ein Wildcard-SSL-Zertifikat, das mit OpenSSL auf dem Server selbst (Ubuntu 12.04) selbst signiert wurde. Was passiert, ist, dass www.mywebsite.comkorrekt zu umgeleitet wird mywebsite.com, aberhttps://www.mywebsite.com nichtWeiterleitung zu https://www.mywebsite.com(d. h., es wwwwird immer noch angezeigt, wenn die Seite in einem Browser angezeigt wird). Was kann ich falsch machen?

Antwort1

Die Lösung besteht darin, den ersten Serverblock wie folgt zu beheben:

server {
    listen 80;
    listen 443;
    server_name www.mywebsite.com;
    return 301 $scheme://mywebsite.com$request_uri;
}

Sie haben beispielsweise vergessen, die Verbindungen von www.mywebsite.com auf dem SSL-Port abzufangen, das ist alles. Übrigens ist das die beste Möglichkeit, www aus dem Site-Namen zu entfernen, gute Wahl.

Antwort2

Ihre Umleitung erfolgt in einem virtuellen Host, der nur auf Port 80 lauscht. Um Anfragen, die über SSL eingehen, umzuleiten, benötigen Sie einen virtuellen Host, der auf Port 443 mit SSL lauscht. Sofern Ihre Browser nicht alle unterstützenSNI, Sie können nur einen virtuellen SSL-Host haben und daher muss die Regel in Ihren vorhandenen SSL- serverBlock eingefügt werden.

if ($host = www.mywebsite.com) {
    rewrite ^ https://mywebsite.com$request_uri? permanent;
}

verwandte Informationen