2016-06-04 8 views
1

Ich habe versucht, dies für eine Weile herauszufinden.Umleiten aller Verkehr zu https: // www. auf nginx

Ich möchte den gesamten Verkehr zu https umleiten, egal was der Benutzer in die URL-Leiste eingibt.

Aufgrund der Sitzungen entweder es sein muss immer NO-WWW oder immer mit WWW

Hier ist meine aktuelle nginx Config.

Welche Änderung müsste ich vornehmen, um alles bis https umzuleiten?

server { 
    listen 80; 
    listen 443; 

    server_name example.com www.example.com; 
    access_log /var/log/nginx/example-access.log; 
    error_log /var/log/nginx/example-error.log; 
    root /var/www/html/web; 

    index index.html index.htm index.php; 

    location/{ 
    try_files $uri $uri/ /index.php$uri?$args; 
    } 

    rewrite ^/backend\.php/?(.*)$ /$1 permanent; 
    location /admin { 
    index admin content backend.php; 
    try_files $uri @rewriteapp; 
    } 

location @rewriteapp { 
    rewrite ^(.*)$ /backend.php/$1 last; 
    } 

location ~ "^(.+\.php)($|/)" { 
    fastcgi_split_path_info ^(.+\.php)(.*)$; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    fastcgi_param SCRIPT_NAME $fastcgi_script_name; 
    fastcgi_param PATH_INFO $fastcgi_path_info; 
    fastcgi_pass 127.0.0.1:9000; 
    include  fastcgi_params; 
    } 
} 
+0

Serverfault hat die [vollständigste Antwort] (http://serverfault.com/questions/67316/in-nginx-how-can-i-rewrite-all-http-requests-thtps-while-aintaining- sub-dom), ist die Idee, 'server_name' sowohl mit WWW als auch mit NON-WWW zu verbinden und dann' 301 https //: ... 'für alles auf einen anderen Server zurückzugeben. Im Wesentlichen benötigen Sie zwei Serverblöcke. – grochmal

+0

Die Seite wird nicht richtig umgeleitet Firefox hat festgestellt, dass der Server die Anforderung für diese Adresse auf eine Weise umleitet, die nie abgeschlossen wird. Dieses Problem kann manchmal dadurch verursacht werden, dass Cookies deaktiviert oder abgelehnt werden. - klare Cookies kein Unterschied – smugford

+0

Ich fügte eine Antwort hinzu, weil es für einen Kommentar zu groß war. Siehe Hinweis in der Antwort, '301' ist ziemlich gefährlich zum Testen, weil der Browser sich daran erinnert und kein weiteres GET (oder POST) an eine URL ausgibt, für die es eine' 301' erhalten hat. – grochmal

Antwort

0

Sie benötigen zwei Server blockiert, das ist die beste Praxis mit nginx

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

server { 
    listen 443 ssl; 
    server_name example.com www.example.com; 

    ssl_certificate  mycert.crt; 
    ssl_certificate_key mycert.key; 
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   HIGH:!aNULL:!MD5; 

    ... (all the locations, index and etecetras) 
} 

Beachten Sie, dass listen 443 ssl-enable ssl verwenden. Sonst nginx wäre völlig zufrieden in der Bereitstellung von Inhalten über HTTP auf Port 443.

Ich sehe nicht die SSL-Zertifikate oder erlaubte Protokolle/Chiffren in Ihrer Frage, daher habe ich sie in der Antwort nur für den Fall hinzugefügt.


Beachten Sie, dass 301 von Browsern erinnert wird. Sobald ein Browser eine 301 sieht, wird er für immer umgeleitet (oder bis Sie seinen Cache zerstören). Für Debugging-Zwecke ist es besser, 302 zu verwenden und dann zu 301 in Produktion zu ändern.

Verwandte Themen