当前位置: 首页 > news >正文

day5:nginx代理-动静分离

一、正向代理与反向代理

什么是代理?

首先,让我们了解一下“代理”这个概念。代理就像是一个中间人,它代表着另一方执行任务。在计算机网络中,代理服务器就充当着客户端(你的电脑)和目标服务器(例如网站)之间的“中间人”。

1. 正向代理

定义:

正向代理(Forward Proxy)是一种代理服务器,客户端通过它向外部服务器发送请求。简单来说,它就是你去找一个代理人,所有的请求都由代理人帮你去做。

工作原理:

  • 你(客户端)发送请求给正向代理服务器。

  • 正向代理服务器代替你向目标服务器发送请求。

  • 目标服务器不知道你是谁,只知道请求是通过代理服务器来的。

  • 最后,正向代理服务器把目标服务器的响应内容返回给你。

实际生活中的例子:

假设你住在一个小区,里面有很多小朋友。小朋友们都想看国外的视频,但视频服务被小区的网络封锁了。于是你找到一个外面的“代理人”,让他代表你向外面的视频服务请求视频。你自己不直接和外面的视频服务沟通,而是通过这个代理人。

应用场景:

  • 访问受限制的网站:例如在学校或公司,你的网络访问受到限制,可以通过正向代理访问被封锁的网站。

  • 隐藏真实 IP 地址:例如你不想让别人知道你上网的地点或身份,通过正向代理可以隐藏你的真实信息。

  • 提高匿名性:正向代理还可以提高匿名性,保护你的隐私。


2. 反向代理

定义:

反向代理(Reverse Proxy)是一种代理服务器,客户端的请求首先发送到反向代理服务器,反向代理再将请求转发给内部的目标服务器。和正向代理相反,反向代理隐藏的是后端服务器的真实信息。

工作原理:

  • 你(客户端)向反向代理发送请求。

  • 反向代理决定把请求转发给哪个真实的服务器(后端服务器)。

  • 反向代理把后端服务器的响应返回给你。

实际生活中的例子:

想象你到了一家大型超市,门口有一个接待员。接待员会先了解你需要购买什么,然后带你去相应的货架。你不知道货架的位置,也不知道哪个货架上有你需要的商品。接待员(反向代理)帮你找到商品,并把它交给你。

应用场景:

  • 负载均衡:例如有多台服务器来处理大量的用户请求,反向代理会根据不同的规则把请求分发到不同的服务器,保证负载均衡,提高性能。

  • 提高安全性:反向代理可以隐藏真实服务器的 IP 地址,这样外部的用户就无法直接访问到内部的服务器,增强了安全性。

  • 缓存:反向代理可以缓存常用的请求内容,减少后端服务器的负担,提高响应速度。


正向代理与反向代理的区别

特点正向代理反向代理
代理对象客户端通过代理访问外部服务器。客户端通过代理访问内部服务器。
目的主要是帮助客户端访问外部的服务。主要是帮助服务器管理外部的请求,保护内部服务器。
谁知道代理目标服务器不知道客户端的真实地址。客户端不知道后端服务器的真实地址。
常见应用访问控制、绕过网络限制、匿名访问等。负载均衡、安全保护、缓存、SSL 加速等。

总结

  • 正向代理:是客户端使用代理服务器访问外部资源,隐藏客户端的信息和请求。

  • 反向代理:是客户端通过代理服务器访问内部资源,隐藏后端服务器的信息,常用于负载均衡和安全防护。


  • 正向代理:就像你委托朋友去商店买东西,商店并不知道你是谁,只知道你的朋友来买。

  • 反向代理:就像你去超市,门口有接待员帮你决定哪个货架上有你需要的商品,超市不直接知道你是什么人。


  • 正向代理: 帮助你绕过限制,访问你想去的地方。

  • 反向代理: 帮助网站管理访问,保证服务更快、更安全。

二、nginx代理配置

Nginx 是一款高性能的 Web 服务器和反向代理服务器,常被用于负载均衡、反向代理、静态文件服务等场景。它的配置简单且功能强大,是目前最受欢迎的反向代理工具之一。

