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
相关产品推荐
相关产品推荐

