【NGINX入门指北】 进阶篇

news2024/11/26 7:43:55

nginx 进阶篇


文章目录

  • nginx 进阶篇
  • 一、Nginx Proxy 服务器
    • 1、代理原理
    • 2、proxy代理
    • 3、proxy缓存


在这里插入图片描述


一、Nginx Proxy 服务器

1、代理原理

  • 正向代理

内网客户机通过代理访问互联网,通常要设置代理服务器地址和端口。
在这里插入图片描述

  • 反向代理
    外网用户通过代理访问内网服务器,内网服务器无感知。
    在这里插入图片描述

在这里插入图片描述

  • 正向代理与反向代理的区别是什么?

2、proxy代理

  • 模块:ngx_http_proxy_module

  • 语法:

代理
Syntax: proxy_pass_ URL; 代理的后端服务器URL
Default: _
Context: location,if in location,limit_except

缓冲区
Syntax: proxy_buffering on | off;
Default: proxy_buffering on | off; # 缓冲开关
Context: http,server,location
proxy_buffering 开启的情况下,nginx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端(边收边传,不是全部接收完在传给客户端读)

Syntax: proxy_buffersnumber size ;
Default: proxy_buffer_size 4k|8k; # 缓冲区数量
Context: http,server,location

Syntax: proxy_buffer_size size ;
Default: proxy_buffers 8 4k|8k; # 缓冲区大小
Context: http,server,location

Syntax: proxy_busy_buffers_size size ;
Default: proxy_busy_buffers_size 8k|16k; # 忙碌缓冲区的大小,控制同时传递给客户端的buffer数量
Context: http,server,location

头信息
Syntax: proxy_set_header field value ;
Default: proxy_set_header Host $proxy_host ; # 设置真实客户端地址
proxy_set_header Connection close;
Context: http,server,location

超时

Syntax: proxy_connect_timeout time ;
Default: proxy_connect_timeout 60s; # 连接超
Context: http,server,location

Syntax: proxy_read_timeout time ;
Default: proxy_connect_timeout 60s;
Context: http,server,location

Syntax: proxy_send_timeout time ; # nginx进程向fastcgi进程发送request的整个过程的超时时间
Default: proxy_send_timeout 60s;
Context: http,server,location

  • 启用代理
    环境:两台nginx服务器
IPservername
192.168.200.184nginx1
192.168.200.186nginx2

两台服务器分别安装好nginx

1.nginx1 启动网站(内容)

yum install -y nginx
systemctl start nginx
[root@nginx1 html]# cat /usr/share/nginx/html/index.html 
Hello World!
<img src="test.jpg" width=400 border=3 />
[root@nginx1 html]# 

在这里插入图片描述

2.nginx2 启动代理程序

yum install -y nginx
systemctl start nginx
[root@nginx2 html]# vim /etc/nginx/conf.d/default.conf
    location / {
        proxy_pass http://192.168.200.184: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;

		# 启动代理程序可以注释掉下面的内容
       #expires 24h;
       #root   /usr/share/nginx/html;
       #index  index.html index.htm;
        # root /app;
        # random_index on;
    }
[root@nginx2 html]# systemctl restart nginx

在这里插入图片描述

3.结果:开启代理之后访问192.168.200.184 和192.168.200.186 的内容一样的
在这里插入图片描述
在这里插入图片描述
4.观察nginx1服务器的日志

[root@nginx1 html]# cat /var/log/nginx/access.log
192.168.200.186 - - [09/Feb/2023:00:18:24 +0800] "GET /test.jpg HTTP/1.0" 200 350627 "http://192.168.200.186/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36" "192.168.200.1"

访问成功,记录了客户机的IP和代理服务器的IP

3、proxy缓存

  • 缓存类型
    网页缓存(公网)CDN
    数据库缓存 memcache redis
    网页缓存 nginx-proxy
    客户端缓存 浏览器缓存

  • 模块:ngx_http_proxy_module

  • 语法:

缓存开关
Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http,server,location

代理缓存
Syntax: proxy_cache_path path [levels=levels] keys_zone=name:size[inactive=time][max_size=size];
Default: _
Context: http
example: proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

缓存维度
Syntax: proxy_cache_key string; #定义缓存唯一key,通过唯一key来进行hash存取,缓存文件名
Default: proxy_cache_key s c h e m e scheme schemeproxy_host$request_uri;
Context: http,server,location

缓存过期
Syntax: proxy_cache_valid [code…] time;
Default: _
Context: http,server,location
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;

  • 启动缓存

1.延续代理实验环境
2.设置nginx2为缓存服务器

添加如下配置

