Nginx常见的几种回源方式实现

 更新时间:2024年02月22日 10:44:23   作者:运维笑谈  
本文主要介绍了Nginx常见的几种回源方式实现,通过Nginx回源文件至本地机房,域名解析采用内外网单独解析,外地办公同事可以通过CDN进行更新,感兴趣的可以了解一下

简介

为了解决办公网软件版本更新,导致办公网公网带宽紧张。通过Nginx回源文件至本地机房,域名解析采用内外网单独解析,外地办公同事可以通过CDN进行更新,公司办公网同事通过内网DNS解析获取本地资源更新。

如果不是办公网公网带宽紧张,又没有类似SCCM管理工具,是很少用到nginx来解决办公网软件更新的问题,有点偏冷门。作为运维向来是遇到问题横刀策马,果断解决各种疑难杂症。

nginx常见的回源方式nginx proxy_store或proxy_cache模块

nginx中的proxy_store模块和proxy_cache模块是两种不同的回源方式,它们各自有优缺点,适用于不同的场景。以下是对这两种方式的简要说明:

proxy_store模块:

优点:

  • 灵活性:proxy_store模块允许你根据需要保存特定的响应内容,你可以选择性地将某些响应存储到指定的路径。
  • 定制性:可以按照自己的规则和需求来配置存储的位置和文件名,从而实现更高度的定制。

缺点:

  • 不适合大规模缓存:proxy_store主要用于在本地磁盘上存储响应内容,不适合大规模缓存,因为它可能导致本地磁盘空间迅速耗尽。
  • 性能:当需要频繁地读取和写入磁盘时,可能对性能产生影响。

proxy_cache模块:

优点:

性能:proxy_cache通过使用内存缓存,可以显著提高性能,因为内存的读写速度远远快于磁盘。

自动过期:支持设置缓存的过期时间,避免缓存内容过时。

缓存共享:如果有多个Nginx服务器,proxy_cache模块还支持缓存的共享,可以在多个服务器之间共享缓存。

缺点:

占用内存:由于缓存在内存中,可能导致占用较大的内存空间,尤其在大规模缓存的情况下。

配置复杂性:对于一些特定的配置,可能需要更多的配置工作,相对于proxy_store而言,可能配置较为复杂。

选择建议:

小规模场景:如果你的应用是小规模的,并且对性能要求不是非常高,可以考虑使用proxy_store模块,因为它相对简单,且灵活性较高。

大规模场景:如果你的应用需要高性能和大规模缓存,proxy_cache模块是更好的选择,因为它在内存中管理缓存,提高了读取速度,并且支持更多的高级缓存控制选项。

最终选择取决于你的具体需求和应用场景。

proxy_store方式实现回源

以下是nginx回源配置

