插件窝 干货文章 nginx中location用法

nginx中location用法

匹配 location Nginx 正则 539    来源:    2025-04-05

Nginx中location用法详解

location指令是Nginx配置中非常重要的部分,用于匹配请求URI并定义如何处理这些请求。以下是location的全面用法说明:

基本语法

location [修饰符] 匹配模式 {
    # 配置指令
}

匹配修饰符

Nginx支持以下几种匹配修饰符:

  1. 无修饰符 - 前缀匹配

    location /prefix/ {
       # 匹配以/prefix/开头的URI
    }
    
  2. = 精确匹配

    location = /exact {
       # 只匹配/exact这个URI
    }
    
  3. ~ 区分大小写的正则匹配

    location ~ \.php$ {
       # 匹配以.php结尾的URI,区分大小写
    }
    
  4. ~* 不区分大小写的正则匹配

    location ~* \.(jpg|jpeg|png|gif)$ {
       # 匹配图片文件扩展名,不区分大小写
    }
    
  5. ^~ 优先前缀匹配

    location ^~ /images/ {
       # 匹配以/images/开头的URI,且不检查正则表达式
    }
    

匹配优先级规则

Nginx按以下顺序检查location匹配:

  1. = 精确匹配
  2. ^~ 优先前缀匹配
  3. ~~* 正则匹配(按配置文件中出现的顺序)
  4. 普通前缀匹配(最长的匹配优先)

常用配置示例

静态文件服务

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    access_log off;
}

PHP处理

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

重定向规则

location /old/ {
    rewrite ^/old/(.*)$ /new/$1 permanent;
}

禁止访问特定文件

location ~ /\.ht {
    deny all;
}

高级用法

嵌套location

location / {
    # 主配置

    location /images/ {
        # 专门处理/images/下的请求
    }

    location ~ \.php$ {
        # 处理PHP请求
    }
}

命名location (@前缀)

location / {
    try_files $uri $uri/ @fallback;
}

location @fallback {
    proxy_pass http://backend;
}

常见问题解决

  1. location匹配顺序问题:确保精确匹配(=)放在前面,正则匹配按需求排序

  2. 静态文件无法访问:检查root或alias设置是否正确

    location /static/ {
       alias /path/to/static/files/;
       # 或使用 root
       # root /path/to/;
    }
    
  3. PHP文件被下载而非执行:检查fastcgi配置是否正确,特别是SCRIPT_FILENAME参数

  4. 正则匹配不生效:确认是否使用了正确的修饰符(~~*)

通过合理使用location指令,可以高效地控制Nginx对不同请求的处理方式,实现灵活的URL路由和资源访问控制。