php+nginx做一个图片服务器

kehaovista
  • 89

在一个网站使用 http://img.xxx.com/117773ee38... img.xxx.com上的117773ee38db401fcec7e4ff2d6008263c1593b14c.jpg,但是它在图片服务器上的路径可能是 /data/www/11/77/3e/117773ee38db401fcec7e4ff2d6008263c1593b14c.jpg,请问nginx如何配置,php如何写这个图片服务器,问题应该表达清楚了吧。

再来一个http://img.xxx.com/aabbccdd38...,我期望放到 /data/www/aa/bb/cc/文件夹去,意思就是根据文件名,取三个两两组合作为子目录,再存放文件。

回复
阅读 3.2k
2 个回答
Mkless
  • 3.3k
✓ 已被采纳
将nginx的server设置为/data/www/,上传的时候php取图片名称前六位,并mkdir -p ./11/aa/bb
然后将图片放置到相应目录中
取图片时,nginx重写规则匹配到目标路径即可
访问就可以这样:http://img.xxx.com/11aabbee38db401fcec7e4ff2d6008263c1593b14c.jpg
实际取的图片是/data/www/11/aa/bb/11aabbee38db401fcec7e4ff2d6008263c1593b14c.jpg
nginx配置
server {
    listen 80;
    server_name  img.xxx.com;
    root   /data/www;
    
    charset utf-8;
    
    access_log  logs/host.access.log  main;
     
    location ~ .*\\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$   
    {  
        rewrite ^([a-z0-9A-z]{2})([a-z0-9A-z]{2})([a-z0-9A-z]{2})(.*) /data/www/$1/$2/$3/$1$2$3$4
    }
}

把nginx中sever 的根目录设置成/data/www/11/77/3e/ 就行了

宣传栏