美文网首页nginx365日更挑战
日更第4日: (翻)nginx调优之避免使用if指令判断serv

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

作者: 微凉哇 | 来源:发表于2021-10-16 10:56 被阅读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会存在一些问题,尽量避免。

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/oecmoltx.html