鉴于以下 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;
}
}