Beim Versuch, https://example.com zu https://www.example.com umzuleiten, ist ein Fehler aufgetreten .
Wenn ich zu https://example.com gehe, wird der page / 200-Status nicht umgeleitet und zurückgegeben.
Ich möchte das nicht, ich möchte, dass es zu https://www.example.com umleitet .
Wenn ich zu http://example.com gehe , wird auf https://www.example.com weitergeleitet
Kann mir jemand sagen, wo ich falsch liege?
Dies sind meine Standard- und Standard-SSL-Konfigurationsdateien:
default.conf
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
default-ssl.conf
upstream app_server_ssl {
server unix:/tmp/unicorn.sock fail_timeout=0;
}
server {
server_name example.com;
return 301 https://www.example.com$request_uri
}
server {
server_name www.example.com;
listen 443;
root /home/app/myproject/current/public;
index index.html index.htm;
error_log /srv/www/example.com/logs/error.log info;
access_log /srv/www/example.com/logs/access.log combined;
ssl on;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /srv/www/example.com/keys/ssl.crt;
ssl_certificate_key /srv/www/example.com/keys/www.example.com.key;
ssl_ciphers AES128-SHA:RC4-MD5:ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:RSA+3DES:!ADH:!AECDH:!MD5:AES128-SHA;
ssl_prefer_server_ciphers on;
client_max_body_size 20M;
try_files $uri/index.html $uri.html $uri @app;
# CVE-2013-2028 http://mailman.nginx.org/pipermail/nginx-announce/2013/000112.html
if ($http_transfer_encoding ~* chunked) {
return 444;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server_ssl;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/app/example/current/public;
}
}
nginx
ssl
ssl-certificate
https
Thomas V.
quelle
quelle
Antworten:
listen
In der Datei fehlt eine Anweisungdefault-ssl.conf
. Fügen Sielisten 443;
in dieser Direktive hinzuWenn Sie diese Anweisung weglassen, geht nginx standardmäßig davon aus, dass Sie Port 80 überwachen möchten. Hier die Dokumentation dieses Standardverhaltens.
Edit: Danke für den Kommentar von @TeroKilkanen.
Hier die komplette Konfiguration für deine default-ssl.conf
Anmerkung : Sie können die
ssl on;
Direktive durchlisten 443 ssl;
eine Empfehlung aus der Nginx-Dokumentation ersetzen .quelle
ssl_certificate
undssl_certificate_key
Anweisungen einrichten und verwenden,listen 443 ssl;
damit es sich um einen SSL-vhost handelt.default-ssl.conf
. Vielleicht hat ein Tippfehler oder ein Nachbestellungsproblem das verursacht.Geben Sie einfach eine if-Anweisung ein und Sie sollten auf dem Weg sein. Ich habe die Ergebnisse in curl.exe -I überprüft und alle Fälle außer https://www.example.com werden als 301 behandelt. SSL ist schwierig, da es überprüft wird, bevor Sie die Umleitung von 301-URLs erhalten. Daher erhalten Sie Zertifikatfehler.
Persönlich entferne ich gerne die WWWs von der Domain, aber ich habe meinen Code unten geschrieben, um Ihre Frage zu beantworten.
quelle
Ich verwende dazu eine if-Anweisung innerhalb des SSL-Serverblocks, die zu https von www umleitet
Natürlich, wann immer Sie eine if-Anweisung in einer nginx-Konfigurationsdatei verwenden möchten; Sie sollten gelesen haben: https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/
quelle
if ($host = 'www.example.com')
ist nicht erforderlich.Es ist jetzt 2018 und ich dachte mir, dass ich es noch einmal versuchen sollte, falls jemand nach einer einfachen Lösung sucht.
Mein Ansatz als relativ Neuling ist es, die Dinge so einfach wie möglich zu gestalten. Grundsätzlich möchten Sie sowohl http://example.com als auch https://example.com zu https : // www .example.com umleiten . Und dass es Ihnen nur gelingt, http://example.com umzuleiten
Dies ist eine recht einfache Operation, die nur zwei Serverblöcke erfordert (ich werde dies kurz in einer einzigen Konfigurationsdatei demonstrieren).
Jetzt sollten sowohl http://example.com als auch https://example.com zu https://www.example.com umleiten . Grundsätzlich leitet dieses Setup alles, was nicht unter www und / oder unter https angegeben ist, an https: // www weiter .
quelle
Umleiten aller Anfragen an
https://www.example
Erstellen Sie einen Serverblock für die Umleitungs- und Primärdomäne auf Ihrem SSL-Port (normalerweise 443) sowie auf dem Standard-HTTP-Port 80
speichern und mit folgen
sudo nginx -s reload
Dies wird umleiten
quelle
;
In der if-Klausel fehlt im zweiten Serverblock ein. Es sollte seinreturn 301 https://www.example.com$request_uri;
http
auf443
?