Nginx 反向代理配置实战指南:从入门到进阶
【摘要】 本文面向 Linux 运维人员,详细介绍 Nginx 反向代理的核心概念与应用场景。通过实操步骤与可复制的配置示例,讲解基础代理、负载均衡、Header 传递等进阶配置,并总结常见问题与避坑指南,助你快速掌握 Nginx 代理技术。
一、反向代理背景与用途
在云原生与微服务架构盛行的今天,Nginx 作为高性能的 Web 服务器与反向代理软件,是运维工程师必备的技能。反向代理(Reverse Proxy)是指代理服务器接收客户端的请求,然后将请求转发给内部网络上的后端服务器,并将后端服务器的响应结果返回给客户端。代理服务器对外表现为一个独立的服务器。
其主要用途包括:
- 负载均衡:将请求分发到多台后端服务器,提升系统吞吐量与高可用性。
- 安全隔离:隐藏后端真实服务器 IP,保护内网安全。
- 缓存加速:代理服务器缓存静态资源,减轻后端压力。
- SSL 卸载:在代理层处理 HTTPS 加密解密,后端使用 HTTP 明文传输。
二、环境准备与常用命令
本文以 CentOS 7/8 和 Ubuntu 20.04/22.04 环境为例。首先确保系统已安装 Nginx。
1. 安装 Nginx
# CentOS 系统
sudo yum install epel-release -y
sudo yum install nginx -y
# Ubuntu 系统
sudo apt update
sudo apt install nginx -y2. 常用管理命令
# 启动 Nginx
sudo systemctl start nginx
# 停止 Nginx
sudo systemctl stop nginx
# 重载配置(平滑生效,不中断服务)
sudo systemctl reload nginx
# 检查配置文件语法是否正确
sudo nginx -t三、基础反向代理配置实操
1. 单节点反向代理
假设我们有一台后端业务服务器运行在 8080 端口,我们希望通过 Nginx 的 80 端口代理该服务。编辑 Nginx 配置文件(通常位于 /etc/nginx/conf.d/default.conf 或 /etc/nginx/nginx.conf)。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080;
}
}配置完成后,执行 sudo nginx -t 检查语法,无误后执行 sudo systemctl reload nginx 生效。
2. 多节点负载均衡代理
当业务量增大时,通常会部署多台后端服务。Nginx 的 upstream 模块可以实现负载均衡。
# 定义后端服务器组
upstream backend_servers {
# 默认轮询
server 192.168.1.101:8080 weight=3; # 权重为3
server 192.168.1.102:8080 weight=1; # 权重为1
server 192.168.1.103:8080 backup; # 备用服务器,当其他全挂时才启用
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
}
}四、进阶配置:Header 传递与 WebSocket
1. 传递真实客户端 IP 与协议
由于经过反向代理,后端服务器获取到的 IP 将是 Nginx 的 IP。为了让后端获取真实客户端信息,需要设置请求头。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
# 传递真实客户端 IP
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)
proxy_set_header X-Forwarded-Proto $scheme;
}
}2. 支持 WebSocket 代理
若后端服务使用了 WebSocket(如实时聊天、通知系统),需在 Nginx 中配置 Upgrade 头。
location /ws/ {
proxy_pass http://backend_servers;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400; # 保持长连接时间
}五、注意事项与常见问题
- 502 Bad Gateway:通常是因为后端服务未启动,或 SELinux/防火墙阻止了 Nginx 访问后端端口。可使用
getenforce检查 SELinux 状态,或检查后端服务日志。 - URI 转发路径差异:
proxy_pass http://backend/;与proxy_pass http://backend;的区别。带斜杠会替换 location 匹配的路径,不带斜杠则会将完整 URI 传递给后端。配置时需根据后端路由逻辑仔细测试。 - 大文件上传超时:默认代理超时时间可能较短。若涉及大文件上传或长耗时任务,需增加
proxy_read_timeout、proxy_send_timeout和client_max_body_size的值。 - 缓存与缓冲:默认
proxy_buffering为 on,对于流式响应(如 SSE)需关闭:proxy_buffering off;。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)