nginx二进制版可通过内置模块实现动静分离:先配置正则匹配静态资源并指定root为/opt/static,再配置location /代理动态请求至后端;需确保静态规则在location /之前、路径权限正确、重启用-s reload。

Nginx 二进制安装版(即直接下载预编译的 nginx-*.tar.gz 包解压运行,不通过源码编译)配置动静分离,核心在于不依赖额外模块编译,仅靠内置的 ngx_http_proxy_module 和基础匹配规则即可完成。它和源码编译版在配置逻辑上完全一致,区别只在安装路径固定、模块已静态链接。
以下是清晰、可落地的操作步骤:
确认二进制版已正确运行
解压后进入目录(如 /opt/nginx),检查结构是否含:conf/、html/、sbin/nginx;执行 ./sbin/nginx -t 验证配置语法,./sbin/nginx 启动服务。默认监听 80 端口,访问 http://localhost 应见 “Welcome to nginx!” 页面。
规划静态与动态资源路径
动静分离本质是“谁处理什么请求”:
- 静态资源:HTML、CSS、JS、图片、字体等,由 Nginx 直接从本地磁盘读取并返回(无需转发)
-
动态资源:如
.jsp、.php、/api/等,需反向代理到后端应用服务器(如 Tomcat、PHP-FPM)
建议在 Nginx 安装目录同级新建 static 目录(如 /opt/static),将所有前端资源放入其中(例:/opt/static/css/app.css、/opt/static/image/logo.png)。
修改 nginx.conf 实现分离
编辑 conf/nginx.conf 中的 server 块,在 location / { ... } 外添加以下两段规则(顺序重要:先匹配静态,再兜底动态):
# 匹配常见静态后缀,直接读取本地 static 目录
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|ttf|eot)$ {
root /opt/static;
expires 7d;
add_header Cache-Control "public, immutable";
}
# 匹配 HTML(也可放 static 下,但常需服务端渲染,此处按需)
location /page/ {
root /opt/static;
}
# 动态请求统一代理到 Tomcat(假设其运行在本机 8080)
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
⚠️ 注意:root /opt/static 在 location 内表示“该 location 下的 URI 路径会拼接到此目录后”,例如请求 /image/bg.jpg → 实际读取 /opt/static/image/bg.jpg。
验证与调试要点
- 重启生效:
./sbin/nginx -s reload(二进制版无需 make install) - 用浏览器或 curl 测试:
curl -I http://localhost/image/test.png应返回200 OK且含Cache-Control;curl http://localhost/api/user应返回 Tomcat 的响应内容 - 查看 Nginx 错误日志:
logs/error.log,常见问题如路径不存在、权限拒绝(确保/opt/static对运行 Nginx 的用户可读) - 若静态资源仍走代理,检查正则是否被更宽泛的
location /兜底覆盖——Nginx 匹配优先级:精确 > 前缀 > 正则,所以静态规则必须写在location /之前











