nginx.conf配置速率设置r/h失败,求解?

如题,我想给我的图床配置以小时计算的速率限制

  • 因为用分钟计算,限量太少了总是把自己笔记的访问给挡住
  • 配置太多了又起不到防止脚本刷流的作用

我在nginx.conf里面是这么编写的

# 限制请求速率
limit_conn_zone $binary_remote_addr zone=addr:10m;# 限制请求处理的内存大小
limit_req_zone $binary_remote_addr zone=one:10m rate=320r/m; # 限制请求处理的内存大小和请求速率限制

在图床server的配置文件中这样引用。目前一切正常,速率限制也能生效

    location / {
        limit_req zone=one burst=5 delay=600;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header Upgrade-Insecure-Requests 1;
        proxy_set_header X-Forwarded-Proto https;

        proxy_pass http://127.0.0.1:14000;
    }

我问了gpt,速率限制是可以写成按小时计算的(以下为gpt3的回答)

在nginx中,速率限制可以有以下格式:

1. rate=1r/s;   # 每秒限制1个请求
2. rate=10r/m;  # 每分钟限制10个请求
3. rate=100r/h; # 每小时限制100个请求
4. rate=500r/d; # 每天限制500个请求

其中,r/s表示每秒,r/m表示每分钟,r/h表示每小时,r/d表示每天。还可以在限制数量前面添加标识符k、m、g,表示千、百万、十亿等级的限制数量。例如,rate=10m/s表示每秒限制10百万个请求。

但当我把nginx.conf里面的速率限制由rate=320r/m改为rate=3200r/h的时候,就无法正常加载nginx了!

$ systemctl restart nginx
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

$ systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2023-04-17 14:42:15 CST; 4s ago
  Process: 11784 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
  Process: 14384 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=1/FAILURE)
  Process: 14382 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
 Main PID: 11786 (code=exited, status=0/SUCCESS)

Apr 17 14:42:15 bt-7274 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Apr 17 14:42:15 bt-7274 nginx[14384]: nginx: [emerg] invalid rate "rate=3200r/h" in /etc/nginx/nginx.conf:35
Apr 17 14:42:15 bt-7274 nginx[14384]: nginx: configuration file /etc/nginx/nginx.conf test failed
Apr 17 14:42:15 bt-7274 systemd[1]: nginx.service: control process exited, code=exited status=1
Apr 17 14:42:15 bt-7274 systemd[1]: Failed to start The nginx HTTP and reverse proxy server.
Apr 17 14:42:15 bt-7274 systemd[1]: Unit nginx.service entered failed state.
Apr 17 14:42:15 bt-7274 systemd[1]: nginx.service failed.

求助,为什么?

系统 CentOS7.6,nginx为yum安装
阅读 2.3k
2 个回答

把你的的配置修改一下:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; # 限制请求处理的内存大小
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题