nginx配置之location配置教程
云计算
nginx配置之location配置教程
2025-03-21 00:02
NGINX Location配置完全指南 一、基础语法与优先级 location指令是NGINX的核心路由配置模块,其基本语法结构为:
NGINX Location配置完全指南
一、基础语法与优先级
location
指令是NGINX的核心路由配置模块,其基本语法结构为:
location [修饰符] 匹配模式 {
# 配置指令
}
匹配优先级规则表
匹配类型 | 优先级顺序 | 示例 | 说明 |
---|---|---|---|
精确匹配 | 1️⃣最高 | location = /api |
完全匹配路径 |
前缀匹配 | 3️⃣ | location ^~ /static |
禁用正则检查的路径匹配 |
正则匹配 | 2️⃣ | location ~ \.php$ |
区分大小写的正则匹配 |
正则不区分大小写 | 2️⃣ | `location ~*.(jpg | png)` |
通用匹配 | 4️⃣最低 | location / |
默认匹配所有请求 |
二、典型配置场景详解
1. 静态文件服务
location ~* \.(css|js|png|jpg|jpeg|gif|ico)$ {
root /data/web/static;
expires 30d;
access_log off;
add_header Cache-Control "public, max-age=2592000";
}
- 代码解析:
~*
:不区分大小写的正则匹配root
:指定静态文件根目录expires
:设置浏览器缓存时间(30天)access_log off
:禁用访问日志记录add_header
:添加HTTP响应头
2. 反向代理配置
location /api/v1/ {
proxy_pass http://backend_server/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
- 关键参数:
proxy_pass
:后端服务地址(注意结尾斜杠的作用)proxy_http_version 1.1
:启用HTTP长连接Connection ""
:清除默认的close头
3. 动态请求处理
location ~ \.php$ {
root /data/web;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
- 安全建议:
- 建议添加
try_files $uri =404
防止任意文件执行 - 设置
fastcgi_param
时使用绝对路径
- 建议添加
三、进阶配置技巧
1. 路径重写
location /legacy {
rewrite ^/legacy/(.*) /new/$1 permanent;
}
- 重写规则说明:
^/legacy/(.*)
:捕获legacy路径后的所有字符/new/$1
:重定向到新路径permanent
:返回301永久重定向状态码
2. 多条件匹配
location / {
# 优先检查文件是否存在
try_files $uri $uri/ @backend;
# 设置默认类型
default_type text/html;
}
location @backend {
proxy_pass http://app_server;
}
- 流程说明:
- 尝试访问真实文件
- 尝试访问目录索引
- 最终转发到后端服务
3. 访问控制
location /admin {
allow 192.168.1.0/24;
deny all;
auth_basic "Admin Area";
auth_basic_user_file /etc/nginx/conf.d/htpasswd;
}
- 安全配置:
- IP白名单限制
- 基础认证双重保护
- 密码文件建议使用
htpasswd
生成
四、配置验证与排错
1. 配置语法检查
nginx -t
# 返回示例:
# nginx: configuration file /etc/nginx/nginx.conf test is successful
2. 调试日志分析
error_log /var/log/nginx/debug.log debug;
查看请求匹配过程:
2023/09/01 10:00:00 [debug] 1234#0: *1 test location: "/"
2023/09/01 10:00:00 [debug] 1234#0: *1 test location: "static"
3. 请求跟踪工具
strace -p `pidof nginx` -e trace=file
五、最佳实践建议
-
路径设计原则:
- 精确匹配路径放最前
- 正则匹配按复杂度排序
- 通用匹配放在最后
-
性能优化:
location = /favicon.ico { log_not_found off; access_log off; }
-
安全加固:
标签:
- nginx
- location