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

Nginx子目录反向代理RabbitMQ管理端口无法访问问题

Nginx反向代理RabbitMQ管理界面子路径404问题解决

问题描述

我有一台配置多个location块的Nginx服务器,其中一个用于将请求反向代理至RabbitMQ管理端口。服务器监听443端口并启用SSL,同时配置了将HTTP请求重定向至HTTPS的server块。当访问example.com/rabbitmq时页面提示"Not Found",但直接访问example.com:15672可正常打开RabbitMQ管理界面,且Nginx其他代理路径(如根路径)工作正常。将/rabbitmq/的location改为根路径/时,代理可正常工作。

现有Nginx配置片段:

server {
    server_name example.com;

    listen [::]:443 ssl ipv6only=on;
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # certbot needs either port 80 or 443 open to connect
    location /.well-known/acme-challenge {
        allow all;
        root /var/www/html/;
    }

    location /rabbitmq/{
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass "http://127.0.0.1:15672";
    }

    location /{
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass "https://127.0.0.1:9001";
    }

    location /baristadj{
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass "http://baristadjdev.example.com";
    }

    #this is where socket io will be handling the request
    location /rest/messages{
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass "http://127.0.0.1:8080/rest/messages";
    }
}

server {
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    }

    listen 80;
    listen [::]:80;
    error_page 500 502 /etc/nginx/www/500.html;
    server_name example.com;
    return 301 https://$host$request_uri;
}

问题原因

  • RabbitMQ路径前缀不匹配:默认情况下,RabbitMQ管理界面的所有资源(JS、CSS、API请求)都基于根路径/,通过/rabbitmq/子路径代理时,页面会请求/rabbitmq/js/xxx这类路径,但RabbitMQ服务器上对应的路径是/js/xxx,导致404。
  • Nginx路径匹配规则:访问example.com/rabbitmq(不带斜杠)时,Nginx不会匹配到location /rabbitmq/(带斜杠),而是会匹配根路径/的location,代理到后端9001服务,引发错误。

解决方案

步骤1:配置RabbitMQ管理界面路径前缀

编辑RabbitMQ配置文件(通常为/etc/rabbitmq/rabbitmq.conf),添加以下内容:

management.path_prefix = /rabbitmq

保存后重启RabbitMQ服务:

systemctl restart rabbitmq-server

此配置会让RabbitMQ管理界面的所有资源路径都基于/rabbitmq,与Nginx代理路径保持一致。

步骤2:调整Nginx代理配置

修改Nginx中/rabbitmq/相关的location块,添加无斜杠路径重定向,并修正代理路径:

# 处理不带斜杠的访问,自动重定向到带斜杠的路径
location = /rabbitmq {
    return 302 /rabbitmq/;
}

location /rabbitmq/ {
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $http_host;
    # 代理路径需与RabbitMQ配置的前缀完全匹配
    proxy_pass http://127.0.0.1:15672/rabbitmq/;
    # 支持RabbitMQ管理界面的WebSocket实时连接
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

步骤3:验证配置并重启Nginx

检查Nginx配置合法性:

nginx -t

若提示test is successful,重启Nginx服务:

systemctl restart nginx

现在访问example.com/rabbitmq会自动跳转到example.com/rabbitmq/,并正确代理到RabbitMQ管理界面,所有资源加载正常。

内容的提问来源于stack exchange,提问作者Jithin M V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:23:11