“=”的含义在nginx.conf中签名

时间:2016-06-23 09:36:03

标签: http nginx https configuration http-redirect

我们假设我在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 / {
    ...
}

在此文件中。

这里有两个问题:

  1. location = / {}location / {}之间的区别是什么?
  2. 我的问题是否有任何配置技巧?

1 个答案:

答案 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;
            }
}