我想将所有请求重定向到 https。它现在适用于主页,所以我尝试获取http://域名.com它会将我重定向到 https。但随后我继续使用子链接,例如http://domain.com/somematerials/presentation它从不重定向我。这是我的配置。
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;
}
}
答案1
您的端口 80 服务器块不是默认的。请尝试添加default_server
您的端口 80 定义。
server {
listen 80 default_server;
....
}
答案2
以下是经过测试且正常工作的配置:
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;;
....
}
还有一种方法可以做到这一点:
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;
.......
}
答案3
在我看来,主要问题是您根本没有使用 server_name 指令,因此 nginx 不知道它重写了什么。删除 SSL 位后:
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;
}
}