Nginx 反向代理从入门到实战(超详细新手版)

一、什么是 Nginx 反向代理?(新手必看!)

1.1 用生活例子秒懂概念

想象你去餐厅吃饭:

  • 正向代理:你让朋友帮你去餐厅买饭(朋友代替你和餐厅交互,餐厅知道的是你朋友的地址)
  • 反向代理:你只和餐厅前台打交道,前台把你的订单转给后厨(你不知道后厨有多少个厨师,只知道前台的存在)

Nginx 反向代理就是这个 "前台":

  • 客户端(比如浏览器)只知道 Nginx 的地址
  • Nginx 把请求转发给背后的服务器(比如网站服务器、API 服务器)
  • 隐藏了后端服务器的真实地址,还能实现负载均衡、加速、安全防护等功能

1.2 为什么要用反向代理?

  • 负载均衡:把请求分给多个后端服务器,避免某个服务器累趴下
  • 加速网站:缓存图片、CSS 等静态资源,让用户打开网页更快
  • 安全防护:阻挡恶意请求,比如防止黑客攻击后端服务器
  • HTTPS 升级:统一处理 SSL 证书,让网站从 http 升级到 https 更简单

二、工作原理:Nginx 如何转发请求?(超简单图解)

  1. 客户端发送请求到 Nginx 的 IP 地址(比如192.168.1.100
  2. Nginx 根据配置规则决定把请求发给哪个后端服务器:
    • 轮询:像排队一样,第一个请求给服务器 A,第二个给服务器 B,轮流分配
    • IP 哈希:根据客户端的 IP 地址,让同一个用户的请求始终发给同一台服务器(比如记住用户登录状态)
    • 最少连接:谁现在处理的请求最少,就发给谁(让空闲的服务器多干活)
  1. 后端服务器处理完请求后,把结果返回给 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<head>里添加:

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />

作用:浏览器会自动把网页里的 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 配置后不生效怎么办?

  1. 检查 Nginx 配置文件是否有语法错误:在终端输入nginx -t,如果显示successful才是正确的
  2. 重新加载配置:nginx -s reload
  3. 确认端口是否被占用:用netstat -tunlp | grep 80检查 80 和 443 端口是否正常监听

6.3 如何查看 Nginx 的访问日志?

日志路径一般在/var/log/nginx/access.log,可以用文本编辑器打开,里面记录了每个请求的详细信息,帮你排查问题

七、总结:新手必记 3 个核心点

  1. 反向代理本质:客户端只和 Nginx 打交道,Nginx 负责转发请求给后端服务器
  2. 核心功能:负载均衡(分配任务)、缓存加速(存常用数据)、HTTPS 处理(解密请求)
  3. 配置关键listen(端口)、server_name(域名)、proxy_pass(代理地址),注意路径末尾是否加/

按照这个教程一步步操作,即使是零基础的新手也能轻松实现 Nginx 反向代理和 HTTPS 升级!如果遇到问题,记得对照配置代码逐行检查,或者查看 Nginx 的错误日志哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

awei0916

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值