搭建图片服务器方案

article/2025/10/2 23:03:25

一、图片服务器机制

为了提高图片服务器性能,可利用Nginx中反向代理缓存机制达到目的;本机制共需两台服务器,在图片存储服务器外另部署一台服务器作为图片代理服务器(在一台服务器上同时部署也可),当客户端请求图片信息时,首先访问图片代理服务器,代理服务器会缓存热点图片,从而提高效率。

1、架构图

2、反向代理简介

反向代理是Web服务器隐藏在代理服务器之后,实现这种机制的服务器称作反向代理服务器(Reverse Proxy Server)。此时,Web服务器成为后端服务器,反向代理服务器称为前端服务器。

3、Nginx反向代理缓存机制简介

3.1 工作原理

Nginx的proxy_cache缓存机制为当用户请求图片等静态资源时,首先在代理服务器内存索引中查找是否存在该资源的缓存,如果不存在,则访问存储服务器,查找并读取该资源,响应请求并将其加入缓存;相反如果存在则在缓存中读取并响应请求,从而减少了对存储服务器的访问,提升了性能。

3.2 缓存机制

缓存文件采用内存+硬盘方式缓存,采用md5编码hash后保存,内存中保存的为缓存的索引信息,资源的缓存文件则存在硬盘中,但由于采用了hash算法,相对与无缓存查找还是提升了性能。

相对与memcache缓存,由于memcache将缓存的文件全部缓存在内存中,速度上更优于proxy_cache,但当遇到断电、宕机时,memcache中缓存将全部丢失,可谓各有利弊。此外memcache向缓存中加入数据需要通过编码的方式主动去添加,这样需要统计访问量识别哪些是访问量高的热点图片需要缓存,哪些不需要,还需要日后的维护,而proxy_cache只需一次设置图片的路径后,通过配置文件采取合适的方案即可,无需日后的维护。

3.3 缓存清理

Proxy_cache的清理方式有两种,自动清理和手动清理:

自动清理,配置inactive参数后,如1天,则该缓存中有1天未被请求,则自动清理该资源;此外当内存区达到上限后,将用新的资源取代访问次数最少的。

手动清理,需集成第三方proxy_cache_purge,如想清理URLhttp://192.168.1.100/aaa.png 图片,请求http://192.168.1.100/purge/aaa.png即可。 

4、Nginx gzip简介

gzip是GNU zip的缩写,它是一个GNU自由软件的文件压缩程序,可以极大的加速网站,但对于图片压缩来说,几乎没有提升,最好不要使用Gzip。

二、测试

第一次访问某图片时:

***22/Oct/2013:19:29:14 -0700 MISSCache-Control: - Expires: - "GET /web/upload/slide/13706572516644398.jpgHTTP/1.1" (200) "Mozilla/5.0 (X11; U; Linux x86_64; en-US;rv:1.9.2.9) Gecko/20110412 CentOS/3.6.9-2.el6.centos Firefox/3.6.9"

 

MISS表示未被缓存。

 

第二次访问某图片时:

***22/Oct/2013:19:30:40 -0700 HITCache-Control: - Expires: - "GET /web/upload/slide/13706572516644398.jpgHTTP/1.1" (200) "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2;WOW64; Trident/6.0; MALCJS)"

 

HIT表示已被缓存。

 

共包含以下几种状态可以在缓存日志中查看:

·          MISS 未命中,请求被传送到后端

·          HIT 缓存命中

·          EXPIRED 缓存已经过期请求被传送到后端

·          UPDATING 正在更新缓存,将使用旧的应答

·          STALE 后端将得到过期的应答

·          BYPASS 缓存被绕过了

附录

附录为本次测试的配置文件:

 

#user nobody;

# nginx进程数,多少cpu多少进程

worker_processes  4;

#允许打开的连接数

worker_rlimit_nofile 10240;        

 

#error_log logs/error.log;

#error_log logs/error.log  notice;

#error_log logs/error.log  info;

 

#pid       logs/nginx.pid;

 

 

events {

         #单进程允许打开的链接数

   worker_connections  10240;

}

 

http

