02--nginx代理缓存

前言:比较常用的用法反向代理,和缓存的一些操作,用虚拟环境复刻出来,里面参数不用详细记录,用作复习,使用时直接查找即可。环境搭建过程参考前一篇文章nginx基础

1、基础环境

IP角色作用
192.168.189.143编号7:网站服务器nginx网站主页liumuquan.com
192.168.189.144编号8:图形客户端图形化安装用于模拟客户访问
192.168.189.146编号9:代理缓存服务器nginx代理缓存配置演示

nginx安装过程,域名解析配置,网站部署过程参考前文。

2、代理

2.1、代理概念

正向代理服务器和反向代理服务器是两种常见的代理服务器类型。

正向代理服务器: 正向代理服务器作为位于客户端和目标服务器之间的中间服务器,代表客户端发送请求,并将响应转发给客户端。客户端需要通过配置代理服务器来使用正向代理功能。代理服务器会隐藏客户端的真实IP地址,提供隐私保护和访问控制等功能。类比来说,正向代理就像是一个人在代表其他人进行行动,比如有一个中间人去购买商品并带回来。

反向代理服务器: 反向代理服务器作为位于目标服务器和客户端之间的中间服务器,代表目标服务器接收请求,并将响应转发给客户端。客户端无需知道真实的目标服务器,而是向反向代理发送请求。反向代理服务器可以实现负载均衡、缓存、SSL 终端等功能,提高性能和安全性。类比来说,反向代理就像是一个餐馆的前台,接收客人的请求,将请求传递给后台厨房,并将制作好的菜品送回给客人。

区别:

  1. 定位不同:正向代理服务器定位于客户端和目标服务器之间,而反向代理服务器定位于目标服务器和客户端之间。
  2. 配置方式不同:客户端需要单独配置代理服务器才能使用正向代理,而对于反向代理,客户端无需知道真实的目标服务器,直接发送请求给反向代理服务器即可。
  3. 功能不同:正向代理主要用于提供隐私保护和访问控制,隐藏客户端的真实IP地址;反向代理主要用于负载均衡、缓存和提高性能等。
  4. 部署位置不同:正向代理通常部署在客户端所在的网络中,而反向代理通常部署在目标服务器所在的网络中。

总结比喻: 可以将正向代理比作一个个人助手,代表他人完成任务,比如购买商品。反向代理则类似于一家餐馆的前台,接待客人的请求并将其传递给后台厨房,并将制作好的菜品送回给客人。

2.2、nginx代理配置

模块名称:ngx_http_proxy_module

2.2.1、网站服务器

此小节操作在编号7:网站服务器(143)上完成

配置网站配置

[root@localhost ~]# vim /etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  liumuquan.com;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page  404              /404.html;
    location = /404.html{
	root /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

配置主页显示

[root@localhost ~]# cat /usr/share/nginx/html/index.html 
<!DOCTYPE html>
<html>
<head>
<title>TEST FROMLIUMUQUAN</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>THIS IS LIUMUQUAN</h1>
<p>this is num7 server</p>
<p>ipaddress is 192.168.189.143</p>
<p>THIS is liumuquan.com</p>
</body>
</html>

2.2.2、客户端访问网站服务器

使用144访问143网站,如下图所示

2.2.3、代理服务器

此小节操作在编号9:代理缓存服务器(146)上完成

安装启动nginx

网络环境配置如下

[root@localhost nginx]# systemctl restart nginx
[root@localhost nginx]# systemctl disable firewalld.service 
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@localhost nginx]# systemctl stop firewalld.service 
[root@localhost nginx]# vim /etc/selinux/config 
[root@localhost nginx]# setenforce 0

# 此处关闭所有安全机制,用于演示,生产环境中请勿如此操作

具体nginx反向代理配置如下

