博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nginx配置图片服务器
阅读量:5976 次
发布时间:2019-06-20

本文共 7116 字,大约阅读时间需要 23 分钟。

这几天研究了一下nginx配置图片服务器的相关内容,个人的一些收获与大家分享一下:

Nginx是目前非常流行的web服务器,它起源于俄罗斯。它具有处理速度快,并发量大,占用资源极低等优点,尤其对于静态资源的处理更佳,有测试证明是apache的30倍。现在已经广泛的应用于多家门户网站、中大型网站中,作为反向代理、图片缓存服务器等。

本例是结合张宴的blog(http://blog.s135.com/nginx_cache/),做的变动。
主站是IIS7.5(192.168.36.70),用的是.net 3.5+sql 2005,用于处理aspx,ashx等动态网页程序,而网站的图片服务器为nginx(centos 5.6,IP:192.168.33.243).

 

nginx图片服务器配置:

 

 1.centos5.6上安装nginx.安装步骤如下:

 

 wget 

tar zxvf pcre-8.00.tar.gz
cd pcre-8.00/
./configure
make && make install
cd ../
wget 
tar zxvf ngx_cache_purge-1.0.tar.gz
wget 
tar zxvf nginx-0.8.32.tar.gz
cd nginx-0.8.32/
./configure --user=www --group=www --add-module=../ngx_cache_purge-1.0--prefix=/usr/local/webserver/nginx --with-http_stub_status_module--with-http_ssl_module
make && make install
cd ../

 注意:要建立www用户和www用户组

 

 

2. 配置nginx的配置文件

   注意nginx的图片服务器访问地址为:192.168.33.243:8080,nginx缓存服务器为:192.168.33.243,故我们需要在Nginx上配置两个web服务器,让后一个缓存前一个,iis主站的程序直接调用缓存服务器的图片,绕过了真实的图片服务器。

  配置文件如下:

 user  www www;

 worker_processes 8;
error_log  /usr/local/webserver/nginx/logs/nginx_error.log  crit;
pid        /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by thisprocess. 
worker_rlimit_nofile 65535;
events 
{
  use epoll;
  worker_connections 65535;
}
http 
{
  include       mime.types;
  default_type  application/octet-stream;
  charset  utf-8;
      
  server_names_hash_bucket_size 128;
  client_header_buffer_size 32k;
  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;
  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.1;
  gzip_comp_level 2;
  gzip_types       text/plainapplication/x-javascript text/css application/xml;
  gzip_vary on;
  #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
  proxy_temp_path   /data0/proxy_temp_dir;
  #设置Web缓存区名称为cache_one,内存缓存空间大小为200MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
  proxy_cache_path  /data0/proxy_cache_dir  levels=1:2   keys_zone=cache_one:200minactive=1d max_size=30g;
  
  #upstream backend_server {
   # server   192.168.8.43:80 weight=1max_fails=2 fail_timeout=30s;
    #server   192.168.8.44:80 weight=1max_fails=2 fail_timeout=30s;
    #server   192.168.8.45:80 weight=1max_fails=2 fail_timeout=30s;
  #}
  server //此处为缓存服务器
  {
    listen       80;
    server_name  192.168.33.243;
     
    location /
    {
        
         proxy_cache cache_one;
         #对不同的HTTP状态码设置不同的缓存时间
         proxy_cache_valid  200 304 12h;
         #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
         proxy_cache_key$host$uri$is_args$args;
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_pass ; //此处跳转到真实的图片服务器

log_format cache '***$time_local '

                    '$upstream_cache_status '

                    'Cache-Control: $upstream_http_cache_control '

                    'Expires: $upstream_http_expires '

                    '"$request" ($status) '

                    '"$http_user_agent" '; //定义日志格式(此日志格式可以显示hit miss等,显示缓存是否被击中,老版本默认可以,但是新版本,发现需要加上这个)

                  access_log  /var/log/nginx/cache.log cache; //使用这个日志格式

         expires      1d;
    }
    
    #用于清除缓存,假设一个URL为http://192.168.8.42/test.txt,通过访问http://192.168.8.42/purge/test.txt就可以清除该URL的缓存。
    location ~ /purge(/.*)
    {
     #设置只允许指定的IP或IP段才可以清除URL缓存。
     allow            127.0.0.1;
     allow            192.168.0.0/16;
     deny            all;
     proxy_cache_purge    cache_one   $host$1$is_args$args;
    }    
    #扩展名以.php、.jsp、.cgi结尾的动态应用程序不缓存。
    location ~ .*\.(php|jsp|cgi)?$
    {
         proxy_set_header Host  $host;
         proxy_set_header X-Forwarded-For  $remote_addr;
         proxy_pass http://backend_server;
    }
    access_log  off;
  }

server//真实的图片服务器

{

   Listen 8080;

   Server_name 192.168.33.243;

  Location /

  {

    root /images/;

}

access_log /***/***combined; //访问日志,一般都off掉。

}

}

 

至此,图片服务器搭建成功可以访问了

 

--------------------------------------------------------------------------

 

worker_processes 
4
;
error_log  /var/log/nginx/error.log crit;
worker_connections 
51200
;
keepalive_timeout 
120
;
gzip  on;
gzip_min_length   1k;   gzip_buffers    
4
16k;#注意此处,不是
416  
gzip_http_version
1.0
;   gzip_comp_level
2
;   gzip_types  text/plain application/x-javascript text/css text/html application/xml text/javascript; 
   
gzip_vary on;
 
server {
        
listen
80
;
        
server_name *.frady.cn *.frady.com.cn;
        
set $htdocs /web/www/ROOT/;#此处定义了htdocs
        
root $htdocs;
         
    
location ~ ^/zanStatus/ {
            
stub_status on;
            
access_log off;
         
}
    
location / {
                
index index.html;
        
}
        
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|css|js|html)$ {
                
expires 30d;
        
}
#此目录的图片不缓存
location ^~ /picture/price/{
expires -
2
;
}
        
location ~*.(jsp|
do
|action|php|asp|rar|zip|txt|html|htm|shtml)$
        
{
           
deny all;
    
}
        
location ~^/(WEB-INF)/{
           
deny all;
        
}
}
 
 
完成
status参数解释
Active connections:
145
#nginx 正处理的活动连接数
145
个。
server accepts handled requests
 
