Skip to content

配置结构与路由

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/httpserverlocation。继承规则由各 Directive 自己定义,不能假设所有配置都会简单向下继承。

Location 匹配

常见 Location 类型:

写法含义
location = /health精确匹配
location ^~ /assets/Prefix 匹配命中后跳过 Regex Location
location /api/普通 Prefix 匹配
location ~ \.php$区分大小写 Regex
`location ~* .(jpgpng)$`

匹配不能只记成“最长路径”:精确匹配、Prefix 和 Regex 之间存在优先顺序。复杂配置应通过 nginx -T 查看最终配置,并使用测试请求验证。

root 与 alias

nginx
location /images/ {
    root /data;
}

请求 /images/a.png 映射为 /data/images/a.pngroot 会把完整 URI 拼到目录后。

nginx
location /images/ {
    alias /data/pictures/;
}

同一请求映射为 /data/pictures/a.pngalias 用指定目录替换匹配的 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 分别测试。