[root@localhost nginx]# cat /etc/nginx/conf.d/default.conf 
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / { 

proxy_pass http://192.168.189.143:80;
#定义被代理的服务器地址和端口
proxy_redirect default;
#设置在代理响应中重写与代理服务器相关的头部信息。这里暂时无用,一般用在端口修改后

proxy_set_header Host $http_host;
#设置传递给后端服务器的 HTTP 头部信息,将客户端的 Host 头部信息传递给后端服务器
proxy_set_header   X-Real-IP $remote_addr;
#设置传递给后端服务器的 HTTP 头部信息,将客户端的真实 IP 地址传递给后端服务器
proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
#设置传递给后端服务器的 HTTP 头部信息,将客户端的原始 IP 地址传递给后端服务器,可以包含多个 IP 地址

proxy_connect_timeout 30;
#设置与后端服务器建立连接的超时时间,单位为秒
proxy_send_timeout 60;
#设置向后端服务器发送请求的超时时间,单位为秒
proxy_read_timeout 60;
#设置从后端服务器读取响应的超时时间,单位为秒

proxy_buffering on;
#启用或禁用代理缓冲
proxy_buffer_size 32k;
#设置单个缓冲区的大小设置单个缓冲区的大小
proxy_buffers 4 128k;
#设置用于保存响应的内存块数和每块的大小
proxy_busy_buffers_size 256k;
#设置当响应速度慢时,Nginx 使用的最大内存量
proxy_max_temp_file_size 256k;
#设置在代理过程中可以创建的临时文件的最大大小
        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
#把原页面注释掉
    }

2.2.4、客户端访问代理服务器

使用144访问146,显示143网站内容,如下图所示

3、缓存

Nginx 缓存是一种机制,用于在代理服务器上缓存响应内容,以便在后续请求中快速返回相同的内容,从而减轻后端服务器的负担并提高网站性能。

模块名称:ngx_http_proxy_module

3.1、缓存类型

  • 网页缓存(公网)CDN
  • 数据库缓存 memcache redis
  • 网页缓存 nginx-proxy
  • 客户端缓存 firefox缓存

3.2、nginx缓存配置

继续使用上面的环境

3.2.1、nginx总文件配置

在146上操作编辑/etc/nginx/nginx.conf 

