Ich habe eine Anmeldeseite auf einer Subdomain wie: https://signup.example.com
Sie sollte nur über HTTPS zugänglich sein, aber ich bin besorgt, dass die Leute irgendwie über HTTP darauf stolpern und eine 404 erhalten könnten.
Mein html/Server-Block in nginx sieht wie folgt aus:
html {
server {
listen 443;
server_name signup.example.com;
ssl on;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
ssl_session_timeout 30m;
location / {
root /path/to/my/rails/app/public;
index index.html;
passenger_enabled on;
}
}
}
Was kann ich hinzufügen, damit Leute, die auf http://signup.example.com
gehen, auf https://signup.example.com
umgeleitet werden? (Zu Ihrer Information: Ich weiß, dass es Rails-Plugins gibt, die SSL
erzwingen können, aber ich hoffte, das zu vermeiden)
Laut nginx pitfalls ist es etwas besser, die unnötige Erfassung wegzulassen und stattdessen $request_uri
zu verwenden. In diesem Fall fügen Sie ein Fragezeichen an, um zu verhindern, dass Nginx die Abfrage-Args verdoppelt.
server {
listen 80;
server_name signup.mysite.com;
rewrite ^ https://$server_name$request_uri? permanent;
}
Wenn Sie die neue duale HTTP- und HTTPS-Serverdefinition verwenden, können Sie Folgendes tun:
server {
listen 80;
listen [::]:80;
listen 443 default ssl;
server_name www.example.com;
ssl_certificate /path/to/my/cert;
ssl_certificate_key /path/to/my/key;
if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}
}
Dies scheint bei mir zu funktionieren und verursacht keine Umleitungsschleifen.
Edit:
Ersetzt:
rewrite ^/(.*) https://$server_name/$1 permanent;
mit Pratik's Rewrite-Zeile.
Stellen Sie sicher, dass Sie Cookies auf 'sicher' setzen, sonst werden sie mit der HTTP-Anfrage gesendet und könnten von einem Tool wie Firesheep abgefangen werden.