1749
1749
3198
#nginx启动到现在共处理了
1749
个连接 ,nginx启动到现在共成功创建
1749
次握手 请求丢失数=(握手-连接),可以看出,我们没丢请求;总共处理了
3198
次请求。
Reading:
0
Writing:
3
Waiting:
142
#Reading :nginx读取到客户端的Header信息数。
#Writing : nginx返回给客户端的Header信息数。
#Waiting : Nginx已经处理完正在等候下一次请求指令的驻留连接.开启keep-alive的情况下,这个值等于active–(reading+writing)。
 
//------------------------------------------------------------//
 
 
 
 
 
 
 
 

公司图片Windows服务机器准备迁移到Linux,约有公司 2.8KW 张零碎图片 1.8T 文件占有量。

Nginx 带动整个公司核新图片业务,I/0 老高,访问速度龟速,上头给俺的任务就是立马先搞定龟速问题。
花了一小天的时间搞好所有nginx 配置 速度快了几倍,配置如下:
 

复制代码代码示例:
events {
      worker_connections  65535;
      use epoll;
          }
 http {
    include  mime.types;
 
    default_type  application/octet-stream;
 
    log_format  main  "$remote_addr - $remote_user [$time_local] "$request" "
           "$status $body_bytes_sent "$http_referer" "
           ""$http_user_agent" "$http_x_forwarded_for"";
 
    #access_log  logs/access.log  main;
    access_log  off;
 
    charset utf-8;
 
    keepalive_timeout 60;
 
    sendfile off;
 
    tcp_nopush  off;
 
    client_header_buffer_size 8k;
 
    large_client_header_buffers 8 128k;
 
    client_max_body_size 300m;
 
    client_body_buffer_size 2048k;
 
    gzip off;
 
    server {
        server_name _;
 #      rewrite (.*)$ /opt/nginx/html/404.html?;
        return 404;
        error_page 404 = /opt/nginx/html/404.html;
        }
include    nginx-upload.conf;
server
{
 
 listen      80;
 server_name  file.xxx.com;
 root /usr/local/wwwweb/file.xxx.com;
 
 #access_log  /opt/nginx/logs/file.xxx.com;
 access_log  off;
 location  ~ .*.(gif|jpg|jpeg|png)$ {
 root /usr/local/wwwweb/file.xxxx.com;
 
 #if ( !-f request_name  ) {
 if ( $status = 404  ) { 
      rewrite /(.*).jpg      /$1.JPG;
      rewrite /(.*).JPG      /$1.jpg;
 }
 } 
 }
}

 

