一,设置默认图片
不知道大家有没有遇到过,当你的系统的某些图片不存的时候,你须要提供一张默认的图片,404.jpg?恩,做为一个友好的提示,这是必须的。用nginx实现这个功能很容易。
location ~* .*\.(jpg|jpeg|gif|bmp)$ {
if (!-f $request_filename) {#同鞋们,if后面需要一个空格哦~~~
rewrite ^ /404.jpg last;
}
}
二,设置默认后缀
这样,当你图片不存时,将会返回默认的404.jpg图片,当然用户浏览器中的URL是不会变的。假如你的系统中全是JPG格式的图片,你的程序在访问的时候,如果觉得每一个图片都要加一个.jpg后缀,是不是很麻烦,OK,nginx也能很容易的解决。
location ~* ^/photo/([0-9]+)$ {
rewrite ^/photo/([0-9]+)$ /photo/$1.jpg last;
}
三,nginx大战死代码
上面是关于nginx的很简单的应用,在开发过程中,我遇到过一个稍微复杂一点点的问题,就是我以前将我的图片存在A服务器上(A服务器到nginx上的nfs映射为/usr/imgs/11_59/),以/11/11*.jpg的形式访问,11即图片的最后两位数字,但量随着图片的增多,A服务器放不下更多的图片(图片名称是以递增方式命名的),当图片名称变人55....jpg的时候,我发现A服务器放不下更多的图片,这个时候,怎么办?
可能大家用脚指头想一想就知道,添加一台服务器B!
对了,我也是这么想的。于是啊,我建立了B服务器到nginx所在服务器的nfs映射(/usr/local/60_99),好了,到这里总算解决了图片在一个服务器存储不够的问题,可是接下问题又来了,我的程序中,访问图片的地址是写死了的,即/XX/XX[0,9]+.jpg的形式访问(XX即图片地址的前两位),天啊,我怎么知道图片到底在哪个服务器呢?
正当我们愁眉苦脸的时候,nginx又闪亮登场,大叫一声“交给我”
location ~ /photo/([1-5][0-9]) {
root /user/imgs/11_55;
}
location ~ /photo/([6-9][0-9]) {
root /user/imgs/60_99;
}
(解释一下:root 的功能就是会在之前你的访问地址/photo/... 前面加上 /user/imgs/60_99/ 即将你访问的地址指向/user/imgs/60_99/photo/*.jpg )
四,nginx设置图片防盗链接
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
valid_referers none blocked 192.168.154.128 192.168.154.1;
if ($invalid_referer)
{
rewrite ^ /403.jpg break;
}
if (!-f $request_filename) {
rewrite ^ /404.jpg last;
}
expires 30d;
}
先来一下效果:
大家记得将location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
哇~~~~,世界终于清静了。