一、什么是 Nginx 反向代理?(新手必看!)
1.1 用生活例子秒懂概念
想象你去餐厅吃饭:
正向代理:你让朋友帮你去餐厅买饭(朋友代替你和餐厅交互,餐厅知道的是你朋友的地址)反向代理:你只和餐厅前台打交道,前台把你的订单转给后厨(你不知道后厨有多少个厨师,只知道前台的存在)
Nginx 反向代理就是这个 "前台":
客户端(比如浏览器)只知道 Nginx 的地址Nginx 把请求转发给背后的服务器(比如网站服务器、API 服务器)隐藏了后端服务器的真实地址,还能实现负载均衡、加速、安全防护等功能
1.2 为什么要用反向代理?
负载均衡:把请求分给多个后端服务器,避免某个服务器累趴下加速网站:缓存图片、CSS 等静态资源,让用户打开网页更快安全防护:阻挡恶意请求,比如防止黑客攻击后端服务器HTTPS 升级:统一处理 SSL 证书,让网站从 http 升级到 https 更简单
二、工作原理:Nginx 如何转发请求?(超简单图解)
客户端发送请求到 Nginx 的 IP 地址(比如192.168.1.100)Nginx 根据配置规则决定把请求发给哪个后端服务器:
轮询:像排队一样,第一个请求给服务器 A,第二个给服务器 B,轮流分配IP 哈希:根据客户端的 IP 地址,让同一个用户的请求始终发给同一台服务器(比如记住用户登录状态)最少连接:谁现在处理的请求最少,就发给谁(让空闲的服务器多干活)
后端服务器处理完请求后,把结果返回给 Nginx,Nginx 再转发给客户端
三、核心功能:Nginx 能帮你做什么?(带例子说明)
3.1 负载均衡:让多个服务器一起干活
场景:你的网站有 1000 个用户同时访问,一台服务器处理不过来Nginx 做法:把 1000 个请求分成 5 份,分别发给 5 台服务器,每台只处理 200 个请求效果:网站不会因为流量太大而卡顿或崩溃
3.2 缓存加速:提前准备好 "常用菜"
场景:用户多次访问同一个图片或网页Nginx 做法:第一次请求时,把图片保存到自己的 "冰箱"(缓存)里,下次用户再访问,直接从 "冰箱" 拿,不用再找后端服务器效果:网页打开速度提升 50% 以上,后端服务器压力减轻
3.3 SSL 终端:帮后端服务器 "拆快递"
场景:用户通过 https 访问网站(需要解密数据)Nginx 做法:自己负责处理 SSL 证书解密,把解密后的明文请求发给后端服务器好处:后端服务器不用处理复杂的解密工作,专注处理业务逻辑
3.4 安全过滤:当好 "门卫"
功能举例:
禁止某个恶意 IP 访问你的网站限制每个 IP 每秒最多发送 10 个请求(防止刷接口)过滤包含 "攻击代码" 的请求(比如 SQL 注入攻击)
四、配置入门:手把手教你写 Nginx 配置文件
4.1 配置文件结构(新手必背 3 个部分)
# 全局配置:管整个Nginx服务器
user nobody; # 运行Nginx的用户
worker_processes 1; # 工作进程数,一般设置为服务器CPU核心数
# http配置:管所有网站的共用设置
http {
include mime.types; # 文件类型定义
default_type application/octet-stream; # 默认文件类型
# server配置:管单个网站的具体设置
server {
listen 80; # 监听http端口
server_name www.abc.com; # 绑定的域名
# 这里写具体的代理规则、重定向规则等
}
}
4.2 常用配置项解释(新手不踩坑)
配置项
作用
举例
listen
监听的端口
listen 80;(监听 http)、listen 443 ssl;(监听 https)
server_name
绑定的域名 / IP
server_name www.abc.com abc.com;(同时匹配两个域名)
root
网站根目录
root /www/wwwroot/abc;(网站文件存在这个路径下)
proxy_pass
代理到后端服务器
proxy_pass http://192.168.1.101:3000;(把请求发给这台服务器的 3000 端口)
五、实战:把网站从 http 升级到 https(超详细步骤)
5.1 准备工作
买好域名(比如abc.com)并解析到你的服务器 IP申请 SSL 证书(推荐免费的 Let's Encrypt,宝塔面板可一键申请)
5.2 第一步:让 http 请求自动跳转到 https(修改宝塔面板配置)
代码逐行解释:
server {
listen 80; # 这是http的端口,专门处理http请求
server_name www.abc.com abc.com 你的服务器IP; # 不管用户用哪个方式访问,都匹配这个server
# 重点!把http请求重定向到https
if ($server_port !~ 443) { # 如果不是https请求(端口不是443)
rewrite ^(/.+)$ https://$host$1 permanent; # 把网址改成https开头,永久跳转(浏览器会记住)
# 例子:用户访问http://abc.com/abc,会变成https://abc.com/abc
}
}
5.3 第二步:配置代理多个后端服务器(以图片和音乐 API 为例)
场景:
图片 API 在后端服务器 A 的 3004 端口,路径是/api/xxx音乐 API 在后端服务器 B 的 3005 端口,路径是/musicapi/xxx
代理图片 API 配置(路径带/api/):
location /api/ { # 当用户访问网址里包含/api/时(比如https://abc.com/api/pic.jpg)
proxy_pass http://192.168.1.101:3004; # 末尾不加/!Nginx会把/api/拼接到后端地址后面
# 最终请求到后端的是http://192.168.1.101:3004/api/pic.jpg
}
代理音乐 API 配置(路径不带前缀):
location /musicapi/ { # 当用户访问/musicapi/xxx时
proxy_pass http://192.168.1.102:3005/; # 末尾加/!Nginx会去掉/musicapi/前缀
# 最终请求到后端的是http://192.168.1.102:3005/xxx
}
5.4 第三步:让网页里的 http 链接自动变成 https(2 种方法)
方法 1:在 HTML 里加一行代码(适合新手)
在你的首页index.html的
里添加:作用:浏览器会自动把网页里的 http 链接(比如http://abc.com/pic.jpg)转成 https
方法 2:在 Nginx 配置里统一设置(适合批量处理)
server {
listen 443 ssl; # https端口
# 其他配置...
add_header Content-Security-Policy "upgrade-insecure-requests; connect-src *";
# 作用:所有通过Nginx返回的页面,都会带上这个头,强制升级不安全链接
}
六、新手常见问题解答(避坑指南)
6.1 为什么代理后后端收不到真实 IP?
因为 Nginx 默认不会传递客户端 IP,需要添加这 3 行配置:
proxy_set_header X-Real-IP $remote_addr; # 传递真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 记录转发路径
proxy_set_header Host $host; # 传递客户端访问的域名
6.2 配置后不生效怎么办?
检查 Nginx 配置文件是否有语法错误:在终端输入nginx -t,如果显示successful才是正确的重新加载配置:nginx -s reload确认端口是否被占用:用netstat -tunlp | grep 80检查 80 和 443 端口是否正常监听
6.3 如何查看 Nginx 的访问日志?
日志路径一般在/var/log/nginx/access.log,可以用文本编辑器打开,里面记录了每个请求的详细信息,帮你排查问题
七、总结:新手必记 3 个核心点
反向代理本质:客户端只和 Nginx 打交道,Nginx 负责转发请求给后端服务器核心功能:负载均衡(分配任务)、缓存加速(存常用数据)、HTTPS 处理(解密请求)配置关键:listen(端口)、server_name(域名)、proxy_pass(代理地址),注意路径末尾是否加/
按照这个教程一步步操作,即使是零基础的新手也能轻松实现 Nginx 反向代理和 HTTPS 升级!如果遇到问题,记得对照配置代码逐行检查,或者查看 Nginx 的错误日志哦~