Nginx 作为动静分离反向代理服务器的典型配置

1、Nginx中location应用实例
location主要用于对URL进行匹配。 location支持正则表达式匹配,也支持条件判断匹配。
以下这段设置是通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理。


location ~ ..(gif|jpg|jpeg|png|bmp|swf)$ { root /data/wwwroot/www.ixdba.net; }

以下这段设置是将upload和html下的所有文件都交给nginx来处理,需要注意的是,upload和html目录是在/data/wwwroot/www.ixdba.net目录下的一个子目录。

location ~ ^/(upload|html)/ { root /data/wwwroot/www.ixdba.net; }

在下面这段设置中,location是对此虚拟主机下动态网页的过滤处理,也就是将所有以.jsp为后缀的文件都交给本机的8080端口处理。

location ~ ..jsp$ {
index index.jsp;
proxy_pass http://localhost:8080;
}

好的,我来逐条详解你给出的这三个 Nginx location 配置实例,帮你彻底理解每个配置的作用原理


实例一:静态文件处理

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {
    root /data/wwwroot/www.ixdba.net;
}

1. 匹配规则解析

部分含义
~表示区分大小写的正则表达式匹配
.*匹配任意字符任意次数(0次或多次)
\.转义的点号,匹配真正的 .
(gif|jpg|jpeg|png|bmp|swf)分组匹配,匹配括号内列出的任意一种文件后缀
$锚定行尾,表示必须以这些后缀结尾

实际匹配的 URL 示例

  • /images/logo.gif
  • /upload/photo.jpg
  • /static/background.png
  • /flash/banner.swf
  • /image.jpg?size=large(有查询参数,但后缀仍匹配)

不匹配的示例

  • /index.html(后缀不在列表中)

2. 处理逻辑

当用户访问一个以这些后缀结尾的文件时,Nginx 会:

  1. 匹配到这个 location
  2. 使用 root 指定的目录作为根目录
  3. 将请求的 URI 拼接到 root 后面,查找文件

例如:请求 /images/logo.gif → 实际文件路径 /data/wwwroot/www.ixdba.net/images/logo.gif

3. 作用

静态文件加速。这些图片、Flash 文件不需要后端处理,Nginx 直接读取文件返回,性能极高。这是典型的动静分离配置的一部分。


实例二:特定目录处理

location ~ ^/(upload|html)/  {
    root /data/wwwroot/www.ixdba.net;
}

1. 匹配规则解析

部分含义
~正则匹配
^// 开头
(upload|html)匹配 upload 或 html 这两个目录名
/目录后的斜杠

实际匹配的 URL 示例

  • /upload/avatar.jpg
  • /upload/2023/01/file.pdf
  • /html/index.html
  • /html/css/style.css

不匹配的示例

  • /uploadfile.php(不是目录,而是文件)
  • /images/logo.gif(目录不匹配)

2. 处理逻辑

这个配置匹配的是/upload//html/ 开头的所有请求,不管后面是什么路径。

例如:请求 /html/css/style.css → 实际文件路径 /data/wwwroot/www.ixdba.net/html/css/style.css

3. 作用

指定目录的统一处理。通常用于:

  • 用户上传文件目录(/upload/
  • 静态页面目录(/html/
  • 防止这些目录的请求被错误地转发到后端

实例三:动态请求转发

location ~ .*\.jsp$ { 
    index index.jsp;       
    proxy_pass http://localhost:8080;
}

1. 匹配规则解析

部分含义
~正则匹配
.*匹配任意字符任意次数
\.jsp$.jsp 结尾

实际匹配的 URL 示例

  • /index.jsp
  • /user/login.jsp
  • /admin/index.jsp?action=list

2. 处理逻辑

当用户访问 JSP 文件时,Nginx 知道自己处理不了(它不懂 Java),所以通过 proxy_pass 把请求转发给后端 Tomcat 处理。

流程

用户请求 /index.jsp
    ↓
Nginx 匹配到 .jsp$ location
    ↓
proxy_pass http://localhost:8080
    ↓
Nginx 将请求转发给本机的 8080 端口(Tomcat)
    ↓
Tomcat 处理 JSP,返回 HTML
    ↓
Nginx 把结果返回给用户

3. index index.jsp; 的作用

当用户访问一个目录(如 /user/)且该目录下有 index.jsp 时,Nginx 会自动在后面补上 index.jsp,然后转发给 Tomcat。

4. 作用

动静分离的核心

  • 静态文件(图片、CSS、JS)→ Nginx 直接处理
  • 动态请求(JSP、PHP)→ 转发给后端应用服务器

这样既利用了 Nginx 的高性能处理静态文件,又把复杂的动态处理交给专门的服务器。


三个配置的关系

这三个 location 通常出现在同一个 server 块中,共同构成一个完整的站点配置:

server {
    listen 80;
    server_name www.ixdba.net;
    root /data/wwwroot/www.ixdba.net;

    # 静态文件(图片、Flash)
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {
        root /data/wwwroot/www.ixdba.net;
        expires 30d;          # 可以加上缓存时间
    }

    # 特定目录(上传文件、静态HTML)
    location ~ ^/(upload|html)/  {
        root /data/wwwroot/www.ixdba.net;
    }

    # JSP 动态请求转发给 Tomcat
    location ~ .*\.jsp$ { 
        index index.jsp;
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 其他请求(可能也转发给 Tomcat 或者返回 404)
    location / {
        try_files $uri $uri/ /index.jsp;
    }
}

总结

配置匹配目标处理方式作用
实例一图片、Flash 文件Nginx 直接读取文件静态文件加速
实例二/upload//html/ 目录Nginx 直接读取文件指定目录的静态处理
实例三.jsp 文件转发给 Tomcat动态请求处理

这就是 Nginx 作为动静分离反向代理服务器的典型配置模式。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注