server {
        listen       80;
        server_name  内网访问域名;
        location / {
            expires -1;
            proxy_set_header Accept-Encoding '';
            root /data/www;
            proxy_store on;
            proxy_store_access user:rw group:rw all:rw;
            proxy_temp_path /data/tmp;
            if ( !-e $request_filename)  {
                 proxy_pass 云对象存储地址;
            }
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        location /ngx_stat {
            stub_status on;
            access_log off;
        }
}

为什么使用对象存储地址而不是CDN地址,是由于上传至对象存储的文件还不能及时同步到各个CDN节点,导致CDN上有很多请求报错日志

proxy_cache方式实现回源

以下是nginx回源配置,重点关注proxy_cache配置

vim nginx.conf
#定义nginx运行的用户和用户组
user  app;
#启动进程,通常设置成和CPU的数量相等
worker_processes  auto;
#改指令是当义工nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)
#与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致
worker_rlimit_nofile 65535;
events {
    #单个后台worker process进程的最大并发连接数(最大连接数=连接数*进程数)
    worker_connections  16383;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #访问日志格式,其中X-B3-TraceId参数是链路跟踪参数
    log_format json '{"@timestamp":"$time_iso8601",'
                 '"host":"$server_addr",'
                 '"clientip":"$remote_addr",'
                 '"size":$body_bytes_sent,'
                 '"responsetime":$request_time,'
                 '"upstreamtime":"$upstream_response_time",'
                 '"upstreamhost":"$upstream_addr",'
                 '"http_host":"$host",'
                 '"url":"$uri",'
                 '"xff":"$http_x_forwarded_for",'
                 '"referer":"$http_referer",'
                 '"agent":"$http_user_agent",'
                 '"X-B3-TraceId":"$http_X_B3_TraceId",'
                 '"Content-Length":"$http_Content_Length",'
                 '"appkey":"$http_appkey",'
                 '"method":"$http_method",'
                 '"status":"$status",'
                 '"ups_status":$upstream_status}';
    #全局访问日志,采用json日志格式
    access_log  /data/logs/nginx/access.log  json;
    #全局错误日志
    #错误日志定义等级,默认error级别,[ debug | info | notice | warn | error | crit ]
    error_log   /data/logs/nginx/error.log;
    #sendfile指令制定nginx是否调用sendfile函数(zero copy方式)来输出文件
    #对于普通应用必须设为on
    #如果用来进行下载等应用磁盘I/O重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度
    #降低系统的uptime
    sendfile        on;
    #防止网络阻塞
    tcp_nopush     on;
    #提高数据的实时响应性
    tcp_nodelay    on;
    #隐藏nginx版本号
    server_tokens off;
    #keepalive超时时间,客户端到服务器端的连接持续有效时间,当出现对服务器的后端请求时,
    #keepalive-timeout功能可避免建立或重新建立连接
    keepalive_timeout  65;
    #定义读取客户端请求标头的超时。如果客户端在此时间内未传输整个标头,
    #则请求将以408(请求超时)错误终止
    client_header_timeout 15;
    #定义读取客户端请求正文的超时。如果客户端在此时间内未传输任何内容,
    #则请求会因408(请求超时)错误终止
    client_body_timeout 15;
    #后端服务器数据回传时间(代理发送超时)
    send_timeout 25;
    client_header_buffer_size 4096K;
    #允许客户端请求的最大单文件字节数
    client_max_body_size 10m;
    proxy_cache_path  /data/nginx/proxy_cache/cache levels=1:2 keys_zone=downloadcache:600m max_size=400g inactive=48h use_temp_path=on;
    proxy_temp_path    /data/nginx/proxy_cache/temp;  
    proxy_cache_key    $host$request_uri;
    #开启gzip压缩
    #gzip  on;
    #gzip_min_length 1k;
    #gzip_buffers 4 16k;
    #压缩级别大小,最大为9,值越小,压缩后比例越小,CPU处理更快,值越大,消耗CPU比较高
    #gzip_comp_level 2;
    #gzip_types text/plain application/javascript text/css application/xml text/javascript application/json;
    #gzip_vary off;
 
include /usr/local/nginx/conf/vhost/*.conf;
}
 
#虚拟主机配置文件
vim default.conf
server {
        listen       443 ssl;
        server_name  域名;
        ssl_certificate /usr/local/nginx/conf/ssl/域名.crt;
        ssl_certificate_key /usr/local/nginx/conf/ssl/域名.key;
        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP $http_x_forward_for;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header Host $host;
            proxy_cache          downloadcache;
            proxy_cache_valid      200 600s;
            proxy_cache_valid      304 600s;
            proxy_cache_use_stale    invalid_header http_403 http_404 http_500 http_502;
            proxy_cache_lock      on;
            proxy_cache_lock_timeout  5s;
            proxy_pass https://域名;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        location /ngx_stat {
            stub_status on;
            access_log off;
        }
}

到此这篇关于Nginx常见的几种回源方式实现的文章就介绍到这了,更多相关Nginx 回源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Nginx进行URL转发的配置案例

    使用Nginx进行URL转发的配置案例

    Nginx是一个高性能的Web服务器和反向代理服务器,它还可以用于URL转发,在本教学文章中,我们将从安装Nginx开始,逐步介绍配置步骤,并展示一个URL转发的案例,感兴趣的朋友可以参考下
    2023-09-09
  • 详解如何设置Nginx实现内外网端口映射

    详解如何设置Nginx实现内外网端口映射

    在 Nginx 中实现内外网端口映射是一种常见的做法,本文详细介绍如何设置 Nginx 实现内外网端口映射,有需要的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • 详解使用ChatGPT解决Nginx反向代理的问题

    详解使用ChatGPT解决Nginx反向代理的问题

    这篇文章主要为大家介绍了使用ChatGPT解决Nginx反向代理的问题详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 利用Nginx处理Vue开发环境的跨域的方法

    利用Nginx处理Vue开发环境的跨域的方法

    这篇文章主要介绍了利用Nginx处理Vue开发环境的跨域的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-06-06
  • Nginx转发丢失cookie表现形式及解决方案

    Nginx转发丢失cookie表现形式及解决方案

    本文主要介绍了Nginx转发丢失cookie表现形式及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 关于nginx+php5.3.8+eclipse3.7工作空间的配置方法

    关于nginx+php5.3.8+eclipse3.7工作空间的配置方法

    以前用eclipse3.6时设置php服务器时完全可以在base url栏填写自己工作空间的目录,然后修改nginx.conf加一个alias就行了
    2011-11-11
  • nginx下配置thinkphp文件的方法

    nginx下配置thinkphp文件的方法

    这篇文章主要介绍了nginx下配置thinkphp文件的方法,需要的朋友可以参考下
    2017-01-01
  • Nginx配置-日志格式配置方式

    Nginx配置-日志格式配置方式

    这篇文章主要介绍了Nginx配置-日志格式配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Centos系统中如何在指定位置下安装Nginx

    Centos系统中如何在指定位置下安装Nginx

    这篇文章主要介绍了Centos系统中如何在指定位置下安装Nginx,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Nginx配置中if判断的使用

    Nginx配置中if判断的使用

    在Nginx配置中,有时rewrite规则无法满足复杂逻辑判断需求,这时需要使用if语法,if可以根据文件是否存在、路径特定条件等进行判断,本文就来介绍一下if判断的使用
    2024-10-10

最新评论