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

【NGINX入门指北】 进阶篇

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.conflocation / {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 schemeschemeschemeproxy_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.conflocation / {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.lryc.cn/news/617.html

相关文章:

  • Python中关于@修饰符、yeild关键词、next()函数的基本功能简述
  • 结合Coverity扫描Spring Boot项目进行Path Manipulation漏洞修复
  • 【FFMPEG源码分析】从ffplay源码摸清ffmpeg框架(一)
  • C++蓝桥杯 基础练习,高精度加法,输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
  • MySQL面试题:SQL语句的基本语法
  • Fluid-数据编排能力原理解析
  • 并发线程、锁、ThreadLocal
  • CMMI-结项管理
  • 网络通信协议是什么?
  • 阶段5:Java分布式与微服务实战
  • 我的创作纪念日
  • Qml学习——动态加载控件
  • 设计模式之职责链模式
  • MySQL入门篇-MySQL 8.0 延迟复制
  • FPGA时序约束与分析 --- 实例教程(1)
  • go深拷贝和浅拷贝
  • linux网络系统层面的配置、管理及操作命令汇总
  • R数据分析:孟德尔随机化中介的原理和实操
  • 【C++】 类和对象 (下)
  • asp获取毫秒时间戳的方法 asp获取13位时间戳的方案
  • Python基础篇(十五)-- Python程序接入MySQL数据库
  • 程序员不得不知道的 API 接口常识
  • 【项目精选】基于Java的银行排号系统的设计与实现
  • 前端 基于 vue-simple-uploader 实现大文件断点续传和分片上传
  • 解决报错: ERR! code 128npm ERR! An unknown git error occurred
  • 聊城高新技术企业认定7项需要注意的问题 山东同邦科技分享
  • 菊乐食品更新IPO招股书:收入依赖单一地区,规模不及认养一头牛
  • Elasticsearch安装IK分词器、配置自定义分词词库
  • Linux嵌入式开发——shell脚本
  • CV【5】:Layer normalization