如何在 Rocky Linux 8.6 上配置并调优 Nginx 与 Lua 脚本,提升 API 网关的性能与并发处理能力

A5IDC本文提供一套可落地的高性能 API 网关解决方案,在 Rocky Linux 8.6 上构建基于 Nginx + Lua 的动态请求处理服务,该服务支持认证、限流、路由、缓存等功能,并通过调优达到高并发能力。文章包含具体产品参数、系统调优方法、代码示例以及性能评估数据。


一、方案概览与组件选择

1. 方案组成

组件作用
Rocky Linux 8.6操作系统,稳定企业级发行版
OpenResty内嵌 Nginx + LuaJIT,推荐用于高性能 Lua 扩展
lua-resty-* 系列Lua 库,提供限流、JWT、缓存等扩展能力
Redis外部状态存储,用于分布式限流和缓存
Prometheus / Grafana性能监控与可视化

2. 目标性能指标(设计值)

指标说明目标
并发连接数Nginx 同时处理的 TCP 连接数≥ 100,000
QPS(请求/秒)API 端点峰值承载≥ 30,000
P99 响应延迟响应时间的 99% 百分位< 50 ms
认证处理逻辑执行时间Lua 代码执行时间< 2 ms

二、环境准备

1. 服务器www.a5idc.com硬件配置建议

建议配置
CPU16 核 Intel Xeon 或同等 AMD EPYC
内存32 GB DDR4
网络10 Gbps 以太网
存储SSD NVMe 500 GB

高并发场景下,CPU 核数、网络带宽和内存直接影响 Nginx 的工作能力。

2. 安装 Rocky Linux 8.6

确保系统更新:

sudo dnf update -y
sudo reboot

安装基本依赖:

sudo dnf groupinstall "Development Tools" -y
sudo dnf install epel-release -y
sudo dnf install redis unzip git wget -y

三、部署 OpenResty(包含 Nginx + LuaJIT)

相比直接安装 Nginx,自行编译 Lua 模块复杂,推荐使用 OpenResty,它内置 Nginx、LuaJIT 和常用 Lua 模块。

1. 添加 OpenResty 官方仓库

cat <<EOF | sudo tee /etc/yum.repos.d/openresty.repo
[openresty]
name=OpenResty Repository
baseurl=https://openresty.org/package/rocky/8/x86_64/
gpgcheck=1
gpgkey=https://openresty.org/package/pubkey.gpg
enabled=1
EOF

2. 安装 OpenResty

sudo dnf install openresty -y

验证版本:

openresty -v

回显示类似:

nginx version: openresty/1.x.x

四、基础 Nginx + Lua API 网关配置

1. Nginx 主配置

编辑 /usr/local/openresty/nginx/conf/nginx.conf

worker_processes auto;
worker_rlimit_nofile 200000;

events {
    worker_connections 32768;
    multi_accept on;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;

    keepalive_timeout 65;
    client_body_timeout 10;
    client_header_timeout 10;
    send_timeout 10;

    lua_shared_dict rate_limit_store 50m;
    lua_shared_dict jwt_pubkeys 20m;

    # Lua package search path
    lua_package_path "/usr/local/openresty/lualib/?.lua;;";

    upstream backend_pool {
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
    }

    server {
        listen 80 backlog=65536;

        location /api/ {
            access_by_lua_file /etc/openresty/lua/access.lua;
            content_by_lua_file /etc/openresty/lua/content.lua;
            proxy_pass http://backend_pool;
        }
    }
}

五、Lua 脚本实现核心功能

1. JWT 认证脚本(access.lua)

安装依赖:

luarocks install lua-resty-jwt

脚本:

-- /etc/openresty/lua/access.lua
local jwt = require "resty.jwt"
local headers = ngx.req.get_headers()
local auth = headers["Authorization"]

if not auth then
    ngx.status = ngx.HTTP_UNAUTHORIZED
    ngx.say("Authorization required")
    return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end

local token = string.gsub(auth, "Bearer ", "")
local jwt_obj = jwt:verify("your_jwt_secret", token)

if not jwt_obj.verified then
    ngx.status = ngx.HTTP_UNAUTHORIZED
    ngx.say("Invalid Token")
    return ngx.exit(ngx.HTTP_UNAUTHORIZED)
end

2. 限流逻辑(同 access.lua)

local dict = ngx.shared.rate_limit_store
local ip = ngx.var.remote_addr
local reqs, _ = dict:get(ip)

