服务器问答

反向代理比原接口性能还低是怎么回事呢,能不能改善
0
2021-05-18 16:35:17
idczone
反向代理本身的配置就是很普通的


location / {
#proxy_buffering off;
root html;
index index.html index.htm;
#proxy_buffers 8 4m;
#proxy_busy_buffers_size 25m;
#proxy_buffer_size 512k;
#proxy_ignore_headers "Cache-Control" "Expires";
#proxy_max_temp_file_size 0;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_intercept_errors off;
proxy_pass http://api;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
proxy_set_header X-Forwarded-Proto https;
#proxy_set_header Forwarded "$proxy_add_forwarded;proto=$scheme";
}

这样的,还有:


worker_rlimit_nofile 655350;
events {
worker_connections 5000000;
}

我测的是列表接口,从原接口用 jmeter 给 1000 个线程,原接口得到的吞吐量是 200 多个操作每秒,
但反向代理的接口只有 20 多不说,有 20%的请求返回的是 read timeout
接收数据量原接口是 6MB/s,反向代理出的接口是 500KB/s

测试的时候 nginx 那台机器的 cpu 和内存占用都没什美国服务器么波动,所以机器性能不够应该不是主要原因

至于说为什么反向代理是因为 nginx 的这台机器才在公网上

反向代理没开缓存是因为这个是个 post 接口,客户端已经发出去了接口不会改为 get 了,并且这里会统计用户访问数所以也不好缓存


就想了解一下反向代理的接口能不能吞吐和原接口接近呢,有没有懂的说说
1.为什么不考虑下公网的带宽呢
2.加了代理层肯定比原来的差
3.用户访问数不能用 nginx 来统计吗

多半是你接口问题或者网络问题,并发量设置的一样?

http version 设成 1.1,不然没有链接复用

proxy_http_version 1.1;

你 root 和 proxy_pass 写一起,我猜 nginx 接受每个请求都要把 html 目录扫描一遍,没找到文件才把请求转给你的应用。

location / {
/>}
这样的写法相当于 -> select * from user ;
你说慢不慢呢。。。

要用 upstream 的 keepalive
然后 proxy 去 keepalive 连接,会好点

多谢各位的建议。
我才发现是我测的时候原接口都是在内网测的,反向代理都是走公网的才有这个区别
我直接在内网测反向代理就可以看到其实反向代理之后性能差不多的

但是现在公网那么多 read timeout 也很头疼,但这就是另一个问题了

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服