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

nginx 复制代码
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;
  }
  
}

测试数据

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

路径:/etc/nginx/conf.d/nginx_proxy.conf

地址:192.168.131.130

nginx 复制代码
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. 访问测试
shell 复制代码
nginx -t
systemctl reload nginx
  1. 观察日志

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

shell 复制代码
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. 代理配置详解

代理设置:

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

nginx 复制代码
server {
  listen 80;
  server_name wang.wangmingqu.com;
  charset utf-8;

  location / {
    root /www/wangmingqu/;
    index index.html index.htm;
  }
  
}

代理服务器

  1. 子配置文件

路径:/etc/nginx/conf.d/default.conf

地址:192.168.131.130

shell 复制代码
#创建缓存存放目录
mkdir -p /www/nginx_proxy_cache/wangmingqu/
nginx 复制代码
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. 配置文件解释

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. 验证缓存服务
shell 复制代码
nginx -t
systemctl reload nginx

访问结果

缓存目录

相关推荐
睡不醒的猪儿12 小时前
Nginx 服务优化与防盗链配置方案
运维·nginx
大佐不会说日语~12 小时前
使用 Cloudflare平台 + Docker + Nginx 完成网站 HTTPS 部署实战记录
nginx·docker·https·部署·cloudflare
Knight_AL12 小时前
使用 Nginx 为内网 Java 服务实现 HTTPS
java·nginx·https
坚持学习前端日记13 小时前
Nginx 搭建文件服务器
运维·服务器·nginx
徐同保14 小时前
nginx接口超时,增加接口超时时间
运维·nginx
Benny的老巢1 天前
Mac上用XAMPP搭建局域网可访问的开发环境,让局域网内其他设备通过域名访问
nginx·macos·apache·xampp·php开发环境
岚天start1 天前
Docker部署NGINX实现服务四层转发方案
服务器·nginx·docker
微凉的衣柜1 天前
Windows Server 使用 Nginx 反向代理实现域名访问内网 Gradio 应用
运维·windows·nginx
上去我就QWER1 天前
什么是反向代理?
后端·nginx
小白冲鸭1 天前
苍穹外卖-前端环境搭建-nginx双击后网页打不开
运维·前端·nginx