if reqs and reqs > 100 then  -- 每分钟限制 100 请求
    ngx.status = ngx.HTTP_TOO_MANY_REQUESTS
    ngx.say("Rate Limit Exceeded")
    return ngx.exit(ngx.HTTP_TOO_MANY_REQUESTS)
else
    dict:incr(ip, 1, 0, 60)
end

3. 自定义内容处理(content.lua)

-- 简单响应示例
ngx.header.content_type = "application/json"
ngx.say('{"status":"ok","message":"handled by lua"}')

六、性能调优

1. 操作系统级调优

编辑 /etc/sysctl.d/99-nginx.conf

net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_tw_reuse=1

使其生效:

sudo sysctl --system

2. Nginx 层优化

调优项建议值说明
worker_processesauto使 Nginx 根据 CPU 核自动设定
worker_connections32768单 worker 最大连接
tcp_nopush/tcp_nodelayon提升网络 I/O 性能
lua_code_cacheon避免 Lua 在生产中反复编译

http {} 里开启:

lua_code_cache on;

七、监控与指标采集

使用 Prometheus 导出器(如 ngx-lua-prometheus):

安装:

luarocks install lua-resty-prometheus

在配置中添加指标:

init_by_lua_block {
    prometheus = require("resty.prometheus").init("prometheus_metrics", 1000000)
}
log_by_lua_block {
    prometheus:collect(ngx)
}

八、压力测试与性能评估

使用 wrk 进行基线测试:

wrk -t12 -c10000 -d60s http://your-server/api/test
并发线程并发连接平均延迟请求数错误率
1210,000~30ms~1.8M< 0.1%
2420,000~45ms~3.2M< 0.5%

上表仅为示例,实际结果取决于后端服务性能、硬件及网络环境。


九、扩展功能建议

1. LRU 缓存实现

结合 lua-resty-lrucache 提升对热点数据的响应速度。

2. 分布式限流

将限流状态放入 Redis,多个网关实例共享限流数据。


十、总结

A5IDC通过使用 OpenResty + Nginx + Lua,在 Rocky Linux 8.6 上构建高性能 API 网关是可行且高效的。本文包含从安装部署、Lua 脚本编写、系统与 Nginx 调优到压力测试的完整流程与性能参数,适合用于线上高并发场景。利用 Lua 脚本的灵活性,可以在网关层实现认证、限流、动态路由、缓存等功能,使架构更轻量且具备高扩展能力。 ([Medium][1

如需结合具体业务(如 OAuth2、JWT 黑名单、分级限流等),可进一步拓展 Lua 脚本逻辑,可根据业务需要逐步构建复杂的网关功能。

Rocky Linux 8.6 上安装和配置 Slurm(Scientific Linux Utility for Resource Management,科学计算资源管理工具),通常涉及以下几个步骤: 1. **安装依赖**: - 首先,你需要确保你的系统已安装了必要的基础包,比如 `epel-release`(额外的软件包存储库)。运行: ``` sudo yum install epel-release ``` 2. **安装Slurm套件**: 使用 `yum` 安装Slurm,包括核心组件、管理工具等: ``` sudo yum install slurm-slurmctld slurm-munge slurmdbd slurm-clients ``` 对于图形界面和监控工具,也可以选择安装: ``` sudo yum install slurmd scontrol ``` 3. **配置文件**: - 创建必要的目录结构: ``` sudo mkdir -p /etc/slurm-llnl sudo chown slurm:slurm /etc/slurm-llnl ``` - 编辑关键配置文件,例如 `slurm.conf` 和 `munge.key`。你可以通过文本编辑器打开它们,例如 `nano` 或者 `vi`。 4. **启动服务**: ``` sudo systemctl start slurmctld munge slurmd sudo systemctl enable slurmctld munge slurmd ``` 5. **验证安装**: - 使用 `sinfo` 检查是否可以列出节点和队列信息。 - 通过 `sacctmgr` 登录Slurm数据库管理工具,检查用户和其他配置6. **网络共享和认证**: - 如果需要远程集群通信,配置MUNGE服务以共享密钥。 - 根据需求设置身份验证,如PAM(Pluggable Authentication Modules)配置。 7. **安全性**: 确保防火墙规则允许Slurm所需的端口访问,设置相应的安全策略。 8. **测试和整**: 完成上述步骤后,你应该可以运行作业查看Slurm的监控。根据实际情况对配置进行化和整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值