IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用Nginx配置镜像服务器及CDN分发服务 -> 正文阅读

[系统运维]使用Nginx配置镜像服务器及CDN分发服务

????????CDN技术可以帮助应用减少带宽压力,请求响应压力,也可以实现服务器备份的功能。

????????本文介绍使用Nginx配置简单的静态文件服务器的镜像备份以及请求分发功能。

1、服务器配置

????????假设的服务器配置如下:一台面向用户的服务器 192.168.1.8:80; 存放资源的源服务器:192.168.1.10:80;外加两台备份的镜像服务器:192.168.1.11:80,192.168.1.12:80。

2、分发服务器设置

????????在面向用户的服务器 192.168.1.8:80 上修改Nginx设置,实现请求分发:

    #?分发节点列表
????upstream?mirror_mode?{
????????ip_hash;?#开启ip_hash时相同IP的请求将被分配给同一个服务器
????????server?192.168.1.11:80?weight=1?max_fails=5?fail_timeout=5s;
????????server?192.168.1.12:80?weight=1?max_fails=5?fail_timeout=5s;
        server?192.168.1.10:80?weight=1?backup;
????}

????server?{
????????listen??80;
????????server_name??localhost;
        
????????location?/?{
????????????proxy_pass_header?Server;
????????????proxy_set_header?Host?$http_host;
????????????proxy_redirect?off;
????????????proxy_set_header?X-Real-IP?$remote_addr;
????????????proxy_set_header?X-Scheme?$scheme;
????????????proxy_set_header?X-Forwarded-For?$remote_addr;???????????????
????????????proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;?????
????????????proxy_pass?http://mirror_mode;
????????}
????}

????????参数说明:

????????upstream:指令定义了一组http服务器,在接收到用户请求时,nginx 将根据配置的规则在服务器组中选择服务器进行请求响应。

????????server:可设置的参数有:

????????weight:服务器的权重,默认值为1,请求按照权重比例分配,权重越大,分配的请求数量越多。

????????max_fails:请求最大失败次数,默认为1,如果设置为0,表示禁用该设置。

????????fail_timeout:统计请求失败次数的时间段范围。 上例中 5s 内如果请求失败的次数超过5次,则对应server在接下来的5s内将不会分配请求,5s后重新统计失败次数。

????????down:标记服务器不可用

????????backup:当 upstream 组内所有的服务器都不可用时,将请求分配给标记为backup的服务器。

????????需要注意的是 代理路径:?proxy_pass?http://mirror_mode; 此处的 mirror_mode 必须与 upstream 指令后设置的名称保持一致。

3、镜像服务器设置

????????在镜像服务器上修改Nginx设置,使用proxy_store指定实现镜像备份:

    server?{
????????listen??80;
????????server_name??localhost;

????????location?/?{
????????????expires?30s;   
????????????proxy_set_header?Host?$http_host;
????????????root?/var/www/mysite;
????????????proxy_store?on;
????????????proxy_store_access?user:rw?group:rw?all:rw;
????????????proxy_temp_path?/var/www/mysite;
????????????if?(?!-e?$request_filename)?{
?????????????????proxy_pass?192.168.1.10:80;
????????????}
????????}
????}

????????参数说明:

????????expires:http响应头过期时间,供客户浏览器使用

????????proxy_store:是否在本地磁盘保存来自被代理服务器的响应数据。

????????root:指定请求查找文件的根目录。

????????proxy_store_access:设置新创建的文件和目录的访问权限

????????proxy_temp_path:指定保存被代理服务器响应数据的根目录,作为镜像服务器,proxy_temp_path 应与 root 设置相同的路径。

????????最后的if判断是表示请求的路径文件如果在本地不存在就去被代理的服务器上获取。

????????按照以上配置就能实现镜像服务器的功能,但是存在的问题是这种配置对于同样路径的文件,镜像服务器不能同步源服务器的修改,也没有过期自动清理的功能。适合针对静态文件不会发生修改的场景,像npm的镜像服务器就很适合使用这种方式。

????????针对文件版本的动态变化,可以考虑使用nginx的 proxy_cache 指令配置缓存服务器。

4、缓存服务器设置

    proxy_cache_path?/var/www/mysite?keys_zone=cache_my_site:1024m?inactive=1d?max_size=2048m;
    server?{
????????listen??80;
????????server_name??localhost;

????????location?/?{
????????????proxy_cache?cache_my_site;
????????????proxy_cache_key?$uri$is_args$args;
????????????proxy_cache_valid?any?1d;
????????????proxy_pass?http://192.168.1.10:80;
????????}
????}

????????参数说明

????????proxy_cache_path:必须位于nginx配置文件的http节点中,用于指定缓存数据的路径。path=设置缓存数据存放的根路径;keys_zone=name:size1设置存放缓存索引的缓存区域的名称和大小;inactive=1d当硬盘上的缓存数据在设定的时间内没有被访问时将被删除,下次客户端访问该数据时重新获取缓存;max_size=2048m设置硬盘中缓存数据的大小限制。

????????proxy_cache:指定内存区的名称,必须与 proxy_cache_path 中设置的 keys_zone 保持一致。

????????proxy_cache_key:缓存文件时保存的缓存键key的组成方式, $uri$is_args$args表示将请求的url和参数组合在一起再进行md5,生成索引key。

????????proxy_cache_valid:针对不同的响应状态码设置不同的过期时间 any 表示未指定的缺省的状态码。

????????缓存服务器可以通过设置 inactive 和 proxy_cache_valid 自动的删除缓存文件,但是 proxy_cache 缓存的文件是以md5作为key值保存的加密文件,不能与源服务器保持一致的文件目录结构和文件名。

????????实际项目中可根据需要选择使用proxy_store还是proxy_cache。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 16:00:29  更:2022-03-04 16:03:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:50:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码