我有两个服务器块。它们都做类似的事情:允许我使用 https。
现在我只是想知道,在一种情况下,我将所有流量从 http 重定向到 https。在另一种情况下,似乎我允许 https。
有人能给我解释一下有什么区别吗?自从我申请域名以来,即使http://test.example.com,在两种情况下我仍然会重定向到 https。
有什么区别吗?
以下是两个文件:
文件 1-将 http 重定向到 https
server {
listen 80;
listen [::]:80;
server_name test.example.com
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
root /var/www/test/staging/current;
index index.php index.html index.htm index.nginx-debian.html;
server_name test.example.com;
include snippets/ssl-test.example.com.conf;
include snippets/ssl-params.conf;
location / {
try_files $uri $uri/ =404;
}
}
文件 2 - 添加 https
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
root /var/www/test/staging/current;
index index.php index.html index.htm index.nginx-debian.html;
server_name test.example.com;
include snippets/ssl-test.example.com.conf;
include snippets/ssl-params.conf;
location / {
try_files $uri $uri/ =404;
}
}
答案1
从您问题的详细信息来看,文件 2 似乎接受两者的连接,http
并且https
不需要从一个重定向到另一个。
然而:
- 您的应用程序可能会强制连接处于 状态
https
,从而导致重定向(如果http
检测到),或者 - 您的
ssl-params.conf
文件可能包含严格的运输安全导致浏览器强制连接https
答案2
第二个配置不应该重定向。当您之前测试第一个配置时,您的浏览器可能缓存了重定向(缓存很难删除,请尝试其他浏览器(配置文件))。
$scheme = http
而且,当您匹配然后重定向时,您仍然可以使用带有重定向的第二个配置。这可以简化您的配置。