disabled=false
group_name=group1
bind_addr=172.1.1.1
client_bind=true
port=23000
connect_timeout=30
network_timeout=60
heart_beat_interval=30
stat_report_interval=60
base_path=/data/fastdfs
max_connections=256
buff_size = 256KB
accept_threads=1
work_threads=4
disk_rw_separated = true
disk_reader_threads = 1
disk_writer_threads = 1
sync_wait_msec=50
sync_interval=0
sync_start_time=00:00
sync_end_time=23:59
write_mark_file_freq=500
store_path_count=1
store_path0=/data/fastdfs
subdir_count_per_path=256
tracker_server=172.1.1.2:22122
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
file_distribute_path_mode=0
file_distribute_rotate_count=100
fsync_after_written_bytes=0
sync_log_buff_interval=10
sync_binlog_buff_interval=10
sync_stat_file_interval=300
thread_stack_size=512KB
upload_priority=10
if_alias_prefix=
check_file_duplicate=0
file_signature_method=hash
key_namespace=FastDFS
keep_alive=0
use_access_log = false
rotate_access_log = false
access_log_rotate_time=00:00
rotate_error_log = false
error_log_rotate_time=00:00
rotate_access_log_size = 0
rotate_error_log_size = 0
log_file_keep_days = 0
file_sync_skip_invalid_record=false
use_connection_pool = false
connection_pool_max_idle_time = 3600
http.domain_name=
http.server_port=8888






disabled=false
group_name=groupuser2
bind_addr=172.1.1.1
client_bind=true
port=23001
connect_timeout=30
network_timeout=60
heart_beat_interval=30
stat_report_interval=60
base_path=/data/groupuser2
max_connections=256
buff_size = 256KB
accept_threads=1
work_threads=4
disk_rw_separated = true
disk_reader_threads = 1
disk_writer_threads = 1
sync_wait_msec=50
sync_interval=0
sync_start_time=00:00
sync_end_time=23:59
write_mark_file_freq=500
store_path_count=1
store_path0=/data/groupuser2
subdir_count_per_path=256
tracker_server=172.1.1.2:22122
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
file_distribute_path_mode=0
file_distribute_rotate_count=100
fsync_after_written_bytes=0
sync_log_buff_interval=10
sync_binlog_buff_interval=10
sync_stat_file_interval=300
thread_stack_size=512KB
upload_priority=10
if_alias_prefix=
check_file_duplicate=0
file_signature_method=hash
key_namespace=FastDFS
keep_alive=0
use_access_log = false
rotate_access_log = false
access_log_rotate_time=00:00
rotate_error_log = false
error_log_rotate_time=00:00
rotate_access_log_size = 0
rotate_error_log_size = 0
log_file_keep_days = 0
file_sync_skip_invalid_record=false
use_connection_pool = false
connection_pool_max_idle_time = 3600
http.domain_name=
http.server_port=8889


cat config
ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
cat mod_fastdfs.conf
#include http.conf
connect_timeout=2
network_timeout=30
storage_sync_file_max_delay = 86400
tracker_server=172.1.1.2:22122
load_fdfs_parameters_from_tracker=true
log_level=info
log_filename=/var/log/tengine/mod.log
url_have_group_name=true
response_mode=redirect
if_alias_prefix=
flv_support = true
flv_extension = flv
group_count = 5
[group1]
group_name=group1
storage_server_port=172.1.1.1:23000
store_path_count=1
store_path0=/data/fastdfs
base_path=/data/fastdfs
[group2]
group_name=groupuser2
storage_server_port=172.1.1.1:23001
store_path_count=1
store_path0=/data/groupuser2
base_path=/data/groupuser2
nginx
server {
  listen 8080;
  server_name 172.1.1.1;
  access_log      /var/log/tengine/test_access.log;
  error_log       /var/log/tengine/test_error.log;
  location /lua {
     default_type 'text/plain';
     content_by_lua 'ngx.say("hello,lua")';
     }
  location ~* /group1/M00/  {
      ngx_fastdfs_module;
      set $needCreateImg 0;
      if ( !-f $request_filename) {
         set $needCreateImg "${needCreateImg}1";
      }

     if ($uri ~* "/group1/M00/(\d+)/(\d+)/([A-Za-z0-9_-]+).(gif|jpg|jpeg|png).(\d+x\d+).(gif|jpg|jpeg|png)") {
         set $needCreateImg "${needCreateImg}2";
         set $conUri     "/$1/$2/$3.$4.$5.$6";
      }

      if ($needCreateImg = "012") {
         set $p_w_picpath_root "/data/fastdfs/data";
         set $file "$p_w_picpath_root$conUri";
            rewrite_by_lua '
               local index = string.find(ngx.var.conUri, "([0-9]+)x([0-9]+)");
               local originalUri = string.sub(ngx.var.conUri, 0, index-2);
               local area = string.sub(ngx.var.conUri, index);
               index = string.find(area, "([.])");
               area = string.sub(area, 0, index-1);

               function table.contains(table, element)
                 for _, value in pairs(table) do                 
                   if value == element then
                     return true
                   end
                  end
                  return false
                end

                local c = "/usr/local/graphicsmagick/bin/gm convert " .. ngx.var.p_w_picpath_root ..  originalUri  .. " -thumbnail " .. area .. " - ";
                local f = assert(io.popen(c, "r"))
                local s = assert(f:read("*a"))
                f:close()
                ngx.say(s) ';
              }
           alias /data/fastdfs/data/;
        }
}

再搞个8081就行了。


访问400的错误

http://bbs.chinaunix.net/thread-4120027-1-1.html

fastdfs单主机配置多个storage_第1张图片


java实现FastDFS实现文件上传下载实战


http://blog.csdn.net/liweizhong193516/article/details/53244134


原理http://bbs.chinaunix.net/thread-4068654-2-1.html


fastdfs单主机配置多个storage_第2张图片


经过测试,发现redirect模式有问题,header already sent,所以正确还是Proxy模式。


缩略图

"/usr/local/graphicsmagick/bin/gm convert "

or

"/usr/local/ImageMagick/bin/convert "