Nginx反向代理配置案例(4大常见配置案例)

Nginx反向代理作为构建现代Web架构的基石技术,在大型架构发挥着至关重要的作用@mikechen

Nginx反向代理基础配置

最简单且最典型的反向代理场景,用户请求先到达Nginx服务器,再由Nginx转发至后端的应用服务器(如Tomcat、Node.js等)。

Nginx反向代理配置案例(4大常见配置案例)-mikechen

这种方式可以隐藏后端服务器地址,增强系统安全性,同时可进行请求过滤和负载分担。

配置示例:

假设后端服务地址为http://127.0.0.1:8080

server {
    listen 80;
    server_name example.com;

    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;
    }
}

重点解析:

  • proxy_pass:指定请求应转发到的后端服务器地址。
  • proxy_set_header:传递Host和客户端真实IP,确保后端能够获取到正确请求信息。
  • 监听80端口,用于HTTP请求。

使用价值:

简单直观,适合单一后台应用,快速搭建反向代理。

 

配置HTTPS反向代理

场景说明:我 们的站点需要安全通信,使用HTTPS协议。

Nginx反向代理配置案例(4大常见配置案例)-mikechen

Nginx作为反向代理终端接受HTTPS请求,解密后转发给后端HTTP应用服务器,是常见的做法。

配置示例:

假设证书文件路径为/etc/nginx/ssl/server.crt/etc/nginx/ssl/server.key,后端仍为http://127.0.0.1:8080

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    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;
    }
}

# 可选:将HTTP请求重定向至HTTPS
server {
    listen 80;
    server_name example.com;

    return 301 https://$host$request_uri;
}

重点解析:

  • listen 443 ssl;监听443端口并启用SSL。
  • 配置证书路径及SSL协议、加密套件。
  • HTTP请求重定向至HTTPS,强制安全访问。
  • 反向代理配置与HTTP相同,但请求经Nginx时已完成解密。

使用价值:

保障通信安全,适合需要TLS加密的线上应用环境。

 

负载均衡反向代理配置

场景说明:

当单台后端服务器难以承载大量流量时,可以用Nginx将请求分发到多台后端服务器,实现负载均衡,提升系统稳定性和响应速度。

Nginx反向代理配置案例(4大常见配置案例)-mikechen

配置示例:

假设后端有两台服务器,IP分别为192.168.1.101:8080192.168.1.102:8080

upstream backend_servers {
    server 192.168.1.101:8080 weight=3;
    server 192.168.1.102:8080 weight=1;
}

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重点解析:

  • upstream定义后端服务器组,支持权重调节、健康检查(通过第三方模块或Nginx Plus)。
  • 通过proxy_pass指向负载均衡组。
  • 权重参数(weight)控制请求在各服务器间的分配比例。

使用价值:

适合高并发场景,提升后端服务弹性和容错能力。

 

动静分离反向代理配置

场景说明:

前端项目大量包含静态资源(如图片、CSS、JS),而动态请求由后端程序处理。

通过Nginx配置动静分离,静态资源直接由Nginx处理,提升访问速度,减轻后端压力。

Nginx反向代理配置案例(4大常见配置案例)-mikechen

配置示例:

项目目录中/static存放静态资源,后端应用监听127.0.0.1:8080

server {
    listen 80;
    server_name example.com;

    # 静态资源请求直接由Nginx处理
    location /static/ {
        root /var/www/html;
        expires 30d;
        add_header Cache-Control "public";
    }

    # 动态请求反向代理至后端应用
    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;
    }
}

重点解析:

  • /static/路径下静态资源通过root指令直接从本地磁盘读取,开启浏览器缓存。
  • 根路径其余请求全部转发至后端处理。
  • 动静分离减少网络请求和后端负载。

使用价值:

提升资源加载性能,改善用户体验,降低后端服务器运行压力。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法