nginx365日更挑战

日更第4日: (翻)nginx调优之避免使用if指令判断serv

2021-10-16  本文已影响0人  微凉哇

不要使用if指令判断server_name

原文地址

解释说明

NGINX接收到一个请求时,如果你配置了if指令用于检查每个请求的Host头,
不管请求的子域是什么,无论是www.example.com,还是example.com,都将执行该if指令进行判断。

相反,使用两个server指令,如下面的例子所示。这种方法降低了NGINX处理需求。

样例

server {

  server_name example.com www.example.com;

  if ($host = www.example.com) {

    return 301 https://example.com$request_uri;
  }
  server_name example.com;
  ...

}
server {

    listen 192.168.252.10:80;

    server_name www.example.com;

    return 301 $scheme://example.com$request_uri;

    # If you force your web traffic to use HTTPS:
    # return 301 https://example.com$request_uri;

    ...

}

server {

    listen 192.168.252.10:80;

    server_name example.com;

    ...

}

其他场景

不光$server_name指令,当判断$scheme值时,也应该用多个server代替if判断如。
在某些情况下(但并非总是如此),添加一个额外的块指令比使用if更好。

官方建议:

location上下文中使用if会存在一些问题,尽量避免。

上一篇 下一篇

猜你喜欢

热点阅读