nginx proxy_pass后端服务器流量

时间:2015-12-05 23:39:36

标签: apache mod-rewrite nginx backend reverse-proxy

我为图像主机运行以下配置。虽然一切正常但服务器2和3之间有很多流量,我认为不一定有。似乎服务器2正在从服务器3下载数据,同时服务器3也直接将图像提供给客户端......那么为什么服务器2从服务器3请求数据呢?

服务器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重写规则并将其更改为服务器1上的nginx重写规则,也会发生同样的事情。

服务器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(apache / 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;
}

1 个答案:

答案 0 :(得分:0)

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