概述及其原理

Nginx 代理的原理:

  1. 反向代理:

    • 客户端发出的请求先到达 Nginx 服务器,Nginx 根据配置规则将请求转发到真实的后端服务器(如应用服务器、数据库服务器等)。

    • 客户端通常无法直接访问后端服务器,所有请求和响应都通过 Nginx 代理进行处理。

    • 通过这种方式,Nginx 可以隐藏后端服务器的真实 IP,提供负载均衡、缓存等功能。

  2. 正向代理:

    • 虽然 Nginx 的主流用途是反向代理,但它也可以配置为正向代理,用于让客户端访问被限制的资源。


环境搭建

  1. 安装 Nginx:
    在 Linux 上可以通过包管理器(如 yumapt)来安装 Nginx。

    • CentOS/RHEL 系统:

      sudo yum install nginx
      
    • Ubuntu/Debian 系统:

      sudo apt update
      sudo apt install nginx
      
  2. 启动 Nginx:

    sudo systemctl start nginx
    
  3. 检查 Nginx 是否安装成功:
    在浏览器中访问 http://localhosthttp://服务器IP,如果看到 Nginx 的欢迎页面,说明安装成功。

  4. 设置开机自启:

    sudo systemctl enable nginx
    

基本配置及其语法

Nginx 配置文件通常位于 /etc/nginx/nginx.conf/etc/nginx/conf.d/ 目录下。配置文件的基本语法包括:

  1. 主配置块: 定义 Nginx 运行的基本信息,如工作进程数、日志路径等。

    user nginx;                  # 定义 Nginx 运行的用户
    worker_processes 1;          # 定义工作进程数
    error_log  /var/log/nginx/error.log;   # 错误日志文件
    pid /var/run/nginx.pid;      # Nginx 进程 ID 文件
    
  2. http 块: 包含了与 HTTP 服务相关的配置。

    http {include       mime.types;   # 引入 MIME 类型文件default_type  application/octet-stream;   # 默认 MIME 类型log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';   # 日志格式access_log  /var/log/nginx/access.log  main;   # 访问日志文件
    }
    
  3. server 块: 每个 server 块用于定义一个虚拟主机配置。

    server {listen       80;           # 监听 80 端口server_name  localhost;    # 域名location / {               # 根路径配置root   /usr/share/nginx/html;index  index.html index.htm;}
    }
    
  4. location 块: 用于定义具体 URL 路径的配置。

    location /images/ {root /data;   # 为 /images 路径提供文件服务,根目录为 /data
    }
    

Nginx 反向代理配置

在 Nginx 中配置反向代理非常简单。最基本的配置如下:

server {listen 80;  # 监听 80 端口server_name example.com;  # 绑定域名location / {
#    location /user/ { 假如是这样就表示 example.com/user/就会反向代理到下面地址
#    这种表示/user开头proxy_pass http://backend_server;  # 将请求转发到 backend_serverproxy_set_header Host $host;       # 保留原始请求头proxy_set_header X-Real-IP $remote_addr;  # 获取真实的客户端 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发 IP 信息,这个会发到被反向代理的服务器,方便查看proxy_set_header X-Forwarded-Proto $scheme;  # 转发协议信息}
}

这里,Nginx 会把客户端对 example.com 的请求转发到后端的 backend_server 上,通常这是一个其他 Web 服务器或应用服务器的地址。

Nginx 负载均衡配置

