2015-12-05 67 views
0

我为图像主机运行以下配置。虽然一切正常,但服务器2和3之间存在很多流量,我认为这不是必须的。看来服务器2正在从服务器3下载数据,同时服务器3也直接向客户端提供图像...所以服务器2为什么要从服务器3请求数据?nginx proxy_pass后端服务器流量

上服务器3的总流出流量的

50%是在服务器2

传入流量如果一个请求,其具有嵌入在下面的图像的php文件:http://example.com/upload/i/2014/12345.jpg它通过代理通,apache的处理PHP文件并重写服务器2上的nginx服务器处理的图像链接。

如果有人要求一个嵌入了下面图像的php文件:http://example.com/upload/i/2015/12345.jpg它通过代理传递,apache处理php文件,并重写服务器3上的nginx服务器处理的图像链接,但数据发送到服务器2以及导致大量涌入的流量。我的问题是为什么会发生这种情况,我能以某种方式防止这种情况发生

同样的事情发生,如果我删除了apache重写规则,并改变它nginx的服务器上重写规则1.

服务器1(Nginx的)

server { 
     server_name example.com; 

     location/{ 
       proxy_pass     http://1.2.3.4:21211; 
       proxy_set_header   X-Real-IP $remote_addr; 
       proxy_set_header   Host "example.com"; 
       proxy_buffer_size   128k; 
       proxy_buffers    4 256k; 
       proxy_busy_buffers_size  256k; 
     } 
} 

服务器2(阿帕奇/ nginx的)

<VirtualHost *:21211> 
     ServerName example.com 

     DocumentRoot /storage/example.com/public 

     <Directory /storage/example.com/public> 
       Options -Indexes +FollowSymLinks 
     </Directory> 

     <Directory "/upload"> 
       RewriteEngine On 
       RewriteRule ^i/2014/([0-9]{5}\.jpg)$ http://fs1.example.com/2014/$1 [R] 
       RewriteRule ^i/2015/([0-9]{5}\.jpg)$ http://fs2.example.com/2015/$1 [R] 
     </Directory> 

</VirtualHost> 

-

server { 
     listen 80; 
     server_name fs1.example.com; 

     access_log off; 
     error_log /dev/null; 

     root /storage/fs1.example.com/upload; 
} 

服务器3(Nginx的)

server { 
     listen 80; 
     server_name fs2.example.com; 

     access_log off; 
     error_log /dev/null; 

     root /storage/fs2.example.com/upload; 
} 

回答

0

终于找到了答案。我在服务器2上的软件有一个PHP函数(getimagesize),它正在获取图像以获取它们的尺寸。由于我拆分了我的文件服务器,该功能开始通过Internet从远程文件服务器(服务器3)获取图像,导致流量激增。