• 06. Nginx进阶-Nginx代理服务


    proxy代理功能

    正向代理

    什么是正向代理?

    正向代理(forward proxy),一个位于客户端和原始服务器之间的服务器。

    工作原理

    1. 为了从原始服务器获取内容,客户端向代理发送一个请求并指定目标(即原始服务器);
    2. 然后代理服务器向原始服务器转发请求并获取内容返回给客户端,此时客户端才能使用正向代理。

    示意图

    备注

    在系统运维工作中很难使用到nginx的正向代理,此处忽略正向代理的学习。

    反向代理

    什么是反向代理?

    反向代理(reverse proxy),一个位于服务端的服务器。

    工作原理

    1. 代理服务端接收来自网络上的连接请求;
    2. 然后将请求转发给内部网络的服务端;
    3. 并从服务端获取结果返回给请求的客户端;

    示意图

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

    1. 位置不同,正向代理架设在客户端和服务端直接,而反向代理架设在服务端。
    2. 代理对象不同,正向代理是代理的客户端,服务器不知道实际发起请求的客户端是谁;而反向代理是代理的服务端,客户端不知道实际提供服务的服务端是谁。

    Nginx反向代理应用

    模块名称

    ngx_http_proxy_module

    常见语法

    1. 代理设置
      1. proxy_pass URL:代理后端服务器URL
      2. 适用范围:location
    2. 缓冲区设置
      1. proxy_buffering on | off:缓冲区的开启与关闭
      2. 适用范围:http、server、location
    3. 缓冲区大小设置
      1. proxy_buffer_size size:设置缓冲区的大小
      2. 适用范围:http、server、location
    4. 缓冲区数量设置
      1. proxy_buffers number size:缓冲区数量大小
      2. 适用范围:http、server、location
    5. 忙碌的缓冲区大小设置
      1. proxy_busy_buffers_size size:设置忙碌的缓冲区大小
      2. 适用范围:http、server、location
    6. 头信息设置
      1. proxy_set_header field value:设置真实客户端地址
      2. 适用范围:http、server、location
    7. 连接超时时间设置
      1. proxy_connect_timeout time:连接超时设置
      2. 适用范围:http、server、location
    8. 读取超时时间设置
      1. proxy_read_timeout:读取超时设置
      2. 适用范围:http、server、location
    9. 发送超时时间设置
      1. proxy_send_timeout timeout:发送超时设置
      2. 适用范围:http、server、location

    应用反向代理

    注意:使用的yum的Nginx服务方式实验。

    1. 配置网站Nginx服务(服务端)

    路径:/etc/nginx/conf.d/wangmingqu.conf
    地址:192.168.131.129

    server {
      auth_basic "账号密码登录";
      auth_basic_user_file /etc/nginx/conf.d/.passwd;
    
      listen 80;
      server_name wang.wangmingqu.com;
      charset utf-8;
    
      location / {
        root /www/wangmingqu/;
        index index.html index.htm;
      }
      
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    测试数据

    mkdir -p /www/wangmingqu/
    echo "后端提供服务主机" >> /www/wangmingqu/index.html
    echo "服务器主机的地址" >> /www/wangmingqu/index.html
    
    • 1
    • 2
    • 3
    1. 配置代理服务(即proxy端)

    路径:/etc/nginx/conf.d/nginx_proxy.conf
    地址:192.168.131.130

    server {
        listen       80;
        server_name  localhost;
        
        location / {
            proxy_pass http://wang.wangmingqu.com:80;
            proxy_redirect default;
        
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
            proxy_connect_timeout 60;
            proxy_send_timeout 60;
            proxy_read_timeout 60;
    
            proxy_buffering on;
            proxy_buffer_size 32k;
            proxy_buffers 4 128k;
            proxy_busy_buffers_size 256k;
            proxy_max_temp_file_size 256k;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
      
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    1. 访问测试
    nginx -t
    systemctl reload nginx
    
    • 1
    • 2

    image.png

    1. 观察日志

    可以看到最后一个参数显示了客户端的真实IP

    192.168.131.130 - wangmingqu [18/Jan/2024:22:00:26 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" "192.168.131.1"
    
    • 1
    1. 代理配置详解

    代理设置:
    proxy_pass http://wang.wangmingqu.com:80;
    #代理后端web服务器配置
    #语法格式:proxy_pass URL;
    #指定要代理的服务端的协议、地址、端口和URL;
    #URL设置方式:http://localhost:80/url/、http://127.0.0.1:80/url/
    #可配置区域:location

    proxy_redirect default;
    #修改web服务器返回的响应头中的location头域跟refresh头域数值;
    #语法格式:proxy_redirect [default|off;redirect replacement]
    #默认配置:proxy_redirect default;即在转发时使用默认端口
    #可配置区域:http、server、location

    客户端地址设置:
    proxy_set_header Host $http_host;
    #语法格式:proxy_set_header field value;
    #默认设置:proxy_set_header Host $http_host;
    #可配置区域:http、server、location
    #转发时是否设置http头部
    #如果web服务器设置了多个虚拟主机,那么必须配置这一项,如果不配置那么只显示最靠前的站点,按照字母a到z排序。

    proxy_set_header X-Real-IP $remote_addr;
    #转发时是否添加真实主机的IP

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    #客户端通过代理访问后端服务,后端服务通过该变量获取客户端的真实IP

    超时设置:
    proxy_connect_timeout 60;
    #语法格式:proxy_connect_timeout 超时时间;
    #可配置区域:http、server、location
    #Nginx代理与后端服务器连接超时时间
    #连接超时设置。

    proxy_send_timeout 60;
    #语法格式:proxy_send_timeout 超时时间;
    #可配置区域:http、server、location
    #Nginx代理等待后端服务器的响应时间
    #发送超时设置。

    proxy_read_timeout 60;
    #语法格式:proxy_read_timeout 超时时间;
    #可配置区域:http、server、location
    #后端服务器数据回传给Nginx代理的超时时间
    #读取超时设置。

    缓存设置:
    proxy_buffering on;
    #启用缓冲区设置
    #可配置区域:http、server、location

    proxy_buffer_size 32k;
    #设置Nginx代理保存用户头信息的缓冲区大小
    #可配置区域:http、server、location

    proxy_buffers 4 128k;
    #设置缓冲区文件个数及大小
    #可配置区域:http、server、location

    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;

    proxy缓存功能

    简介

    什么是代理缓存?

    在代理服务器上开启的缓存,主要用于减少后端服务器的压力。

    模块名称

    代理缓存应用

    后端服务器

    路径:/etc/nginx/conf.d/wangmingqu.conf
    地址:192.168.131.129

    server {
      listen 80;
      server_name wang.wangmingqu.com;
      charset utf-8;
    
      location / {
        root /www/wangmingqu/;
        index index.html index.htm;
      }
      
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    代理服务器

    1. 子配置文件

    路径:/etc/nginx/conf.d/default.conf
    地址:192.168.131.130

    #创建缓存存放目录
    mkdir -p /www/nginx_proxy_cache/wangmingqu/
    
    • 1
    • 2
    proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ levels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;
    
    server {
      listen 80;
      server_name locathost;
    
      location / {
        proxy_pass http://wang.wangmingqu.com:80;
        proxy_redirect default;
    
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
        proxy_connect_timeout 60;
        proxy_send_timeout 60;
        proxy_read_timeout 60;
    
        proxy_buffering on;
        proxy_buffer_size 32k;
        proxy_buffers 4 128k;
        proxy_busy_buffers_size 256k;
        proxy_max_temp_file_size 256k;
        
        proxy_cache proxy_wang_cache;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        
        proxy_cache_key $host$uri$is_args$args;
        add_header Nginx-Cache "$upstream_cache_status";
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    1. 配置文件解释

    proxy_cache_path /www/nginx_proxy_cache/wangmingqu/ lavels=1:2 keys_zone=proxy_wang_cache:10m max_size=10g inactive=60m use_temp_path=off;

    • proxy_cache_path:声明代理缓存路径信息
    • /www/nginx_proxy_cache/wangmingqu/:缓存数据存放路径
    • lavels=1:2:缓存时使用几级目录存储,此处为二级目录存储
    • keys_zone=proxy_wang_cache:10m:定义一个名字叫proxy_wang_cache的缓存规则,此缓存区规则的大小为10m
    • max_size=10g:定义最大的缓存空间大小为10G
    • inactive=60m:不活跃的缓存60分钟后会被清除
    • use_temp_path=off:关闭用户临时路径的使用

    proxy_cache proxy_wang_cache;

    • 引用定义的缓存配置

    proxy_cache_valid 200 304 12h;

    • 定义状态码为200、304的数据缓存12个小时

    proxy_cache_valid any 10m;

    • 定义其他状态的数据缓存10分钟

    proxy_cache_key h o s t host hosturi i s a r g s is_args isargsargs;

    • 在存储用户信息

    add_header Nginx-Cache “$upstream_cache_status”;

    • 缓存状态返回给客户端

    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

    • 当出现500、502、503、504的错误码时,代理服务会跳过此后端服务器,并将请求发送到其他后端服务器
    1. 验证缓存服务
    nginx -t
    systemctl reload nginx
    
    • 1
    • 2

    访问结果
    image.png
    缓存目录
    image.png

  • 相关阅读:
    YOLOv8 C2f模块融合shuffleAttention注意力机制
    (历史上最详细的网络)华为初级网络工程师知识点总结(二)工作考研均受益
    深入了解接口测试:Postman 接口测试指南
    Linux 终端命令总结
    【C++】————类和对象(下)
    【SpringBoot实战系列】Sharding-Jdbc实现分库分表到分布式ID生成器Snowflake自定义wrokId实战
    10.27 知识总结(前端)
    CentOS7.8忘记密码后如何重置
    牛客网之SQL100题(4)
    如何在在线Excel文档中规范单元格输入
  • 原文地址:https://blog.csdn.net/weixin_40901913/article/details/136456373