• 用nginx图片缓存服务器


    图片的存储硬件

    把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很; 如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能力。是 7200 转的还是 15000 转的,实际表现差别就很大。是选择 ReiserFS 还是 Ext3 ,怎么也要测试一下吧? 创建文件系统的时候 Inode 问题也要加以考虑,选择合适大小的 inode size ,在空间和速度上做取舍,同时防患于未然,注意单个文件系统下文件个数别达到极限。

    图片存储的技巧

    图片服务器当前用年份来划分,每年增加两台服务器,亦可是加两块硬盘;因为旧数据2006和2007年的数据基本上是没有变化的,图片不存在修改,如果细心定制,那么旧图片服务器的硬盘99%塞满是可以的,旧数据的容量基本上不会大幅增长,小小预留1-2G空间就可以了.

    单独的图片服务器域名

    比如yahoo.com 图片服务器用了 yimg.com 的域名,这样可以减少上行的头信息,应用服务器也不用检查权限.

    单独多个图片服务器

    无论从管理上,还是从性能上看,只要有可能,尽量部署独立的图片服务器。在 Web 服务器上就可以有针对性的进行配置优化。比如在选择web服务器时,只考虑处理图片的效率.

    图片共享

    如果不想在几台机器间同步所有图片,只用 NFS 模式共享一下即可。注意软、硬连接可能带来的问题,以及 NFS 特定的传输速度。

    采用操作系统层分布式文件系统本身的同步功能

    采用应用层分布式文件系统同步方案:FastDFSMogileFSHadoop HDFS

    采用应用层第三方软件同步方案:csync2+inotify、rsyncunisonDRBDtsync

    http服务器的选择

    采用轻量级的Lighttpd、Nginx,不采用apache,apache最消耗内存.

    Cache及反向代理

    Squid

    Lighttpd+mod_mem_cache

    Nginx+ngx_cache_purge

    数据压缩

    HTTP HEADER的Accept-Encoding

    客户端缓存

    HTTP HEADER的Expires、Cache-Control、Etag、Last-Modified参数设置

    应用层优化

    图片按需生成、图片预先生成、根据应用场景降低图片分辨率

    图片处理工具的选择

    可能大多数网站都是选择 ImageMagick 做为基础库,如果图片处理量巨大,性能问题又怎能不考虑?

    防盗链

    图片相当占用资源,一定要做好防盗链

     Nginx图片缓存服务器配置

    Nginx缓存服务器配置所需软件包如下:

    nginx-0.8

    ngx_cache_purge-1.0

    pcre-8.20

    为了方便,直接使用lnmp环境。

    1,  安装lnmp环境

           wget -c http://soft.vpser.net/lnmp/lnmp1.0-full.tar.gz && tar zxvf lnmp1.0-full.tar.gz && cd lnmp1.0-full && ./centos.sh

    2,  重新编译nginx,加入nginx缓存模块

    tar zxvf ngx_cache_purge-1.0.tar.gz

          将 ngx_cache_purge解压到nginx同一目录下。

    cd nginx-0.8.32/

    ./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0 --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6

    make && make install

    重启nginx服务的时候可能会出现如下错误:
    [root@localhost  sbin]# ./nginx 
    ./nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

    处理如下:
    x86 [root@localhost  sbin]# ln -s /usr/local/lib/libpcre.so.1 /lib
    x64 [root@localhost  sbin]# ln -s /usr/local/lib/libpcre.so.1 /lib64

    3,  缓存服务器配置

    图片目录设置:

    假定服务器主目录为nginx的默认目录:/home/wwwroot/www.images.com/

    图片存放目录为:/home/wwwroot/www.images.com/images

    图片缓存目录为:/home/wwwroot/www.images.com/images/images_cache

    图片临时目录为:/home/wwwroot/www.images.com/images /images_temp

    Nginx配置文件修改

    Nginx.conf

    user  www www;

    worker_processes 2;

    error_log  /home/wwwlogs/nginx_error.log  crit;

    pid        /usr/local/nginx/logs/nginx.pid;

    #Specifies the value for maximum file descriptors that can be opened by this process.

    worker_rlimit_nofile 51200;

    events

           {

                  use epoll;

                  worker_connections 51200;

           }

    http

           {

                  include       mime.types;

                  default_type  application/octet-stream;

                  server_names_hash_bucket_size 128;

                  client_header_buffer_size 32k;

                  large_client_header_buffers 4 32k;

                  client_max_body_size 50m;

                  sendfile on;

                  tcp_nopush     on;

                  keepalive_timeout 60;

                  tcp_nodelay on;

                  fastcgi_connect_timeout 300;

                  fastcgi_send_timeout 300;

                  fastcgi_read_timeout 300;

                  fastcgi_buffer_size 64k;

                  fastcgi_buffers 4 64k;

                  fastcgi_busy_buffers_size 128k;

                  fastcgi_temp_file_write_size 256k;

                  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;

                  proxy_temp_path /home/wwwroot/www.images.com/images/images_temp;

                  proxy_cache_path /home/wwwroot/www.images.com/images/images_cache levels=1:2 keys_zone=content:20m inactive=1d max_size=100m;       

                  gzip on;

                  gzip_min_length  1k;

                  gzip_buffers     4 16k;

                  gzip_http_version 1.0;

                  gzip_comp_level 2;

                  gzip_types       text/plain application/x-javascript text/css application/xml;

                  gzip_vary on;

                  gzip_proxied        expired no-cache no-store private auth;

                  gzip_disable        "MSIE [1-6].";

                  #limit_zone  crawler  $binary_remote_addr  10m;

                  server_tokens off;

                  #log format

                  log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '

                 '$status $body_bytes_sent "$http_referer" '

                 '"$http_user_agent" $http_x_forwarded_for';

    server

           {

                  listen       80;

                  server_name www.lnmp.org;

                  index index.html index.htm index.php;

                  root  /home/wwwroot/default;

                  location ~ .*.(php|php5)?$

                         {

                                try_files $uri =404;

                                fastcgi_pass  unix:/tmp/php-cgi.sock;

                                fastcgi_index index.php;

                                include fcgi.conf;

                         }

                  location /status {

                         stub_status on;

                         access_log   off;

                  }

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

                        {

                                expires      30d;

                         }

                  location ~ .*.(js|css)?$

                         {

                                expires      12h;

                         }

                  access_log  /home/wwwlogs/access.log  access;

           }

    include vhost/*.conf;

    }

    www.images.com.conf配置如下:

    server

    {

            listen       80;

            server_name www.images.com;

    #             index index.html index.htm index.php default.html default.htm default.php;

    #             root  /home/wwwroot/www.images.com;

            access_log /home/wwwlogs/80pic.log;

            location ~ /purge(/.*){

                          allow 192.168.206.0/24;

                          deny       all;

                          proxy_cache_purge content $host$1$is_args$args;

                   }

            location ~ .*.(php|php5)?$

                   {

                          try_files $uri =404;

                          fastcgi_pass  unix:/tmp/php-cgi.sock;

                          fastcgi_index index.php;

                          include fcgi.conf;

                   }

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

                   {

                          expires      30d;

                          proxy_cache content;

                          proxy_cache_valid 200 304 301 302 10d;

                          proxy_cache_valid any 1d;

                          proxy_set_header Host $host;

                          proxy_set_header X-Forwarded-For $remote_addr;

                          proxy_cache_key $host$uri$is_args$args;

                          proxy_pass http://www.images.com:8080;

                   }

            location ~ .*.(js|css)?$

                   {

                          expires      12h;

                   }

            access_log on;

    }

    server

    {

            listen 8080;

            server_name www.images.com;

            root /home/wwwroot/www.images.com/images/;

           

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

                            {

                                    expires      30d;

                                    access_log  /home/wwwlogs/8080pic.log;

    }

            access_log on;

    }

    修改完成之后,可以在nginx/sbin目录下执行./nginx -t命令来检查配置文件是否正确,当现实如下信息时即表示配置成功。

    配置成功显示信息:

    the configuration file /usr/local/nginx-0.8.32/conf/nginx.conf syntax is ok 
    configuration file /usr/local/nginx-0.8.32/conf/nginx.conf test is successful

  • 相关阅读:
    Git:本地文件到远程仓库
    logstash.conf 配置:input kafka,filter,output elasticsearch/mysql
    PowerDesigner根据Excel设计数据表结构 Excel表结构导入PowerDesigner
    VBScript PowerDesigner使用手册
    PowerDesigner导出数据表结构到Excel 一个表一个Sheet 带链接目录
    PowerDesigner导出数据表结构到Excel 所有表结构在同一个Sheet中
    Windows下如何用virtualenv创建虚拟环境
    解决ValueError: day is out of range for month的问题
    正则表达式
    移动端库和框架
  • 原文地址:https://www.cnblogs.com/fx2008/p/4111044.html
Copyright © 2020-2023  润新知