用nginx圖片緩存服務器

jopen 10年前發布 | 134K 次閱讀 Web服務器 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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!