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

NGINX反向代理Docker RabbitMQ时遇Queue not found问题求助

RabbitMQ反向代理后点击队列报错的解决办法

问题现象

  • Nginx反向代理Docker部署的RabbitMQ,管理首页显示正常
  • 可正常查看队列列表
  • 点击具体队列(如Test_queue)时出现404报错

现有配置

docker-compose.yml

version: '3.9'
services:
  postgres:
   image: postgres:latest
   restart: always
   container_name: db-postgres
   volumes:
     - postgres-volume:/var/lib/postgresql/data:rw
   ports:
     - "5432"
   env_file:
     - ./env/postgres.env
   networks:
     - local-test-networks

  rabbit:
    image: rabbitmq:3-management
    restart: unless-stopped
    deploy:
      restart_policy:
      condition: on-failure
    volumes:
       - ~/.docker-conf/rabbitmq/data/:/var/lib/rabbitmq/:rw
       - ~/.docker-conf/rabbitmq/log/:/var/log/rabbitmq/:rw
    ports:
       - "5672"
       - "15672"
    environment:
      DOCKER_DEFAULT_PLATFORM: linux/amd64
    networks:
      - local-test-networks

  nginx:
   image: nginx:latest
   build: 
      context: .
      dockerfile: ./nginx/Dockerfile
   depends_on:
      - rabbit
      - postgres

   links:
      - frontend
      - backend
      - pgadmin
      - rabbit
   ports:
      - "80:80"

   networks:
      - local-test-networks

Nginx配置

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

        location /rabbit {
            rewrite ^/rabbit$ /rabbit/ permanent;
            rewrite ^/rabbit/(.*)$ /$1 break;

            proxy_set_header X-Script-Name /rabbit;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            proxy_pass http://rabbit:15672/;

            proxy_redirect off;
            proxy_buffering off;
        }
    
        location / {

            proxy_set_header X-Real $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header Host $host;
            proxy_set_header X-NginX-Proxy true;
      
            proxy_pass http://wallstreetlens:3003;
            proxy_redirect off;
        }
}

解决步骤

1. 配置RabbitMQ前缀环境变量

修改docker-compose.yml中rabbit服务的environment字段,添加路径前缀配置,让RabbitMQ管理UI生成路径时自动带上/rabbit前缀:

environment:
  DOCKER_DEFAULT_PLATFORM: linux/amd64
  RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS: "-rabbitmq_management path_prefix /rabbit"

2. 调整Nginx代理配置

移除原有rewrite规则,优化为更适配的代理配置:

# 处理带斜杠的前缀请求
location /rabbit/ {
    proxy_set_header X-Script-Name /rabbit;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    proxy_pass http://rabbit:15672/;
    
    proxy_redirect off;
    proxy_buffering off;
}

# 自动跳转不带斜杠的请求
location = /rabbit {
    return 302 /rabbit/;
}

3. 重启服务

执行命令重启相关容器,使配置生效:

docker-compose down
docker-compose up -d

原理说明

RabbitMQ管理UI的API请求、静态资源路径默认基于根路径生成,反向代理前缀/rabbit存在时,若未告知RabbitMQ,生成的路径会缺失前缀导致404。通过设置RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS让UI自动适配前缀,配合Nginx的正确代理转发,即可解决点击队列时的报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:15:11