给定以下 NGinx 配置,我将如何更改它以仅向429 个响应发出 Retry-After 标头?
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;
}
}
Run Code Online (Sandbox Code Playgroud)
有一个变量$status保存响应状态值。您可以使用map指令定义另一个保存重试延迟的变量并使用add_header指令。
add_header Retry-After $retry_after always;
Run Code Online (Sandbox Code Playgroud)
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3370 次 |
| 最近记录: |