V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
alvin666
V2EX  ›  NGINX

求助, nginx 反代为什么入流量是出流量的十倍...

  •  
  •   alvin666 · 2020-12-10 21:10:30 +08:00 · 4012 次点击
    这是一个创建于 1436 天前的主题,其中的信息可能已经有所发展或是发生改变。

    配置如下

    #PROXY-START/
    location  ~* \.(php|jsp|cgi|asp|aspx)$
    {
        proxy_pass **original host**;
        proxy_set_header Host **sent host**;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
    }
    location /h5ai/pt/transmission/
    {
        proxy_pass **original host**;
        proxy_set_header Host **sent host**;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header REMOTE-HOST $remote_addr;
        
        #proxy_buffering off;
        add_header X-Cache $upstream_cache_status;
    	#Set Nginx Cache
    	proxy_ignore_headers Set-Cookie Cache-Control expires;
    	add_header Cache-Control no-cache;
    }
    
    #PROXY-END/
    

    十倍的原因大概是本地百兆,这台服务器和后端都是千兆口,本地和这台服务器都跑满了......

    想要的效果是下载流量多少,入流量也是多少,该怎么设置啊...

    15 条回复    2020-12-11 23:21:07 +08:00
    alvin666
        1
    alvin666  
    OP
       2020-12-10 21:31:50 +08:00
    自顶一下,这台服务器双向计费,本来是想加速访问慢的网站的..
    Reficul
        2
    Reficul  
       2020-12-10 21:37:41 +08:00
    是因为 Nginx 有 Buffer/Cache ?
    misaka19000
        3
    misaka19000  
       2020-12-10 21:37:44 +08:00
    是不是没设报文压缩?
    alvin666
        4
    alvin666  
    OP
       2020-12-10 21:39:33 +08:00
    @Reficul 加了 proxy_cache off;和 expires off;也不顶用。。。谷歌了一大堆参数加上了也没用..

    proxy_ignore_headers Set-Cookie Cache-Control expires;
    add_header Cache-Control no-cache;

    add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
    expires off;
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
    add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept' always;

    proxy_cache off;
    proxy_redirect off;
    alvin666
        5
    alvin666  
    OP
       2020-12-10 21:41:15 +08:00
    @misaka19000 源站和反代都开了 gzip,试了下反代关闭 gzip 也是一样
    Reficul
        6
    Reficul  
       2020-12-10 21:47:08 +08:00
    @alvin666 HTTP 的话,抓包看咯。
    alvin666
        7
    alvin666  
    OP
       2020-12-10 22:00:58 +08:00
    @Reficul 包都是正常的请求,但是不知道为什么反代 NGINX 请求的更多
    Reficul
        8
    Reficul  
       2020-12-10 22:05:52 +08:00
    @alvin666 抓了比对一下就知道咯
    opengps
        9
    opengps  
       2020-12-10 23:28:32 +08:00
    一般的网站都是访问比提交要多吧
    laminux29
        10
    laminux29  
       2020-12-11 01:13:55 +08:00   ❤️ 2
    首先你给的配置不全,另外你给的配置中的**original host**我也不知道是什么意思。在这里我拿普通反代结构来进行猜测,猜测出来的结果可能与你的情况不一样。

    我们先来看一个普通反代的结构:

    客户端(C) - Nginx 反向代理(P) - 网页服务器(S) 。我们来看看流量的入与出:

    https://imgchr.com/i/rkVKUA

    对于普通浏览型 /非上传的网站来说,上图中,0 的意思是,站在流量角度,对比一个请求与响应来说,其请求的流量几乎可以不用考虑,我们只需要关注响应的流量 x 。

    从上图可见,对于 P 来说,入流量红色箭头的 0+x=x,出流量兰色箭头 0+x=x,正常情况下是相等的。

    但如果发生了题主说的,入流量是出流量的 10 倍....

    情况 1,10 倍扩大的入流量被添加于上图左上红箭头位置,那就是请求翻了总体流量 10 倍,又由于请求几乎为 0,这种情况下可以直接判定为,客户端向 Nginx 反向代理,发送基于请求的 ddos 了。因为请求流量几乎为 0,那么对于请求数量来说,ddos 情况下就不是仅翻 10 倍了。

    情况 2,10 倍扩大的入流量被添加于上图右下红箭头位置....这种情况,要不是你家网页服务器对 Nginx 反向代理有啥意见,比如配置上出现 bug,或 nginx 本身有 bug,或网页服务器有病毒;要不就是那条网线的 S->P 的链路出问题,导致海量重传。

    如果上面两种 10 倍入流量情况,都没发生,就考虑一下 10 倍缩减的出流量:

    情况 3,10 倍缩减的出流量被添加于上图的右上位置,这种事情从原理上是不可能发生的,省略。

    情况 4,10 倍缩减的出流量被添加于上图的左下位置,这就有意思了,对于 Nginx 反向代理的响应,客户端都直接掐断了连接,不接收响应的流量,那么这种情况,还是客户端在进行 ddos,只不过客户端的请求没那么暴力。

    以上是基于你给了不全的配置 + 你的配置存在我看不懂的地方 + 我是以正常反代结构进行判断,因此猜测的结果,与你的实际情况不一样,是很正常的。
    NilChan
        11
    NilChan  
       2020-12-11 07:29:59 +08:00
    没明白为什么你会认为原因是“十倍的原因大概是本地百兆,这台服务器和后端都是千兆口”。流量和端口速度有什么关系?
    ETiV
        12
    ETiV  
       2020-12-11 07:38:47 +08:00 via iPhone
    十倍的流量是从哪儿看到的,
    在机器上,用 iftop 自己看一下?
    Rheinmetal
        13
    Rheinmetal  
       2020-12-11 08:01:09 +08:00
    @NilChan 带宽跑满了的话就可能这样 毕竟要受硬件限制
    alvin666
        14
    alvin666  
    OP
       2020-12-11 23:07:21 +08:00
    @ETiV 是的,iftop 看出来的速度和各种面板统计出来的流量,出流量和入流量都是跑满,所以是十倍
    alvin666
        15
    alvin666  
    OP
       2020-12-11 23:21:07 +08:00
    @laminux29 非常感谢老哥的回复,删掉的是源域名和反代的域名,别的都没动。
    配置很乱是因为我是在宝塔自带的反代基础上改的...自带的缓存关掉还是有很大流量差,所以又谷歌了一些关闭缓存的配置加进去...确实很乱

    仔细看了一下你的回复,我感觉可能是类似情况 4,因为本地我只有百兆( c-p 这一段),然而( s-p )有千兆,所以应该是客户端接收不到那么多的流量?

    十倍仅仅因为( c-p )( s-p )这两段的带宽瓶颈差异,我测试了和下载工具无关( idm/Chrome 自带等等,并且看链接记录都是只建立了一条连接,因为一条就能跑满),应该能排除 1 。

    线路很好,本地到反代能单线程跑满百兆,反代到真实服务器能跑满千兆,应该不存在链路问题。
    和后端网页服务器也没有关系,我测试反代别的网站,同样会出现两头跑满,即入流量是出流量十倍的情况。应该能排除情况 2


    所以说对于一个反代服务器,我感觉不会出现类似情况 4 的吧。即客户端接收的流量小于反代服务器接收的流量。

    我换 Apache 试一试吧,感觉 nginx 玩不转...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 05:44 · PVG 13:44 · LAX 21:44 · JFK 00:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.