0%

thlm | 如何降低出流量

服务器的出流量在 0.153U/G,如果,你的访问量非常大的话,这部分流量花销还很大的。

这里用 api 服务器做一个例子,如何有效的降低出流量。

先说一下我的背景,我有一台 api 服务器,其中有一个接口是返回市场所有商品的信息的,一共接近500个信息,发出去的话,数据量非常大,尤其是在没有 api 验证的情况下,很多人会私自频繁调用。那台服务器一个月用了 440G

我们目前的方案是这样的。那个 api 关于 restful 不对外公开了,而是单独写一个 websocket 服务器进行推送,当有数据变化的时候,才会给客户端推送数据。

客户端打开网页,连接 websocket 服务器,websocket 服务器本地请求 api restful 数据,当数据变化的时候,给客户端推送数据。

关于 nginx 这样配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
server_name ***;
listen 443 ssl;
ssl_certificate /root/https/fullchain.crt;
ssl_certificate_key /root/https/private.pem;

location / {
proxy_pass http://127.0.0.1:8081/; # 本地 flask 程序
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

本地 flask 程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from flask import Flask, request, current_app

app = Flask(__name__)


@app.before_request
def log_request_info():
client_ip = request.headers.get('X-Real-IP', request.remote_addr)
current_app.logger.info(f"real IP: {client_ip} IP: {request.remote_addr} 调用了 {request.path}")


@app.route('/')
def hello():
return "Hello, World!"


if __name__ == '__main__':
app.run(debug=True)

因为咱们是用 nginx 做的转发

所以

  • request.remote_addr127.0.0.1
  • client_ip 为真实 IP
请我喝杯咖啡吧~