• admin
  • 802
  • 2025-05-21 20:35:29

一、什么是 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 的错误日志哦~