{

 include       mime.types;

 default_type application/octet-stream;

 

 charset  utf-8;

     

  #服务器名的hash库大小

 server_names_hash_bucket_size 128;

#服务器名的hash库大小

 client_header_buffer_size 4 8k;

  #客户端长头文件缓存大小及分配模式 4块 每块8K

 large_client_header_buffers 4 32k;

  #客户端最大数据段大小

 client_max_body_size 300m;

     

 sendfile on;

 tcp_nopush     on;

 

#连接存活时间

 keepalive_timeout 60;

 

 tcp_nodelay on;

 

 client_body_buffer_size  512k;

 proxy_connect_timeout    5;

 proxy_read_timeout       60;

 proxy_send_timeout       5;

 proxy_buffer_size        16k;

 proxy_buffers            4 64k;

 proxy_busy_buffers_size 128k;

 proxy_temp_file_write_size 128k;

 

 log_format cache '***$time_local '

                     '$upstream_cache_status '

                     'Cache-Control:$upstream_http_cache_control '

                     'Expires:$upstream_http_expires '

                     '"$request"($status) '

                    '"$http_user_agent" ';

 

  #gzipon;

  #gzip_min_length  1k;

  #gzip_buffers     4 16k;

  #gzip_http_version1.1;

  #gzip_comp_level2;

  #gzip_types       text/plain application/x-javascript text/cssapplication/xml;

  #gzip_varyon;

 

 proxy_temp_path  /home/cache/proxy_temp_path;

  #缓存路径,级别,检测时间,活动时间

 proxy_cache_path /home/cache/proxy_cache_path levels=1:2  keys_zone=cache_one:200m inactive=1d max_size=30g;


 server

  {

   listen       80;

   server_name  192.168.242.130;

    

 

   location /

    {

       

        proxy_cache cache_one;

        proxy_cache_valid  200 304 12h;

        proxy_cache_key $host$uri$is_args$args;

        proxy_set_header Host  $host;

         proxy_set_header X-Forwarded-For  $remote_addr;

        proxy_pass http://192.168.242.130:8080;


        access_log  /opt/nginx/cache.logcache;

 

        expires      1d;

    }

   

   location ~ /purge(/.*)

    {

    allow            127.0.0.1;

    #allow           192.168.0.0/255;

    #deny            all;

    proxy_cache_purge   cache_one   $host$1$is_args$args;

   }   

 

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

        proxy_set_header Host  $host;

        proxy_set_header X-Forwarded-For $remote_addr;

          proxy_pass http://192.168.242.130:80;

    }

 

   access_log  off;

  }

 

 server

  {

   listen 8080;

   server_name 192.168.242.130;

   location /

    {

     root /home/www/;

    }

   access_log off;

  }

}



http://chatgpt.dhexx.cn/article/N8xDXNyC.shtml

相关文章

Nginx配置图片服务器

Nginx配置图片服务器 背景请求示例Nginx配置图片服务器问题存在 背景 在我们日常做项目的时候,我们有时候会经常碰到图片需要放到哪?有时候会用第三方的图片存储,比如腾讯云的COS,阿里云的OOS。当然有时候我们也是需要放到Linux的…

项目:图片存储系统(图片服务器)

图片存储系统 项目描述: 实现一个 HTTP 服务器,用该服务器来存储图片,针对每个图片提供一个唯一的url, 使用 url 对图片进行访问, 提供对图片的增删改查能力,同时搭配简单的页面辅助完成图片上传/展示 利…

搭建Nginx图片服务器

一、安装Nginx 先安装Nginx,看我之前发的文章: 搭建Nginx服务器 二、安装vsftpd 再安装vsftpd组件,看我之前发的文章: Linux安装ftp组件(8步完成) 三、开始搭建Nginx图片服务器 1、效果 例如:图片通过ftp服务上传…

[项目]图片服务器

目录 1. 项目背景2.项目模块划分2.1数据存储模块2.2服务器API 3. 总结4. 扩展 1. 项目背景 现在很多网页都可以见到图片上传功能,我们上传一张本地图片后,网页就会显示我们所上传的图片,比如博客、个人信息提交页面等等。那么这背后的原理是什…

nginx图片服务器

编辑nginx.conf linux下配置文件服务器 配置完以后需要执行nginx -s reload重新加载配置 springboot项目application.properties配置访问和保存图片路径 #nginx文件服务器ip ip127.0.0.1#保存图片绝对路径 save.pic/home/pic/images/#展示图片url get.pichttp://${ip}/image…

如何快速搭建图片服务器

前言 分布式集群的项目, 正常一般的工程是把图片放在web项目的自身服务器的工程中,但在集群环境下,会出现找不到图片的情况。 代码参考: https://github.com/zyjcxc/taotao.git 比如: 解决办法: linux做磁盘的映射&#xf…

图片服务器实现

