图片的存储硬件 把图片存储到什么介质上? 如果有足够的资金购买专用的图片服务器硬件或者 NAS 设备,那么简单的很; 如果上述条件不具备,只想在普通的硬盘上存储,首先还是要考虑一下物理硬盘的实际处理能力。是 7200 转的还是 15000 转的,实际表现差别就很大。是选择 ReiserFS 还是 Ext3 ,怎么也要测试一下吧? 创建文件系统的时候 Inode 问题也要加以考虑,选择合适大小的 inode size ,在空间和速度上做取舍,同时防患于未然,注意单个文件系统下文件个数别达到极限。 图片存储的技巧 图片服务器当前用年份来划分,每年增加两台服务器,亦可是加两块硬盘;因为旧数据2006和2007年的数据基本上是没有变化的,图片不存在修改,如果细心定制,那么旧图片服务器的硬盘99%塞满是可以的,旧数据的容量基本上不会大幅增长,小小预留1-2G空间就可以了. 单独的图片服务器域名 比如yahoo.com 图片服务器用了 yimg.com 的域名,这样可以减少上行的头信息,应用服务器也不用检查权限. 单独多个图片服务器 无论从管理上,还是从性能上看,只要有可能,尽量部署独立的图片服务器。在 Web 服务器上就可以有针对性的进行配置优化。比如在选择web服务器时,只考虑处理图片的效率. 图片共享 如果不想在几台机器间同步所有图片,只用 NFS 模式共享一下即可。注意软、硬连接可能带来的问题,以及 NFS 特定的传输速度。 采用操作系统层分布式文件系统本身的同步功能 采用应用层分布式文件系统同步方案:FastDFS、MogileFS、Hadoop HDFS 采用应用层第三方软件同步方案:csync2+inotify、rsync、unison、DRBD、tsync 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 (责任编辑:IT) |