You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在webdevops/php-nginx的Docker容器中配置NGINX limit_req

调整Docker化Laravel应用的NGINX限流配置方案

1. 准备自定义限流配置文件

在项目根目录新建nginx-custom文件夹,创建limit-req.conf文件,写入NGINX限流规则(根据自身业务需求调整参数):

# 基于客户端IP定义限流区域,10M内存存储IP状态,每秒允许10次请求
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;

# 将限流规则应用到Laravel API路径
location ~ ^/api/ {
    limit_req zone=api_limit burst=20 nodelay;
}
  • rate=10r/s:每秒允许的基础请求数
  • burst=20:允许的突发请求数
  • nodelay:超过突发阈值的请求直接返回错误,不排队等待

如果需要对整个站点限流,可创建limit-req-global.conf:

limit_req_zone $binary_remote_addr zone=global_limit:10m rate=20r/s;

server {
    limit_req zone=global_limit burst=30 nodelay;
}

2. 修改Dockerfile.prod整合配置

在Dockerfile.prod中添加复制配置文件的命令,将自定义配置放入webdevops/php-nginx指定的目录:

  • 针对应用级虚拟主机配置,添加到vhost.common.d目录:
# 复制自定义限流配置到NGINX虚拟主机通用配置目录
COPY nginx-custom/limit-req.conf /opt/docker/etc/nginx/vhost.common.d/limit-req.conf
  • 针对全局配置,添加到conf.d目录:
COPY nginx-custom/limit-req-global.conf /opt/docker/etc/nginx/conf.d/limit-req-global.conf

修改后的完整Dockerfile.prod示例(在chown命令前添加复制配置的语句即可):

FROM webdevops/php-nginx:8.1-alpine
ENV WEB_DOCUMENT_ROOT=/app/public
ENV PHP_DISMOD=bz2,calendar,exiif,ffi,intl,gettext,ldap,imap,pdo_pgsql,pgsql,soap,sockets,sysvmsg,sysvsm,sysvshm,shmop,xsl,zip,gd,apcu,vips,yaml,imagick,mongodb,amqp
WORKDIR /app
COPY . .  
COPY composer.lock composer.lock
COPY .env.prod .env
RUN composer install --no-interaction --optimize-autoloader --no-dev
RUN php artisan key:generate
RUN php artisan config:cache
RUN php artisan route:cache
RUN php artisan view:cache
# 新增:复制自定义NGINX限流配置
COPY nginx-custom/limit-req.conf /opt/docker/etc/nginx/vhost.common.d/limit-req.conf
RUN chown -R application:application .

3. 重新构建镜像并部署

执行原有构建命令更新镜像:

docker build --file Dockerfile.prod -t ghcr.io/theotherdy/laravel-xmap-php-nginx:latest .

重启docker-compose服务使配置生效:

docker-compose down && docker-compose up -d

4. 验证配置是否生效

进入容器查看NGINX完整配置,确认限流规则已加载:

docker exec -it [你的应用容器ID/名称] nginx -T | grep limit_req

也可通过压测工具(如ab、wrk)模拟高并发请求,检查是否触发限流(通常返回429或503状态码)。

内容的提问来源于stack exchange,提问作者theotherdy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:40:25