项目背景 现在很多地方仅仅支持文字发送,而不支持图片发送,,但是在很多特定的场景有需要图片发送等方式,所以我们可以构建一个HTTP服务器来完成这个功能,通过这个服务器为连接服务器的数据库上的每个图片生成一个特定…

图片服务器解决方案

最近经常有人问图片上传怎么做,有哪些方案做比较好,也看到过有关于上传图片的做法,但是都不是最好的 今天再这里简单讲一下上传图片以及图片服务器的大致理念 如果是个人项目或者企业小项目,仅仅只有十来号人使用的小项目&#…

搭建一个图片服务器

最近在学习一个电商项目,其中用到了图片上传服务,自己在学习过程中遇到了点问题,记录下来,以备以后查询 首先需要安装nginx和vsftpd,这两者的安装都有相应的手册,步骤非常详细,我就不啰嗦了&…

简单的本地图片服务器的搭建

简单的本地图片服务器的搭建 第一步:安装部署 Nginx下载 Nginx下载完解压后 第二步: 搭建图片服务器 第一步:安装部署 Nginx 下载 Nginx 保存文件路径不要包含中文! Linux和Windows不一样! 下载完成后,解…

图片服务器

图片服务器 图片服务器主要的功能是:上传图片,显示图片的功能 写博客的时候,插入的图片,本质上是往文章内插入一个url,图片其实是保存在在另一个服务器上,而我这个项目就是制作一个类似这样的服务器。 核心…

FastDFS搭建图片服务器

服务器规划 服务器名称IP地址和端口备注fastdfs-tracker*:22122跟踪服务器/调度服务器fastdfs-storage*:23000存储服务器 一、安装系统组件 yum install gcc -y 二、安装fastdfs 1、创建图片服务器存储目录 mkdir -p /data/image 2、下载FastDFS依赖包libfastcommon并安…

Zimg—轻量级图片服务器搭建利器

在一个互联网应用中,图片扮演着越来越重要的角色。有稳定的可扩展的图片存储服务器就显得尤为的重要,云厂商们提供了便利的图片存储服务,花钱就可以解决了。这里简单介绍一个开源的一个分布式图片存储服务器——zimg,来自己搭建一…

图片服务器的搭建

当高并发的时候容易发生图盘上传到一个服务器从另一个服务器需要读取照片 解决方法: 专门保存图片,不管是哪个服务器接收到图片,都把图片上传到图片服务器。 图片服务器上需要安装一个http服务器,可以使用tomcat、apache、ngin…

图片服务器搭建

图片服务器搭建 原先我们通过servlet上传一个用户的头像,需要把头像显示到网站上。就需要搭建一个图片服务器来显 示图片了。 图片服务器其实和tomcat/nginx容器的作用是一样的。目的都是要把文件从本地的磁盘上发布出去。一般常用 的图片服务器是apache服务器 &am…

三种图片服务器

2019独角兽企业重金招聘Python工程师标准>>> 到目前,工作中用到的图片服务器有下面三种: (1)使用Nginx搭建图片服务器 (2)使用阿里云图片服务器(OOS) (3&…

【java】本地客户端内嵌浏览器2 - chrome/chromium/cef/jcef

目录 ★☆★ 写在前面 ★☆★★☆★ 本系列文章 ★☆★★☆★ 开源网址 ★☆★一、发现新大陆 - CEF/JCEF0、前言1、使用 jcef.jar 搭建项目2、启动包含 jcef.jar 的程序3、simple\MainFrame 注释翻译 二、定制自己的项目之 Swing1、删除导航栏2、程序启动最大化窗口&#xff0…

C#嵌入谷歌浏览器内核

1.右击项目,选择.net框架为4.5以上: 2.右击项目,选择“管理Nuget程序包”,点击“浏览”,搜索“CefSharp”,选择“CefSharp WinForms”下载安装。 安装之后到项目的引用下查看,会出现&#xff…

WinFrom内嵌chrome浏览器

选中项目,右键,下拉列表里选择“管理Nuget程序包(N)”选项,打开如图: 按照步骤装上这个nuget包,装上以后你的工具箱就有这个了: 不用拖拉控件,直接代码绑定把&#xff…

在网页中内嵌网页

目录&#xff1a; 文章目录 前言代码展示主页代码展示作品的代码球体运动方块旋转 结果演示 前言 在制作个人网站时&#xff0c;经常遇到一个问题&#xff0c;就是如何让自己的作品动态的显示在主页上而本文就是找到了解决办法&#xff0c;利用<embed src"xx.html&qu…