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

2020-12-10 21:10:30 +08:00
 alvin666

配置如下

#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/

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

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

4024 次点击
所在节点    NGINX
15 条回复
alvin666
2020-12-10 21:31:50 +08:00
自顶一下,这台服务器双向计费,本来是想加速访问慢的网站的..
Reficul
2020-12-10 21:37:41 +08:00
是因为 Nginx 有 Buffer/Cache ?
misaka19000
2020-12-10 21:37:44 +08:00
是不是没设报文压缩?
alvin666
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
2020-12-10 21:41:15 +08:00
@misaka19000 源站和反代都开了 gzip,试了下反代关闭 gzip 也是一样
Reficul
2020-12-10 21:47:08 +08:00
@alvin666 HTTP 的话,抓包看咯。
alvin666
2020-12-10 22:00:58 +08:00
@Reficul 包都是正常的请求,但是不知道为什么反代 NGINX 请求的更多
Reficul
2020-12-10 22:05:52 +08:00
@alvin666 抓了比对一下就知道咯
opengps
2020-12-10 23:28:32 +08:00
一般的网站都是访问比提交要多吧
laminux29
2020-12-11 01:13:55 +08:00
首先你给的配置不全,另外你给的配置中的**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
2020-12-11 07:29:59 +08:00
没明白为什么你会认为原因是“十倍的原因大概是本地百兆,这台服务器和后端都是千兆口”。流量和端口速度有什么关系?
ETiV
2020-12-11 07:38:47 +08:00
十倍的流量是从哪儿看到的,
在机器上,用 iftop 自己看一下?
Rheinmetal
2020-12-11 08:01:09 +08:00
@NilChan 带宽跑满了的话就可能这样 毕竟要受硬件限制
alvin666
2020-12-11 23:07:21 +08:00
@ETiV 是的,iftop 看出来的速度和各种面板统计出来的流量,出流量和入流量都是跑满,所以是十倍
alvin666
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 玩不转...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/734281

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX