【问题标题】:The meaning of '=' sign in nginx.confnginx.conf中'='符号的含义
【发布时间】:2016-10-25 13:24:57
【问题描述】:

假设我在www.example.com 上使用nginx 运行服务。我有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. 有什么配置技巧可以解决我的问题吗?

【问题讨论】:

    标签: http nginx https configuration http-redirect


    【解决方案1】:

    此外,使用“=”修饰符可以定义 URI 和位置的精确匹配。如果找到完全匹配,则搜索终止。例如,如果“/”请求频繁发生,定义“location = /”将加速这些请求的处理,因为搜索在第一次比较后立即终止。这样的位置显然不能包含嵌套的位置。

    您可以在此处找到有关位置块的更多信息:Docs

    编辑:正如下面在 cmets 中提到的,要使用 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;
                }
    }
    

    【讨论】:

    • 感谢您的回答。随意 uparrow myquestion 所以它的范围会增加。如果它可以帮助我解决问题,我会将您的答案标记为解决方案。
    • 关于第二个问题的答案 - 要配置 HTTPS 服务器,您必须使用 ssl 参数
    • 在我当前的配置中,我可以使用 https:// - 也许它在其他配置文件之一中......
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 2012-06-12
    • 2017-01-02
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    相关资源
    最近更新 更多