location指令是Nginx配置中非常重要的部分,用于匹配请求URI并定义如何处理这些请求。以下是location的全面用法说明:
location [修饰符] 匹配模式 {
# 配置指令
}
Nginx支持以下几种匹配修饰符:
无修饰符 - 前缀匹配
location /prefix/ {
# 匹配以/prefix/开头的URI
}
=
精确匹配
location = /exact {
# 只匹配/exact这个URI
}
~
区分大小写的正则匹配
location ~ \.php$ {
# 匹配以.php结尾的URI,区分大小写
}
~*
不区分大小写的正则匹配
location ~* \.(jpg|jpeg|png|gif)$ {
# 匹配图片文件扩展名,不区分大小写
}
^~
优先前缀匹配
location ^~ /images/ {
# 匹配以/images/开头的URI,且不检查正则表达式
}
Nginx按以下顺序检查location匹配:
=
精确匹配^~
优先前缀匹配~
或 ~*
正则匹配(按配置文件中出现的顺序)location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
access_log off;
}
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 /images/ {
# 专门处理/images/下的请求
}
location ~ \.php$ {
# 处理PHP请求
}
}
location / {
try_files $uri $uri/ @fallback;
}
location @fallback {
proxy_pass http://backend;
}
location匹配顺序问题:确保精确匹配(=
)放在前面,正则匹配按需求排序
静态文件无法访问:检查root或alias设置是否正确
location /static/ {
alias /path/to/static/files/;
# 或使用 root
# root /path/to/;
}
PHP文件被下载而非执行:检查fastcgi配置是否正确,特别是SCRIPT_FILENAME参数
正则匹配不生效:确认是否使用了正确的修饰符(~
或~*
)
通过合理使用location指令,可以高效地控制Nginx对不同请求的处理方式,实现灵活的URL路由和资源访问控制。