我们假设我在nginx
上使用www.example.com
运行服务。我有port:80
的全部流量。 https
是必需的。我决定删除example.com/
上的服务,并将用户直接移至example.com/dir/
。
StackOverflow上最流行的解决方案是添加
location = / {
return 301 /dir/;
}
不幸的是,它转发到http://www.example.com/dir/
而不是https://www.example.com/dir/
。我也尝试过:
location = / {
return 301 https://$http_host/dir/;
}
和
location = / {
return 301 https://$host/dir/;
}
但他们都失败了。
另一方面,我可以找到:
location / {
...
}
在此文件中。
这里有两个问题:
location = / {}
和location / {}
之间的区别是什么?答案 0 :(得分:1)
此外,使用“=”修饰符可以定义URI和位置的精确匹配。如果找到完全匹配,则搜索终止。例如,如果频繁发生“/”请求,则定义“location = /”将加速这些请求的处理,因为搜索在第一次比较之后立即终止。这样的位置显然不能包含嵌套位置。
您可以在此处找到有关位置区块的更多信息:Docs
编辑:如下面在使用HTTPS的注释中所述,您必须使用ssl
参数,例如服务器块可能是:
server {
listen 443 ssl;
ssl_certificate /path/to/fullchain.crt;
ssl_certificate_key /path/to/key.pem
location / {
proxy_pass http://xxx.xxx.xxx.xxx:80;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}