极简版 Nginx 反向代理实验步骤
以下是最核心的反向代理实现步骤,专注于 “客户端→Nginx 代理→后端服务” 的基础转发功能:
一、准备 2 台服务器
角色 | IP 示例 | 需安装软件 |
---|---|---|
代理服务器 | 192.168.1.10 | Nginx |
后端服务器 | 192.168.1.11 | Nginx/Apache |
二、后端服务器配置(192.168.1.11)
安装并启动 Web 服务:
# 安装Nginx yum install -y nginx # CentOS/RHEL # 或 apt install -y nginx # Ubuntu/Debian# 启动服务 systemctl start nginx systemctl enable nginx
设置标识页面(便于验证):
echo "<h1>Backend Server: 192.168.1.11</h1>" > /usr/share/nginx/html/index.html
三、代理服务器配置(192.168.1.10)
安装 Nginx:
yum install -y nginx # 同上
创建反向代理配置:
# 备份默认配置 mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak# 新建代理配置 cat > /etc/nginx/conf.d/proxy.conf << 'EOF' server {listen 80;server_name localhost;location / {# 转发到后端服务器proxy_pass http://192.168.1.11:80;# 传递客户端信息proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;} } EOF
启动 Nginx:
# 检查配置 nginx -t# 启动服务 systemctl start nginx systemctl enable nginx
四、验证反向代理
客户端直接访问后端:
浏览器打开http://192.168.1.11
,显示Backend Server: 192.168.1.11
。通过代理服务器访问:
浏览器打开http://192.168.1.10
,同样显示后端页面内容,说明代理成功。
五、核心验证点
- 客户端仅需知道代理服务器 IP(192.168.1.10),无需知道后端 IP
- 后端服务器日志中可看到客户端真实 IP(而非代理服务器 IP)
以上步骤完成即实现了最基础的反向代理功能,所有操作均围绕 “请求转发” 核心目标,去除了额外扩展配置。
location / {
proxy_pass http://192.168.42.1;
}
proxy_set_header Host $host; # 修改请求头,添加Host字段
proxy_set_header X-Real-IP $remote_addr; # 修改请求头,添加X-Real-IP字段
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 修改请求头,添加X-Forwarded-For字段 client_max_body_size 10m; # 允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; # 缓冲区代理缓冲用户端请求的最大字节数, proxy_connect_timeout 90; # nginx跟后端服务器连接超时时间\(代理连接超时\) proxy_send_timeout 90; # 后端服务器数据回传时间\(代理发送超时\)
proxy_read_timeout 90; # 连接成功后,后端服务器响应时间\(代理接收超时\)
proxy_buffer_size 4k; # 设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; # proxy_buffers缓冲区,网页平均在32k以下的话,这样设置 proxy_busy_buffers_size 64k; # 高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; # 设定缓存文件夹大小,大于这个值,将从upstream服务器传
负载均衡
模式(算法)
轮询(默认)(RR)Round Robin:将请求平均分配给所有服务器,
最小连接数(Least Connections):该策略将请求分发给当前处理连接数最少的服务器,适合连接数波动较大的场景,如长连接服务。
IP 哈希(IP Hash):通过请求的客户端IP进行哈希运算,将来自同一IP地址的请求分发到同一台服务器上,适合有会话保持需求的场景。
权重(Weight):为不同的服务器分配权重,Nginx 将根据设置的权重值来分发请求,权重越高的服务器将承担更多的流量,适合服务器性能不均衡的场景
upstream web1{
#默认轮询
server 192.168.x.x
server 192.168.x.x
...
}
upstream wed2 {
# 最小连接数负载均衡算法 least_conn;
# 后端服务器列表
server 192.168.1.100:80;
server 192.168.1.101:80;
...
}
upstream wed3 {
ip_hash #ip哈希模式
# 后端服务器列表
server 192.168.1.100:80;
server 192.168.1.101:80;
...
}