在Ubuntu下,您可以使用Nginx和Lua模块实现Swagger API限流。以下是实现API限流的步骤:
首先,确保您已经安装了Nginx。如果没有,请运行以下命令来安装:
sudo apt update
sudo apt install nginx
接下来,安装OpenResty,它是一个集成了Nginx和Lua模块的Web平台。运行以下命令来安装OpenResty:
sudo apt install openresty
编辑Nginx配置文件,通常位于/etc/nginx/nginx.conf
或/etc/openresty/nginx.conf
。在http
部分中,添加以下内容:
http {
lua_shared_dict rate_limit 1m;
server {
listen 80;
location /swagger-ui.html {
root /path/to/swagger-ui;
}
location /v2/api-docs {
rewrite ^/v2/api-docs$ /swagger-ui.html last;
}
location / {
access_by_lua_block {
local rate_limit = require "resty.limit.rate"
local limit = rate_limit.new("rate_limit", 10, 5) -- 每5秒最多允许10个请求
local key = ngx.var.remote_addr
local delay, err = limit:incoming(key)
if not delay then
ngx.status = 500
ngx.say("failed to rate limit: ", err)
return ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
end
if delay > 0 then
ngx.sleep(delay)
end
}
proxy_pass http://your_backend_server;
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;
}
}
}
在这个配置中,我们定义了一个名为rate_limit
的共享字典,用于存储限流数据。然后,我们为Swagger UI和API文档设置了静态文件路径。最后,我们使用access_by_lua_block
指令来实现限流逻辑。
保存配置文件并重启Nginx以应用更改:
sudo nginx -s reload
现在,您的Swagger API应该已经实现了限流功能。每5秒最多允许10个请求。您可以根据需要调整限流参数。