提醒:本文最后更新于 2828 天前,文中所描述的信息可能已发生改变,请仔细核实。
应瓜瓜和Mr.小可的要求,详细(废话多一点)的说一下怎么解决相册请求的图片地址必须为本地,将其改为远程的办法。。。
改PHP什么的就不用我废话了,大家不用继续看下去了。。。本文不讲这个。
讲的是文章《将相册请求转接到又拍云,并用ImageMagick压缩》中有关如何将相册请求的本地地址,请求到又拍云。
我的相册是Imagevue,第一次看见他,是在SAM老哥那看到的。具体文件呢,也是SAM老哥慷慨提供(之前下的不知为毛不能用)。
这个相册不错,但是呢,只能请求本地文件夹,虽然偶带宽什么都是够多,但是也不想过多的图片在我的服务器上,而且又搞了又拍云(你妹的,又拍云就是为相册买的,有木有,不能用,搞毛啊),不能读取远程又拍云图片真是太坑爹了。
在上面那个传送门文章,我说了使用了nginx直接重定向向到又拍云,会使得Imagevue相册无法打开。悲剧。于是偶采用了另类办法。
Imagevue相册请求的图片地址是我的本地目录的/content/目录,里面还有小目录,细分是什么名字的相册。于是我利用nginx将所有请求到该目录的地址,一律转发到又拍云,为了不使得非图片文件转发到远程读取,我限定了,只有jpg|JPG才能读取,因为我里面只有jpg的图片,为毛有大小写呢?因为linux是区分大小写。
具体的nginx.conf是:
listen 11314;
server_name default;
index index.php;
root /data/album;
location ~ /content/.*\.(JPG|jpg)$ {
expires 30d;
rewrite ^/content/(.*)$ /content/$1 break;
proxy_pass http://kn007.b0.upaiyun.com;
}
location ~ .*\.(php|php5)?$
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}
access_log off;
}
当然啦,要是图片有显示必须确保http://kn007.b0.upaiyun.com/content/是存在并且按照规定放置图片的。
大概请求示意图:
这样就ok了。。。据说ngg请求本地目录是/wp-content/gallery/,那么,同上,可得:
listen 11314;
server_name default;
index index.php;
root /data/album;
location ~ /wp-content/gallery/.*\.(JPG|jpg)$ {
expires 30d;
rewrite ^/wp-content/gallery/(.*)$ /ngg/$1 break;
proxy_pass http://kn007.b0.upaiyun.com;
}
location ~ .*\.(php|php5)?$
{
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fcgi.conf;
}
access_log off;
}
确保http://kn007.b0.upaiyun.com/ngg/是存在并且按照规定放置图片的就ok了。
因此,ngg的请求也异步到了又拍。。。
使用异步定向,也就是保持了原始地址读取,实际由指定地址读取内容。(这样的话,对本身主机响应请求速度有要求,图片不耗本机流量,请求的流量很小,可忽略不计)。
最后还是提提偶的相册地址 album.kn007.net
转载请注明转自:kn007的个人博客的《详谈nginx如何使用转发规则异步请求目标地址》
看不懂
@小可: 不懂问百度。。
有一个疑问。这样转发、Nginx 相当于反向代理。为什么图片可以不耗本机流量?这数据是实测的吗?
@wifay: 呵呵,事实胜于雄辩,你为何不测试一下。你所需要耗的只是服务器的响应,这个流量可以忽略不计。你可以在转发的服务器上存在文件,在本地不存在就清楚了。或者都存在,查看nginx的日志,你就可以发现了。。当然啦,这个说的是可行性。你说流量的外流反向的问题,我是这样判断的。第一,我自身长时候后访问的流量统计,实际并未增多,其次又拍云是我所使用的转发服务器,他记录的实际ip,而不是我服务器的ip。正常来说服务器反向的话,也应该是服务器的ip才对。还有一个猜测的来源是来自于当服务器受到cc流量攻击时,nginx转发除了减少服务器负担,也会相应减少流量消耗。可能nginx这方面可以配置,或者可能我用了squid。
@kn007: 囧、最近正准备把网站的图片做多重负载,才遇到了这个问题,网站本身每天图片流量过大,不便用作测试;用了博客做了小规模测试,流量又计算不出来。就是因为查看 Nginx 日志记录、作为反向代理的前端Nginx和后端Nginx日志都有图片文件大小的数据输出记录。问题就在“又拍云”或者说后端Nginx上面,如果不做特别处理,后端Nginx的日志记录的全部是来自前端Nginx单个IP的访问记录,所以我才产生了这个疑问。
@wifay: 嗯,这个问题确实值得探讨,我确实并未深入了解。不过就当时测试而言,前端流量的消耗并不大,而且探针的网卡数据反应不大。
七七,这代码貌似有问题啊。我在米国VPS放了一个test.jpg大小为200KB,然后在又拍放了一个同名的test.jpg 大小为100KB,但是我去浏览器测试的时候发现下载下来的图片是200KB的,也是是说不是又拍云的,这个改咋办啊?
@天域剑客: 删除你的vps的文件,有什么结果?
相册在这里 album.tyjk.org
@天域剑客: 我看了没用,我监测不到的