服务器的出流量在 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/; 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_addr
为 127.0.0.1
client_ip
为真实 IP