nginx: [emerg] zero size shared memory zone “perip”

运行环境:centos7

运行nginx -t,检查nginx的配置文件是否正确,出现一条报错信息:

[root@web01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] zero size shared memory zone "perip"
nginx: configuration file /etc/nginx/nginx.conf test failed

提示nginx: [emerg] zero size shared memory zone “one”,名称为one大小的共享内存空间zene没有。

因为我的nginx配置文件中server块有一条限制ip的规则limit_conn perip 2;

server {
    listen 80;
    server_name localhost;
    limit_conn perip 2;
    location / {
        ...
    }
}

解决办法

在nginx 配置文件http块中添加一条命令,在http区域创建一个zone内存空间

http {
  limit_conn_zone $binary_remote_addr zone=perip:10m;
  server{}
  .......
}

相当于在内存中创建了一个水桶,这个水桶扎了很多眼用来漏水。limit_conn perip 2; 这句直白解释: 我家在非洲,比较穷,我去村里找一个名称叫zone存水的大桶。zero size shared memory zone “perip” 这个错误是 我现在还没找到这个桶,我们村根本不存在这个漏水桶,所以报错了。

同样适合于类似报错的情况zero size shared memory zone "xxx",在http块中声明对应的zone空间

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。