[root@localhost nginx]# vim /etc/nginx/nginx.conf 
[root@localhost nginx]# cat /etc/nginx/nginx.conf 

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {

proxy_cache_path /app/liumuquan/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

配置部分为

proxy_cache_path /app/liumuquan/cache levels=1:2 keys_zone=proxy_cache:10m max_size=10g inactive=60m use_temp_path=off;

参数详解

  1. proxy_cache_path:指令用于定义代理缓存路径,后面紧跟着路径名和选项。

  2. /app/liumuquan/cache:这里指定了代理缓存的路径,即缓存数据将被存储在 /app/liumuquan/cache 目录下。这个路径可以根据实际需求进行修改。

  3. levels=1:2:这个选项指定了缓存目录结构的层次。在这里,表示将缓存数据分散存储在两级目录结构中,这有助于提高文件查找效率。

  4. keys_zone=proxy_cache:10m:通过 keys_zone 选项指定了一个内存区域用来存储缓存键和元数据。proxy_cache 是内存区域的名称,10m 表示分配给这个内存区域的大小为 10MB。(记录url的)

  5. max_size=10g:这个选项指定了缓存的最大大小为 10GB。一旦缓存大小达到设定的最大值,Nginx 将根据缓存策略清理缓存项。(记录网页内容的)

  6. inactive=60m:表示缓存项在指定时间内没有被访问时会被标记为“不活跃”,默认为 10 分钟。在本例中,设置为 60 分钟,意味着缓存项在 60 分钟内没有被访问将被认为是不活跃的,会被从内存中删除。

  7. use_temp_path=off:这个选项表示禁用临时路径。默认情况下,Nginx 会使用一个临时路径来存储正在传输的响应数据,然后再将其移动到缓存路径。通过设置为 off,可以直接将响应数据存储在缓存路径中,提高性能。(建议不要开,硬盘存储很慢)

3.3.2、默认网页文件配置

[root@localhost nginx]# vim /etc/nginx/conf.d/default.conf  
[root@localhost nginx]# cat /etc/nginx/conf.d/default.conf  
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {

proxy_pass http://192.168.189.143: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 30;
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; #状态码为 200 和 304 的请求,缓存的有效期为 12 小时
proxy_cache_valid any 10m;  #除了 200 和 304,缓存的有效期为 10 分钟

proxy_cache_key $host$uri$is_args$args;
#请求的缓存的关键字定义方式为 主机 请求地址 传递的参数 参数的变量

add_header  Nginx-Cache "$upstream_cache_status";  
#追加头部,用来返回到浏览器的cache属性是否缓存告知信息来源

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#如果出现连接错误、超时、无效头部或者特定的 HTTP 状态码(如 500、502、503、504),Nginx 将会尝试向下一个后端服务器发起请求,而不是中断连接


        #root   /usr/share/nginx/html;
        #index  index.html index.htm;
    }

3.3.3、建立缓存文件夹

[root@localhost nginx]# mkdir -p /app/liumuquan/cache
[root@localhost nginx]# systemctl restart nginx


配置完成后重启报错可以查看日志或使用nginx -t 排错

3.3.4、客户端访问缓存服务器

首先在网页主目录建立一个全新的文档,保证不可能出现缓存,此操作在编号7:网站服务器(143)上完成

[root@localhost ~]# cp 1.jpg /usr/share/nginx/html/
[root@localhost ~]# ls /usr/share/nginx/html/
1.jpg  404.html  404.jpg  50x.html  index.html

使用客户端144访问缓存服务器,查看nginx-cache属性

第一次访问如下图所示

第二次访问如下图所示

3.3、缓存清理

清理 Nginx 缓存通常是通过删除缓存文件或者利用 Nginx 提供的相关指令来实现的。以下是几种常见的清理 Nginx 缓存的方法:

  1. 手动删除缓存文件

    • 手动删除 Nginx 缓存目录中的文件是一种简单直接的方法。你可以通过文件管理器或者命令行操作来删除指定目录下的缓存文件。缓存目录的位置通常在 Nginx 配置文件中定义的 proxy_cache_path 指令中。
    • 例如,如果缓存路径是 /app/liumuquan/cache,你可以通过执行命令 rm -rf /app/liumuquan/cache/* 来删除该目录下的所有缓存文件。
  2. 使用 Nginx 提供的 proxy_cache_purge 模块

    • Nginx 的 proxy_cache_purge 模块可以用于通过 HTTP 请求方式清理缓存。要使用该模块,首先需要在 Nginx 配置中启用该模块,并配置允许的 IP 地址。
    • 然后,在需要清理缓存的地方,你可以发送特定的 HTTP 请求来触发 Nginx 清理缓存。例如,可以使用 curl 命令发送一个 PURGE 请求,指定需要清理缓存的 URI。
  3. 定期清理策略

    • 可以设置定期任务(例如 cron 任务),周期性地清理 Nginx 缓存。这可以通过在系统中设置一个定时任务,定期执行清理缓存的命令来实现。
    • 例如,可以创建一个 cron 任务,在每天的凌晨执行清理缓存的命令,以确保缓存文件保持在合理的大小。

无论采用哪种方法,都需要谨慎操作,以免误删重要文件或者造成不必要的性能问题。最好在生产环境中进行缓存清理操作前进行测试,以确保其不会对系统造成不良影响。

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker是一种容器化技术,用于隔离应用程序和它们的依赖,并以轻量级和可移植的方式进行分发和部署。而Docker Compose和Dockerfile是Docker生态系统中常用的工具,用于管理和构建多个容器化应用程序。 Docker Compose是一个命令行工具,通过一个简单的文本文件(通常是YAML格式)来定义、配置和运行多个Docker容器。它提供了一种非常简便的方式来描述和管理各个容器之间的关联性,同时还能够一次性启动、停止和删除整个应用程序的所有容器。通过Docker Compose,我们可以轻松地创建和管理包含多个服务的复杂应用程序,例如前端应用程序和后端数据库。 Dockerfile是一个用于定义Docker镜像的文本文件,其中包含了构建镜像所需的指令和配置。通过编写Dockerfile,我们可以描述应用程序的运行环境、依赖关系和启动命令等信息。Docker通过读取Dockerfile并按照其中的指令逐步构建镜像,最终生成一个可执行的容器化应用程序。对于一个基于Nginx的Web应用程序,我们可以使用Dockerfile来定义Nginx的配置和静态资源,然后通过构建镜像来打包应用程序。 综上所述,docker-compose、Dockerfile和Nginx可以结合使用,实现多个容器之间的协同工作和复杂应用程序的构建。我们可以使用Docker Compose来管理包含Nginx容器的应用程序,通过Dockerfile来定义Nginx镜像的构建过程,最终实现一个可部署的Nginx容器化应用程序。这种方式能够提高应用程序的可移植性、可复用性和易于管理性,为开发人员和运维人员带来许多便利。 ### 回答2: docker-compose是一个可以管理多个容器的工具,它使用一个YAML文件来定义容器的配置信息。dockerfile是用来构建镜像的脚本文件,它包含了一系列的命令来描述容器的构建过程。nginx是一个开源的高性能的Web服务器和反向代理服务器。 使用docker-compose可以很方便地定义和管理多个容器之间的关系和依赖。可以在docker-compose.yaml文件中定义多个服务,每个服务对应一个容器,而这些容器可以通过互联网络进行通信。例如,可以定义一个nginx服务,同时还可以定义一个后端应用程序的服务,并且将两个服务连接在一起。使用docker-compose up命令可以启动所有定义的服务,并且可以使用docker-compose logs命令来查看日志信息。 dockerfile是一个用来描述构建镜像过程的文件,它包含了一系列的命令来指定容器中的操作。在dockerfile中可以使用FROM命令指定基础镜像,然后使用RUN命令来执行一些操作,比如安装软件包、配置环境等。对于nginx这个容器,可以使用dockerfile来构建自定义的镜像,并且可以在其中配置nginx的相关设置,例如端口、路由规则等。 通过使用docker-compose和dockerfile,可以很轻松地将nginx部署到容器中,并且可以定义nginx和其他服务之间的联系和依赖关系。这样可以更加方便地进行应用程序的部署和管理,同时也可以通过容器的隔离性和易于移植性来提高应用程序的安全性和可靠性。 ### 回答3: Docker Compose和Dockerfile是两个与Docker相关的重要概念,而Nginx则是一款常用的高性能Web服务器和反向代理服务器软件。 Docker Compose是一个用于定义和运行多个Docker容器的工具。它通过一个单独的YAML配置文件,可以定义容器之间的关系和依赖,并且可以一键式地启动、停止和管理这些容器。使用Docker Compose,我们可以方便地把多个服务组合在一起,比如前端应用、后端应用和数据库等。 Dockerfile是一个用于构建Docker镜像的文本文件。它包含一系列的指令,用于告诉Docker引擎如何构建镜像。通过Dockerfile,我们可以自定义镜像的内容和配置,包括基础镜像选择、软件安装、文件复制、环境变量设置等。Dockerfile的编写可以帮助我们实现镜像的自动化构建和版本管理。 Nginx是一款轻量级的高性能Web服务器和反向代理服务器软件。它具有占用资源少、处理并发请求能力强等特点,被广泛用于构建高性能的Web应用架构。通过使用Nginx,我们可以实现负载均衡、反向代理、静态文件缓存、SSL加密等功能。 结合这三个概念,我们可以运用Docker Compose来定义和管理多个容器,比如前端应用容器和Nginx容器。通过Dockerfile,我们可以定义Nginx容器的自定义镜像,包括选择基础镜像、安装Nginx和相关依赖、设置Nginx配置文件等。然后,通过Docker Compose一键式地启动这些容器,实现前端应用和Nginx服务器的整合。 总之,Docker Compose、Dockerfile和Nginx是三个在Docker应用开发和部署中非常重要的概念和工具。它们可以帮助我们方便地管理和构建容器,实现应用的快速部署和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值