[root@nginx2 html]# vim /etc/nginx/nginx.conf
http {
    proxy_cache_path  /data/nginx/cache  levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;
}
[root@nginx2 html]# vim /etc/nginx/conf.d/default.conf
    location / {
        proxy_pass http://192.168.200.184: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_cache;  # proxy_cache 使用名为对应的缓存配置
		proxy_cache_valid 200 304 12h; # 对httpcode为200...的缓存12小时
		proxy_cache_valid any 10m; #设置不同响应码的缓存时间,除了上面的,其他的存10分钟
	 
		proxy_cache_key $host$uri$is_args$args;  # proxy_cache_key $host$uri 定义缓存唯一key,通过唯一key来进行hash存取
	add_header Nginx-Cache "$upstream_cache_status"; # add_header:缓存命中情况如何在http头中体现,以及在nginx日志中查看  proxy_cache_path 缓存文件路径
		proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 出现502~504或错误,会跳过此服务器访问下一台服务器

		# 启动代理程序可以注释掉下面的内容
       #expires 24h;
       #root   /usr/share/nginx/html;
       #index  index.html index.htm;
        # root /app;
        # random_index on;
    }

[root@nginx1 ~]# touch test01.txt
[root@nginx1 ~]# touch test02.txt
[root@nginx1 ~]# md5sum test01.txt
d41d8cd98f00b204e9800998ecf8427e  test01.txt
[root@nginx1 ~]# md5sum test02.txt
d41d8cd98f00b204e9800998ecf8427e  test02.txt
[root@nginx1 ~]# 

[root@nginx2 data]# mkdir -p /data/nginx/cache
[root@nginx2 data]# cd  /data/nginx/cache
[root@nginx2 cache]# ls
[root@nginx2 cache]# systemctl restart nginx

3.使用PC客户机,再次访问nginx2服务器
4.通过PC客户机浏览器开发者功能,观察是否命中缓存。

命中:hit
在这里插入图片描述

在这里插入图片描述

未命中:miss
在这里插入图片描述

在这里插入图片描述

提示:新创建的网页文件,初次访问均为miss

nginx缓存工作原理

负载均衡部分讲解


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xpath注入[NPUCTF2020]ezlogin

[NPUCTF2020]ezlogin 打开界面 如果发现自己输入的信息由这样构成&#xff0c;可以往xpath注入上靠一下。 不管输入什么&#xff0c;很容易发现登陆就超时了&#xff0c;说明这里token是不断刷新的。 这样构造也是一样的目的都是为了闭合后面的&#xff0c;为啥有两个or呢 us…

Redis中有常见数据类型

Redis的数据类型 string数据类型 string是redis最基本的类型&#xff0c;而且string类型是二进制安全的。意思是redis的string可以包含任何 数据&#xff0c;比如jpg图片或者序列化的对象 String类型是最基本的数据类型&#xff0c;一个redis中字符串value最多可以是512M r…

Allegro如何使用Snake命令走蛇形线操作指导

Allegro如何使用Snake命令走蛇形线操作指导 在做PCB设计的时候,遇到不规则BGA的时候,蛇形走线是惯用的走线方式,类似下图 Allegro支持蛇形走线,具体操作如下 首先把过孔打好,尽量上下左右间距一致,不容易出现偏差,如下图在Command命令栏下方输入snake,然后回车

常见字符串函数的使用,你确定不进来看看吗?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…

2023年最强大的12款数据可视化工具,值得收藏

做数据分析也有年头了&#xff0c;好的坏的工具都用过&#xff0c;推荐几个觉得很好用的&#xff0c;避坑必看&#xff01; PS&#xff1a;一般比较成熟的公司里&#xff0c;数据分析工具不只是满足业务分析和报表制作&#xff0c;像我现在给我们公司选型BI工具&#xff0c;是做…

差分模拟信号转单端输出电路设计

需求分析&#xff1a; 1.差分输入0~16V -Vpp电压量&#xff1b; 2.输入频率0~1.2KHz&#xff1b; 3.单端对应输出0~3V的模拟量&#xff1b; 4.输出频率对应0~1.2KHz&#xff1b; 5.供电范围3~5V。 针对以上需求&#xff0c;设计如下图所示电路。 1.电路功能&#xff1a; …

Spring为什么这么火 之 Bean的6种作用域和Bean的生命周期

1、Bean的作用域 1.1、什么是作用域&#xff1f; 限定程序中变量的可用范围叫做作用域&#xff0c;或者说在源代码中定义变量的某个区域就叫做作用域 1.2、Bean的6种作用域 singleton&#xff1a;单例作用域prototype&#xff1a;原型作用域【多例作用域】request&#xff1…

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图&#xff0c;并配置数据对象&#xff08;不需要选择任意节点&#xff09; 2. 编码与测试 /*** 部署流程*/ Test…

