nginx通过location规则实现动静分离:按路径(如/static/)或后缀(如.js、.png)匹配静态资源,直接本地返回并缓存;动态请求(如/api/)用proxy_pass转发至后端,并配置真实ip、host头及超时参数。

靠 location 规则分流,配合 proxy_pass 转发动态请求,静态资源直接由 Nginx 读取返回,不走后端。
按路径或后缀明确区分动静请求
动静分离的前提是让 Nginx 能准确识别哪类请求该直出、哪类该转发。常见做法有两种:
- 按路径约定:如 /static/、/images/、/css/ 下的请求归为静态;/api/、/v1/、/admin/ 等归为动态
- 按文件后缀匹配:用正则匹配 \.(js|css|png|jpg|gif|woff2|ttf|svg)$,这类请求默认视为静态资源
用 location 块分别处理两类请求
在 server 块中定义多个 location,优先级和写法影响实际行为:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 静态资源用 location ^~ /static/ 或 location ~* \.(js|css|png)$,内部配 root 或 alias 指向本地目录,并加 expires 缓存头
- 动态接口用 location /api/,内部写 proxy_pass http://backend/;(注意末尾斜杠:有则剥离前缀,无则原样转发)
- 兜底规则如 location / 可设为代理全部未匹配请求,或单独服务首页 HTML
proxy_pass 转发时必须配套关键设置
只写 proxy_pass 不够,否则后端可能拿不到真实信息或超时中断:
- 透传客户端真实 IP:proxy_set_header X-Real-IP $remote_addr; 和 X-Forwarded-For $proxy_add_x_forwarded_for;
- 保留原始 Host:proxy_set_header Host $host;,避免后端路由或证书校验失败
- 设超时参数:proxy_connect_timeout 5s;、proxy_read_timeout 30s;、proxy_send_timeout 30s;
避免常见路径与缓存陷阱
线上问题多出在细节处理上:
- 静态 location 必须靠前定义,或用 ^~ 前缀确保优先匹配,防止被 location / 兜底捕获
- 高频小文件如 /favicon.ico 建议单独用 location = /favicon.ico 处理,减少正则开销
- 静态资源建议加 Cache-Control: public, immutable 和 expires 1y,利用浏览器强缓存