如果你有多个后端服务器,可以配置负载均衡,将请求分发到多个后端服务器上:

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;}server {listen 80;location / {proxy_pass http://backend;  # 将请求转发到 upstream 定义的服务器}}
}

这样,Nginx 会将请求均匀地分发到 backend1.example.combackend2.example.combackend3.example.com 上。


Nginx性能优化配置

下面是一个详细的 Nginx 性能优化配置文件,其中包含了每个配置项的说明和注释。这样你可以方便地理解每一项配置的作用。

# Nginx 性能优化配置文件# 设定 worker 进程的数量。通常设置为 CPU 核心数,`auto` 会自动设置为 CPU 核心数量。
worker_processes auto;  # 自动选择工作进程数为 CPU 核心数# 配置每个工作进程最大连接数。这个值可以根据服务器的负载和并发情况进行调整。
worker_connections 1024;  # 每个工作进程最大连接数# 使用 epoll 模型(Linux 系统专用),它是事件驱动模型,适用于高并发的场景。
events {use epoll;  # 使用 epoll 模型(仅适用于 Linux)worker_connections 1024;  # 每个 worker 进程最大支持的连接数
}http {# 启用 Gzip 压缩,减小数据传输量,提高传输速度。gzip on;  # 启用 Gzip 压缩gzip_comp_level 6;  # 设置压缩级别,范围 1-9,9 是最高压缩比,但会消耗更多 CPUgzip_types text/plain text/css application/javascript application/json image/svg+xml;  # 启用对这些类型文件的压缩gzip_vary on;  # 允许根据客户端请求的压缩gzip_min_length 1000;  # 文件大小大于 1000 字节才进行压缩# 配置 TCP 参数优化tcp_nopush on;  # 启用 TCP_NOPUSH,减少网络包的发送数量tcp_nodelay on;  # 启用 Nagle 算法,减少延迟# 配置 HTTP 连接的保持时间(Keep-Alive)keepalive_timeout 65;  # 客户端和服务器之间保持连接的超时时间(秒)# 配置访问日志格式,减少日志记录对性能的影响access_log /var/log/nginx/access.log main;  # 配置默认的访问日志路径# 配置日志格式(可以选择简化或禁用日志)log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';  # 记录更多细节的日志格式# 静态文件缓存配置,减少不必要的重复请求location /images/ {root /var/www/html;  # 设置文件根目录expires 30d;  # 缓存静态文件 30 天add_header Cache-Control "public";  # 启用公共缓存}# 反向代理缓存配置,缓存请求并减少后端服务器的压力proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;  # 启用代理缓存proxy_cache_valid 200 1h;  # 200 状态码的响应缓存 1 小时proxy_cache_use_stale error timeout updating;  # 错误或超时时使用过期缓存proxy_pass http://backend;  # 请求转发到后端服务器}}# 配置限制请求速率,防止恶意流量或 DDoS 攻击limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;  # 每秒 1 个请求server {location / {limit_req zone=mylimit burst=5;  # 每秒最大 1 个请求,最多允许 5 个请求突发}}# 配置连接数限制,每个 IP 地址的连接数限制limit_conn_zone $binary_remote_addr zone=addr:10m;  # 限制每个 IP 的连接数server {location / {limit_conn addr 10;  # 每个 IP 最多 10 个并发连接}}# 配置反向代理负载均衡(轮询方式)upstream backend {server backend1.example.com;  # 后端服务器 1server backend2.example.com;  # 后端服务器 2server backend3.example.com;  # 后端服务器 3}server {location / {proxy_pass http://backend;  # 代理请求到负载均衡池}}# 配置 SSL 加速,优化 TLS 设置server {listen 443 ssl;  # 启用 SSLssl_certificate /etc/ssl/certs/server.crt;  # SSL 证书路径ssl_certificate_key /etc/ssl/private/server.key;  # SSL 密钥路径# 启用 SSL 会话缓存ssl_session_cache shared:SSL:10m;  # 使用 10MB 的共享会话缓存ssl_session_timeout 1d;  # 设置会话超时时间为 1 天# 启用更安全的协议ssl_protocols TLSv1.2 TLSv1.3;  # 启用更安全的协议版本# 配置加密套件ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:...';  # 设置加密套件ssl_prefer_server_ciphers on;  # 优先使用服务器端的加密套件}
}

配置说明:

  1. worker_processes 和 worker_connections:这两个参数决定了 Nginx 能处理的最大连接数。worker_processes 通常设置为 CPU 核心数,而 worker_connections 决定了每个进程能处理的最大连接数。

  2. Gzip 压缩:开启 Gzip 压缩可以大大减少客户端和服务器之间传输的文件大小,提高带宽利用率。

  3. TCP 参数:通过 tcp_nopushtcp_nodelay 优化 TCP 连接,减少数据包传输的延迟。

  4. Keep-Alive:可以减少每次请求时创建连接的开销,允许多个请求复用同一个连接。

  5. 缓存:通过缓存静态资源和代理缓存来减少服务器负载,提高响应速度。

  6. 请求限制:对过多的请求进行限制,防止恶意攻击(如 DDoS 攻击)。

  7. 负载均衡:配置反向代理负载均衡,将请求分发到多个后端服务器上,提高服务器的处理能力。

  8. SSL 配置:优化 SSL/TLS 配置,确保安全和性能之间的平衡。

这些配置有助于提高 Nginx 的性能,减少资源消耗,保证高并发时的稳定性。你可以根据实际需求对这些配置进行调整。


获取真实 IP 地址

当客户端通过 Nginx 访问后端服务器时,Nginx 默认会把自己的 IP 地址作为请求头 X-Forwarded-For 传递给后端服务器。如果你想要获取客户端的真实 IP 地址,需要确保代理设置正确。

proxy_set_header 配置中,我们已经传递了客户端的真实 IP 地址:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
后端服务器获取客户端真实 IP 地址:

在后端服务器的日志中,可以通过读取 X-Real-IPX-Forwarded-For 请求头来获取客户端的真实 IP 地址。

如果你使用的是 PHP,你可以通过以下代码获取真实 IP:

$client_ip = $_SERVER['HTTP_X_REAL_IP'] ?? $_SERVER['REMOTE_ADDR'];

如果你使用的是 Nginx 后端日志记录,可以配置日志格式为:

log_format main '$proxy_add_x_forwarded_for - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

这样,X-Forwarded-For 中会包含客户端的真实 IP。


总结

  1. 环境搭建: 使用包管理工具安装 Nginx,启动服务后,确保可以访问 localhost

  2. 基本配置: 配置 Nginx 的监听端口、日志格式、虚拟主机等基本设置。

  3. 反向代理配置: 使用 proxy_pass 配置将请求转发到后端服务器。

  4. 负载均衡: 使用 upstream 块进行负载均衡配置,多个后端服务器的流量均衡分发。

  5. 获取真实 IP: 配置 proxy_set_header 确保后端服务器获取到真实客户端的 IP 地址。

希望这些内容能帮助你理解 Nginx 代理配置的基础!如果有任何疑问,随时告诉我!

三、动静分离部署

四、负载均衡

五、基于nginx的负载均衡

相关文章:

  • 【了解】通感算一体化网络
  • Selenium模拟人类行为,操作网页的方法(全)
  • 每日算法-250506
  • 大模型系列(三)--- ​ GPT1: Improving Language Understanding by Generative Pre-Training​
  • 【HarmonyOS 5】鸿蒙用户头像编辑功能实践
  • 基于【抖音弹幕抓取数据推送】——制作抖音消息分类查看界面
  • YOLOv8的Python基础--函数篇
  • B站pwn教程笔记-6
  • Linux[Makefile]
  • Vue3路由模式为history,使用nginx部署上线后刷新404的问题
  • Leetcode - 周赛448
  • PostgreSQL数据库的array类型
  • 密码工具类-生成随机密码校验密码强度是否满足要求
  • GPS定位方案
  • 使用阿里AI的API接口实现图片内容提取功能
  • three.js通过GEO数据生成3D地图
  • 2025年5月HCIP题库(带解析)
  • 基于计算机视觉的试卷答题区表格识别与提取技术
  • js var a=如果ForRemove=true,是“normal“,否则为“bold“
  • 网页版部署MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南
  • 公募基金改革八大要点:建立浮动管理费收取机制、降低规模排名考核权重
  • 印巴战火LIVE|巴基斯坦多地遭印度导弹袭击,巴总理称“有权作出适当回应”
  • 同为“东部重要中心城市”后交出首份季报:宁杭苏表现如何?
  • 共生与伴生:关于人工智能时代艺术评论的对象与主体的思考
  • 南方地区强降雨或致部分河流发生超警洪水,水利部部署防范
  • 争抢入境消费红利,哪些城市有潜力?