配置结构与路由
Context
nginx
user nginx;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
server {
listen 80;
server_name example.com;
location / {
root /srv/www;
try_files $uri $uri/ =404;
}
}
}Directive 只能放在它允许的 Context 中。常见层次为 Main → events/http → server → location。继承规则由各 Directive 自己定义,不能假设所有配置都会简单向下继承。
Location 匹配
常见 Location 类型:
| 写法 | 含义 |
|---|---|
location = /health | 精确匹配 |
location ^~ /assets/ | Prefix 匹配命中后跳过 Regex Location |
location /api/ | 普通 Prefix 匹配 |
location ~ \.php$ | 区分大小写 Regex |
| `location ~* .(jpg | png)$` |
匹配不能只记成“最长路径”:精确匹配、Prefix 和 Regex 之间存在优先顺序。复杂配置应通过 nginx -T 查看最终配置,并使用测试请求验证。
root 与 alias
nginx
location /images/ {
root /data;
}请求 /images/a.png 映射为 /data/images/a.png。root 会把完整 URI 拼到目录后。
nginx
location /images/ {
alias /data/pictures/;
}同一请求映射为 /data/pictures/a.png。alias 用指定目录替换匹配的 Location Prefix。尾部 Slash 和 Regex Location 中的 Capture 尤其容易出错。
SPA 路由
nginx
server {
listen 80;
server_name app.example.com;
root /srv/app;
location / {
try_files $uri $uri/ /index.html;
}
}该回退只适合前端 Route。/api/ 应使用更具体的 Location 代理,避免 API 404 被误返回为 index.html 和 200。
proxy_pass 的 URI 规则
nginx
location /api/ {
proxy_pass http://backend/;
}带 URI 的 proxy_pass 会用指定 URI 替换匹配到的 Normalized Location 部分。是否有尾部 Slash 会改变 Upstream URI,是常见事故来源。修改时应针对 /api、/api/、多级路径和 Query String 分别测试。