Ich möchte alle Anfragen an https umleiten. Es funktioniert jetzt für die Hauptseite, also versuche ich, http://domain.com auf https umzuleiten. Aber dann gehe ich auf einen Sublink wie http://domain.com/somematerials/presentation, der mich nie umleitet. Und hier ist meine Konfig.
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name my.domain.com;
ssl on;
ssl_certificate/path/ssl.crt;
ssl_certificate_key/path/server.key;
location/{
root /home/uploader/datadir/;
index index.html index.htm;
}
}
Ihr Port 80 Serverblock ist nicht der Standard. Versuchen Sie default_server
in Ihrer Port 80-Definition hinzuzufügen.
server {
listen 80 default_server;
....
}
Unten ist die getestete und richtig funktionierende Konfiguration:
server {
listen 80; # Default listen port
server_name mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443;
ssl on ;
server_name mydomain.com;;
....
}
Noch eine Möglichkeit, dies zu tun:
server {
listen 80; # Default listen port
if ( $host = domain.com ) { rewrite ^/(.*)$ https://domain.com/$1 permanent; }
server_name domain.com;
......
}
server {
listen 443;
ssl on;
server_name domain.com;
ssl_certificate/etc/nginx/conf.d/certificates/domain.com.crt;
ssl_certificate_key/etc/nginx/conf.d/certificates/domain.com.key;
.......
}
Das Hauptproblem für meine Augen ist, dass Sie die Anweisung server_name überhaupt nicht verwenden, damit nginx nicht weiß, wie es umgeschrieben wird. Wenn das SSL-Bit entfernt wurde:
server {
listen 80;
server_name *.mydomain.com mydomain.com
return 301 https://$host$request_uri;
}
server {
listen 443;
#include snippets/certloc.conf
server_name my.domain.com;
location/{
root/home/uploader/datadir/;
index index.html index.htm;
}
}