
Mein aktuelles nginx.conf
sieht ungefähr so aus:
server {
listen 80;
server_name www.example.com;
root /var/www/;
location / {
}
location /users {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
server {
listen 443 ssl;
server_name www.example.com;
root /var/www/;
location /users {
}
location / {
rewrite ^ http://$http_host$request_uri? permanent;
}
}
Mit dieser Konfiguration wechselt die Verbindung von/zu SSL/Nicht-SSL, wenn ein Benutzer durch die Seiten der Site navigiert, SSL für URLs, die mit beginnen, /users
und Nicht-SSL für alle anderen URLs. Das Ergebnis ist, dass die resultierende Seite, selbst wenn der Benutzer explizit https://www.example.com/
in die Adressleiste des Browsers eingibt, zu umgeleitet wird http://www.example.com/
.
Gibt es eine Möglichkeit, die automatische URL-Umschreibung zwischen SSL/Nicht-SSL wie durch die obigen Einstellungen zu implementieren, aber trotzdem die explizite SSL-Anforderung zu berücksichtigen, wenn sie https://
vom Benutzer explizit in die Adressleiste des Browsers eingegeben wird?
Antwort1
Aus Serversicht gibt es keine Möglichkeit, die Anfrage durch das Folgen eines Links, das Crawlen einer Site oder das Eingeben der vollständigen Adresse in die Adressleiste zu unterscheiden.
Wenn Sie eine Adresse eingeben, sendet der Webbrowser eine HTTP-Anfrage an Ihren Webserver. Wenn Sie https eingegeben haben, wird versucht, eine Verbindung zu Port 443 herzustellen (standardmäßig). Die Anfrageheader enthalten keine Informationen darüber, ob der Benutzer die Anfrage eingegeben hat oder ob die Anfrage beispielsweise von einem Bot gecrawlt wurde.
Sie können lediglich SSL für bestimmte Benutzeragenten beibehalten und für andere umleiten.