NGinx 仅向 429 响应添加 Retry-After 标头

NGinx 仅向 429 响应添加 Retry-After 标头

鉴于以下 NGinx 配置,我该如何修改它以向以下对象发出 Retry-After 标头:仅有的429 条回复?

limit_req_zone $binary_remote_addr zone=ip:10m rate=5r/s;
limit_req_status 429;
limit_conn_status 429;

server {

    listen 80;

    location /api {

        limit_req zone=ip burst=12 nodelay;

        proxy_pass http://website;
    }
}

答案1

存在变量$status保存响应状态值。您可以使用map指令定义另一个保存重试延迟和使用add_header指令的变量。

add_header Retry-After $retry_after always;

add_header如果值(第二个参数)为空,则不会发送标头。我们需要always标志,否则它不会为 429 状态代码设置标头。

完整示例:

limit_req_zone $binary_remote_addr zone=ip:10m rate=5r/s;
limit_req_status 429;
limit_conn_status 429;

map $status $retry_after {
    default '';
    429 '120';
}

server {
    listen 80;
    location /api {
        limit_req zone=ip burst=12 nodelay;
        proxy_pass http://website;
        add_header Retry-After $retry_after always;
    }
}

相关内容