Nginx 反向代理
Nginx 作为一款高性能的 Web 服务器和反向代理服务器,广泛应用于 Web 应用架构中。反向代理功能允许将客户端请求转发到后端服务器,并将后端响应返回给客户端。本文将详细介绍 Nginx 反向代理的配置及相关案例。
一、Nginx 反向代理配置
1. 反向代理概念
反向代理(Reverse Proxy)是代理服务器的一种模式,它接收来自客户端的请求,然后将请求转发给内部服务器,并将服务器的响应返回给客户端。反向代理服务器隐藏了内部服务器的真实 IP 地址,提高了系统的安全性和灵活性。
2. Nginx 反向代理配置步骤
(1)编辑 Nginx 配置文件
Nginx 的配置文件通常位于 Nginx 安装目录下的 conf
文件夹中,文件名为 nginx.conf
。编辑该文件配置反向代理功能。
- 全局配置:设置 worker 进程数、错误日志等。
- http 配置:设置 HTTP 服务器相关的参数,如 mime 类型、sendfile 等。
- server 配置:定义监听端口、域名及反向代理规则。
(2)配置反向代理
在 server
块中,使用 location
指令匹配请求路径,并通过 proxy_pass
指令将请求转发到后端服务器。还可以使用 proxy_set_header
修改 HTTP 头部信息。
(3)保存并测试配置
保存 nginx.conf
后,执行 nginx -t
检查配置文件语法是否正确。如果没有问题,执行 nginx -s reload
平滑重启 Nginx 使配置生效。
(4)验证配置
在浏览器中访问 Nginx 反向代理的域名或 IP 地址,检查是否可以正常访问后端资源,确认配置成功。
二、Nginx 反向代理配置案例
场景描述
假设有一个 Web 应用部署在两台服务器上,分别为 192.168.1.100:8080
和 192.168.1.101:8080
。希望通过 Nginx 将请求平均分配到这两台服务器,实现负载均衡。
配置文件示例(nginx.conf)
http {
# 定义后端服务器组
upstream myapp {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
# 可选负载均衡策略:轮询(默认)、最少连接等
# least_conn;
}
server {
listen 80;
server_name myapp.example.com;
location / {
# 将请求转发到后端服务器组
proxy_pass http://myapp;
# 保留原始 Host 头
proxy_set_header Host $host;
# 传递真实客户端 IP
proxy_set_header X-Real-IP $remote_addr;
# 传递经过代理链的客户端 IP 列表
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 传递请求协议(http/https)
proxy_set_header X-Forwarded-Proto $scheme;
# 其他可选配置,如缓存、超时、重试等
}
# 其他 location 配置...
}
# 其他 server 配置...
}
说明
- upstream:定义了一个名为
myapp
的后端服务器组,包含两台后端服务器的地址和端口号。 - server:定义了一个监听 80 端口的 HTTP 服务器,并绑定域名
myapp.example.com
。 - location:匹配所有以根路径
/
开头的请求,并将它们转发到myapp
后端服务器组。同时设置了常用的proxy_set_header
指令,将客户端信息传递给后端服务器。
功能解析
- 负载均衡:通过定义
upstream
服务器组,并在location
中使用proxy_pass
将请求转发到后端服务器组,可以实现将客户端请求平均分配到多个后端服务器。 - 保留原始请求头:通过
proxy_set_header
保留和传递客户端的真实请求头,包括主机名、真实 IP 地址、转发链等信息,确保后端服务器可以正确处理请求。 - 安全性与扩展性:Nginx 作为反向代理服务器隐藏了后端服务器的真实 IP,提升了系统安全性,并可以通过配置轻松扩展负载均衡、缓存等功能。
总结
Nginx 反向代理是 Web 应用架构中常用的技术,通过合理配置反向代理和负载均衡,能够提高系统的性能和稳定性。本文介绍了 Nginx 反向代理的基本概念、配置步骤及应用案例,希望对开发者在实际项目中有所帮助。