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;}}

测试数据

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

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. 访问测试
nginx -t
systemctl reload nginx

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. 代理配置详解

代理设置:
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. 子配置文件

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

#创建缓存存放目录
mkdir -p /www/nginx_proxy_cache/wangmingqu/
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. 验证缓存服务
nginx -t
systemctl reload nginx

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/271725.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

几种电脑提示mfc140.dll丢失的解决方法,以及如何预防mfc140.dll丢失

mfc140.dll真是一个超级关键的动态链接库文件!一旦这个文件不翼而飞,可能会导致一些程序无法顺利运行,甚至给系统带来麻烦。但别担心!遇到mfc140.dll文件丢失的情况,我们有一堆应对措施可以立马施行,确保问…

C++指针(四)万字图文详解!

个人主页:PingdiGuo_guo 收录专栏:C干货专栏 前言 相关文章:C指针(一)、C指针(二)、C指针(三) 本篇博客是介绍函数指针、函数指针数组、回调函数、指针函数的。 点赞破六…

五、软考-系统架构设计师笔记-信息安全技术基础知识

信息安全技术基础知识 1、信息安全基础知识概述 信息安全的概念 信息安全包括 5 个基本要素: 机密性:确保信息不暴露给未授权的实体或进程。完整性:只有得到允许的人才能修改数据,并且能够判别出数据是否已被篡改。可用性:得到授权的实体在需要时可以…

代码随想录 回溯算法-排序

目录 46.全排序 47.全排列|| 332.重新安排行程 46.全排序 46. 全排列 中等 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,…

关于出国留学和考研比较----以本人双非跨考计算机为例

文章目录 中心论点国内就业现状勿让旧认知害了自己那出国留学真的一无是处了吗?1. 藤校仍旧是具有极高价值2. 时间成本低3. 研究生一定比单纯的本科找工作强!4. 很多人说出国读博好,可以无脑入,真是这样吗? 中心论点 如果在选择出国留学还是国内考研的最终核心诉求都是有更好…

985硕的4家大厂实习与校招经历专题分享(part2)

我的个人经历: 985硕士24届毕业生,实验室方向:CV深度学习 就业:工程-java后端 关注大模型相关技术发展 校招offer: 阿里巴巴 字节跳动 等10 研究生期间独立发了一篇二区SCI 实习经历:字节 阿里 京东 B站 (只看大厂,面试…

(MATLAB)第十二章-数列与极限

目录 12.1 数列 12.1.1 数列求和 1. 累计求和函数sum() 2. 忽略NaN累计求和函数 nansum() 3. 求此元素位置之前的元素和函数cumsum() 4. 求梯形累计和函数cumtrapz() 12.1.2 数列求积 1. 元素连续相乘函数 prod() 2. 求累计积函数 cumprod() 3. 阶乘函数 ffactorial(n…

【C++精简版回顾】18.文件操作

1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 &#xff08;1&#xff09;函数名 文件对象.open &#xff08;2&#xff09;函数参数 /* ios::out 可读 ios::in 可…

【C++】C++模板基础知识篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…

基于Java的生活废品回收系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

硬盘温度过高会怎么办?机箱温度多少算正常?

硬盘温度 硬盘在使用过程中&#xff0c;断电很容易导致数据丢失&#xff0c;但如果温度过高&#xff0c;也可能对硬盘造成损坏。 硬盘的温度是决定电脑能否正常使用的重要因素。 如果长时间读取和存储数据&#xff0c;硬盘的温度会升高。 那么&#xff0c;硬盘的正常温度是多少…

万字详解,Java实现低配版线程池

文章目录 1.什么是线程池2.线程池的优势3.原理4.代码编写4.1 阻塞队列4.2 ThreadPool线程池4.3 Worker工作线程4.4 代码测试 5. 拒绝策略5.1 抽象Reject接口5.2 BlockingQueue新增tryPut方法5.3 修改ThreadPool的execute方法5.4 ThreadPool线程池构造函数修改5.5 拒绝策略实现1…

利用“定时执行专家”循环执行BAT、VBS、Python脚本——含参数指定功能

目录 一、软件概述 二、VBS脚本执行设置 三、触发器设置 四、功能亮点 五、总结 在自动化办公和日常计算机任务管理中&#xff0c;定时执行脚本是一项非常重要的功能。今天&#xff0c;我将为大家带来一款名为“定时执行专家”的软件的评测&#xff0c;特别是其定时执行VB…

Android中的传感器类型和接口名称

本文将介绍传感器坐标轴、基础传感器和复合传感器&#xff08;动作传感器、姿势传感器、未校准传感器和互动传感器&#xff09;。 1. 传感器坐标轴 许多传感器的传感器事件值在相对于设备静止的特定坐标系中表示。 1.1 移动设备坐标轴 Sensor API 仅与屏幕的自然方向相关&a…

MySQL面试题-锁(答案版)

锁 1、MySQL 有哪些锁&#xff1f; &#xff08;1&#xff09;全局锁 加了全局锁之后&#xff0c;整个数据库就处于只读状态了&#xff0c;这时其他线程执行以下操作&#xff0c;都会被阻塞&#xff1a; 对数据的增删改操作&#xff0c;比如 insert、delete、update等语句&…

【Git】merge时报错:refusing to merge unrelated histories

文章目录 一、问题二、解决办法1、将feature分支的东西追加到master分支中2、将feature里的东西直接覆盖到master分支中 一、问题 今天将feature分支合并到master时报错&#xff1a;refusing to merge unrelated histories&#xff08;拒绝合并无关历史&#xff09; 报错原因&…

IDEA自带 .http 请求工具文档

基础语法 请求格式 基础格式 Method Request-URI HTTP-Version Header-field: Header-valueRequest-Body其中&#xff0c;GET 请求可以省略 Method 不写&#xff1b;HTTP-Version 可以省略不写&#xff0c;默认使用 1.1 版本。 示例&#xff1a; GET https://www.baidu.co…

Linux 文件系列:深入理解文件描述符fd,重定向,自定义shell当中重定向的模拟实现

Linux 文件系列:深入理解文件fd,重定向,自定义shell当中重定向的模拟实现 一.预备知识二.回顾C语言中常见的文件接口跟重定向建立联系1.fopen函数的介绍2.fclose函数的介绍3.代码演示1.以"w"(写)的方式打开2.跟输出重定向的联系3.以 "a"(追加)的方式打开4.…

Nginx正向代理域名的配置

目录 前言 1.打开文件 2. 启用代理 3. 指定代理服务器 4. 保存配置文件并重新加载Nginx。 5. 添加域名解析。 6. 配置客户端。 总结 前言 Nginx是一个高性能、开源的Web服务器软件&#xff0c;不仅可以作为反向代理服务器使用&#xff0c;还可以作为正向代理服务器使用…

Filter过滤器+JWT令牌实现登陆验证

一、背景 我们需要在客户端访问服务器的时候给定用户一定的操作权限&#xff0c;比如没有登陆时就不能进行其他操作。如果他需要进行其他操作&#xff0c;而在这之前他没有登陆过&#xff0c;服务端则需要将该请求拦截下来&#xff0c;这就需要用到过滤器&#xff0c;过滤器可以…