插件窝 干货文章 Nginx服务器中的location怎么配置

Nginx服务器中的location怎么配置

Location 匹配 Nginx 配置 260    来源:    2025-04-25

Nginx Location 配置详解

location 指令是 Nginx 配置中非常重要的部分,用于匹配 URI 并定义如何处理请求。下面我将详细介绍 location 的配置方法。

基本语法

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

匹配模式类型

1. 精确匹配 (=)

location = /exact/path {
    # 仅匹配 /exact/path
}

2. 前缀匹配 (无修饰符)

location /prefix {
    # 匹配以 /prefix 开头的 URI
}

3. 正则匹配 (~, ~*, !~, !~*)

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

location ~* \.(jpg|jpeg|png)$ {
    # 不区分大小写的正则匹配图片文件
}

location !~ \.php$ {
    # 区分大小写的不匹配 .php 结尾的 URI
}

4. 最长前缀匹配 (^~)

location ^~ /images/ {
    # 匹配以 /images/ 开头的最长前缀,不检查正则表达式
}

匹配优先级

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 (@)

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

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

变量使用

location / {
    set $my_var "some_value";
    if ($http_user_agent ~* "mobile") {
        set $my_var "mobile_value";
    }
}

注意事项

  1. 正则表达式 location 的顺序很重要,第一个匹配的会被执行
  2. 尽量避免在 location 中使用 if 指令,可能导致意外行为
  3. 对于静态文件,考虑添加 expires 头以提高性能
  4. 测试配置更改后,使用 nginx -t 检查语法

通过合理配置 location,你可以精确控制 Nginx 如何处理各种请求,实现灵活的 URL 路由和内容分发。