用nginx圖片緩存服務器javascript
圖片的存儲硬件php
把圖片存儲到什麼介質上? 若是有足夠的資金購買專用的圖片服務器硬件或者 NAS 設備,那麼簡單的很; 若是上述條件不具有,只想在普通的硬盤上存儲,首先仍是要考慮一下物理硬盤的實際處理能力。是 7200 轉的仍是 15000 轉的,實際表現差異就很大。是選擇 ReiserFS 仍是 Ext3 ,怎麼也要測試一下吧? 建立文件系統的時候 Inode 問題也要加以考慮,選擇合適大小的 inode size ,在空間和速度上作取捨,同時防患於未然,注意單個文件系統下文件個數別達到極限。css
圖片存儲的技巧html
圖片服務器當前用年份來劃分,每一年增長兩臺服務器,亦但是加兩塊硬盤;由於舊數據2006和2007年的數據基本上是沒有變化的,圖片不存在修改,若是細心定製,那麼舊圖片服務器的硬盤99%塞盡是能夠的,舊數據的容量基本上不會大幅增加,小小預留1-2G空間就能夠了.java
單獨的圖片服務器域名node
好比yahoo.com 圖片服務器用了 yimg.com 的域名,這樣能夠減小上行的頭信息,應用服務器也不用檢查權限.nginx
單獨多個圖片服務器web
不管從管理上,仍是從性能上看,只要有可能,儘可能部署獨立的圖片服務器。在 Web 服務器上就能夠有針對性的進行配置優化。好比在選擇web服務器時,只考慮處理圖片的效率.apache
圖片共享centos
若是不想在幾臺機器間同步全部圖片,只用 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