C++类和对象(中)

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 I do not believe in taking the right decision. I take a decision and make it right. 我不相信什么正确的决定。我都是先做决定&#xff0c;然后把…

java二叉排序树

1.先看一个需求 给你一个数列 (7, 3, 10, 12, 5, 1, 9)&#xff0c;要求能够高效的完成对数据的查询和添加 2.解决方案分析 使用数组 数组未排序&#xff0c; 优点&#xff1a;直接在数组尾添加&#xff0c;速度快。 缺点&#xff1a;查找速度慢. [示意图] 数组排序&#xf…

车道线检测-PolyLaneNet 论文学习笔记

论文&#xff1a;《PolyLaneNet: Lane Estimation via Deep Polynomial Regression》代码&#xff1a;https://github.com/lucastabelini/PolyLaneNet地址&#xff1a;https://arxiv.org/pdf/2004.10924.pdf参考&#xff1a;https://blog.csdn.net/sinat_17456165/article/deta…

Java中的clone方法

注解定义&#xff1a; 注解是一种注释机制&#xff0c;它可以注释包、类、方法、变量、参数&#xff0c;在编译器生成类文件时&#xff0c;标注可以被嵌入到字节码中。注解的分类&#xff1a;内置注解Override :重写方法&#xff0c;引用时没有该方法时会编译错误public class …

使用 ThreeJS 实现第一个三维场景(详)

文章目录参考描述index.html三维场景的基本实现导入 ThreeJS准备工作场景摄像机视锥体正交摄像机透视摄像机渲染器后续处理将摄像机添加至场景中移动摄像机设置画布尺寸将渲染器创建的画布添加到 HTML 元素中渲染物体结构材质合成将物体添加至场景中代码总汇执行效果动画reques…

Python基础及函数解读(深度学习)

一、语句1.加注释单行注释&#xff1a;&#xff08;1&#xff09;在代码上面加注释&#xff1a; # 后面跟一个空格&#xff08;2&#xff09;在代码后面加注释&#xff1a;和代码相距两个空格&#xff0c; # 后面再跟一个空格多行注释&#xff1a;按住shift 点击三次"&am…

蓝桥杯刷题023——机器人塔(DFS)

2016国赛 题目描述 X 星球的机器人表演拉拉队有两种服装&#xff0c;A 和 B。 他们这次表演的是搭机器人塔。 类似&#xff1a; A B B A B A A A B B B B B A B A B A B B A 队内的组塔规则是&#xff1a; A 只能站在 AA 或 BB 的肩上。 B 只能站在 AB 或 BA 的肩上。 你的任务…

擎创动态 | 定了!建设银行首批生态合作伙伴

1月31日&#xff0c;建设银行以“云行金融之道&#xff0c;建可信未来”为主题在北京举办“建行云”发布会&#xff0c;首批推出三大类10个云服务套餐&#xff0c;为行业提供一站式解决方案。发布会上&#xff0c;建设银行推出“云霄”生态合作计划并公布首批39家“建行云”生态…

基于vue-admin-element开发后台管理系统【技术点整理】

一、Vue点击跳转外部链接 点击重新打开一个页面窗口&#xff0c;不覆盖当前的页面 window.open(https://www.baidu.com,"_blank")"_blank" 新打开一个窗口"_self" 覆盖当前的窗口例如&#xff1a;导入用户模板下载 templateDownload() {wi…

化繁为简|中信建投基于StarRocks构建统一查询服务平台

近年来&#xff0c;在证券服务逐渐互联网化&#xff0c;以及券商牌照红利逐渐消退的行业背景下&#xff0c;中信建投不断加大对数字化的投入&#xff0c;尤其重视数据基础设施的建设&#xff0c;期望在客户服务、经营管理等多方面由经验依赖向数据驱动转变&#xff0c;从而提高…

面试阿里测开岗,面试官说我不配24K,当场拍桌子翻脸....

好家伙&#xff0c;这奇葩事可真是多&#xff0c;前两天和粉丝聊天&#xff0c;他说前段时间面试阿里的测开岗&#xff0c;最后和面试官干起来了。 我问他为什么&#xff0c;他说没啥&#xff0c;就觉得面试官太装了&#xff0c;我说要24K&#xff0c;他说太高了&#xff0c;说…

中国区注册OpenAI账号试用ChatGPT指南

OpenAI最近推出ChatGPT&#xff0c;但国内&#xff08;包括香港&#xff09;并不支持OpenAI账号注册&#xff0c;多数会提示&#xff1a; OpenAI’s services are not available in your country. 前期准备 科学上网&#xff0c;最好是美国IP&#xff08;可以购买v屁n&#xf…