//--------------------------------------------------------

 

  Nginx如何设置Js、css等文件的过期时间

      首先打开配置文件/etc/nginx/nginx.conf,然后找到下面这句话:

      location~ .*\.(gif|jpg|png|htm|html|css|js|flv|ico|swf)(.*) {

                   expires 30d;
             }

      设置expires这个参数即可,30d表示30天,注意后面有个分号“;”。

      如果过期时间为小时,则用“h”,如“expires 1h;”表示文件缓存在1小时后过期。看看下面的范例:

      #图片缓存30天

      location ~.*\.(jpg|png|jpeg)$  
      {  
        expires 30d;  
      }
 
      #js css缓存一小时
      location ~.*\.(js|css)?$  
      {  
        expires 1h;  
      } 

      语法解释

      nginx作为web服务器,有时需要让浏览器缓存(Browser Caching) 是为了加速浏览并节约网络资源,浏览器在用户磁盘上对最近请求过的文档进行存储。

 
      nginx通过expires指令来设置浏览器的Header

      语法: expires [time|epoch|max|off]

      默认值: expires off
      作用域: http, server, location

      使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标,(起到控制页面缓存的作用)。

      可以在time值中使用正数或负数。“Expires”头标的值将通过当前系统时间加上您设定的 time 值来获得。

      epoch 指定“Expires”的值为 1 January, 1970, 00:00:01 GMT。

      max 指定“Expires”的值为 31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。

      -1 指定“Expires”的值为服务器当前时间;-1s,表示永远过期,即不缓存文件。

      如何检测网页过期设置是否生效?

      打开webkaka的工具(),输入你的网页地址,检测后,立即可以看到设置是否生效了。

检测网页缓存是否生效

检测网页缓存是否生效

      上图看到,被检测网页的js、css文件过期时间为1天。

转载于:https://www.cnblogs.com/fx2008/p/4165352.html

你可能感兴趣的文章
树与森林的存储、遍历和树与森林的转换
查看>>
mongodb的读写分离
查看>>
Android自定义属性
查看>>
介绍几个好用的android自定义控件
查看>>
阿里云服务器 Windows连接不成功 提示“你的凭证不工作” 解决方法
查看>>
NVIDIA Jetson TK1学习与开发(八):图文详解OpenGL在Jetson TK1上的安装和使用
查看>>
【性能优化】直方图
查看>>
Visual C#之核心语言
查看>>
[J2ME]Nokia播放音乐时发生MediaException的解决办法
查看>>
【转】CSS 与 HTML5 响应式图片
查看>>
代码重构(五):继承关系重构规则
查看>>
redis.conf 配置档详解
查看>>
Windows App开发之集合控件与数据绑定
查看>>
五分钟创建一个自己的NPM包
查看>>
iOS多线程编程:线程同步总结 NSCondtion
查看>>
Flutter开发环境安装
查看>>
QQ登录的那些坑(如何开发qq登陆功能)
查看>>
中大型网站技术架构演变过程
查看>>
深入剖析OkHttp系列(五) 来自官方的事件机制
查看>>
Java 9 CompletableFuture 进化小脚步
查看>>