通过HTTPS和Nginx进行RabbitMQ管理

Dar*_*dro 3 https nginx rabbitmq

我正在尝试使用nginx通过HTTPS/SSL访问RabbitMQ接口,我无法弄清楚我缺少什么.

这是我的rabbitmq.conf文件:

[
  {ssl, [{versions, ['tlsv1.2', 'tlsv1.1']}]},
  {rabbit, [
      {reverse_dns_lookups, true},
      {hipe_compile, true},
      {tcp_listeners, [5672]},
      {ssl_listeners, [5671]},
      {ssl_options, [
        {cacertfile, "/etc/ssl/certs/CA.pem"},
        {certfile,   "/etc/nginx/ssl/my_domain.crt"},
        {keyfile,    "/etc/nginx/ssl/my_domain.key"},
        {versions, ['tlsv1.2', 'tlsv1.1']}
      ]}
    ]
  },
  {rabbitmq_management, [
    {listener, [
      {port, 15671},
      {ssl,  true},
      {ssl_opts, [
        {cacertfile, "/etc/ssl/certs/CA.pem"},
        {certfile,   "/etc/nginx/ssl/my_domain.crt"},
        {keyfile,    "/etc/nginx/ssl/my_domain.key"},
        {versions, ['tlsv1.2', 'tlsv1.1']}
      ]}
    ]}
  ]}
].
Run Code Online (Sandbox Code Playgroud)

当我重新启动rabbitmq-server时,一切正常

我的nginx文件如下所示:

location /rabbitmq/ {
        if ($request_uri ~* "/rabbitmq/(.*)") {
                proxy_pass https://example.com:15671/$1;
        }
}
Run Code Online (Sandbox Code Playgroud)

现在,我猜测ngnix配置无法解析HTTPS URL,因为我在尝试浏览时遇到504超时错误:

https://example.com/rabbitmq/
Run Code Online (Sandbox Code Playgroud)

显然,这不是正确的FQDN,但SSL证书在没有/ rabbitmq /的情况下工作正常

有没有人能够通过FQDN和HTTPS在外部连接上使用RabbitMQ管理Web界面?

我是否需要在专用于15671端口的nginx配置中创建新的"服务器"块?

任何帮助将非常感激!

leo*_*zhu 16

我尝试了以下 nginx.conf

    location /rabbitmq/ {
        proxy_pass http://rabbitmq/;
        proxy_buffering                    off;
        proxy_set_header Host              $http_host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
Run Code Online (Sandbox Code Playgroud)

但是我无法获得 aqueue或的详细信息exchange。api 调用出现 404 错误。%2F网址中有一个,它是网址编码的/

我们需要保留%2FAPI url 中的 并将其传递给 rabbitmq。

以下链接描述了如何保留编码的 url 部分并重写它。 没有url解码的Nginx pass_proxy子目录

所以我的解决方案是:

    location /rabbitmq/api/ {
        rewrite ^ $request_uri;
        rewrite ^/rabbitmq/api/(.*) /api/$1 break;
        return 400;
        proxy_pass http://rabbitmq$uri;
        proxy_buffering                    off;
        proxy_set_header Host              $http_host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /rabbitmq/ {
        proxy_pass http://rabbitmq/;
        proxy_buffering                    off;
        proxy_set_header Host              $http_host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
Run Code Online (Sandbox Code Playgroud)


Dar*_*dro 12

我最终恢复到默认的rabbitmq.config文件,然后根据我现在找不到的另一个stackoverflow答案修改了我的nginx配置块到下面.

    location ~* /rabbitmq/api/(.*?)/(.*) {
        proxy_pass http://127.0.0.1:15672/api/$1/%2F/$2?$query_string;
        proxy_buffering                    off;
        proxy_set_header Host              $http_host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~* /rabbitmq/(.*) {
        rewrite ^/rabbitmq/(.*)$ /$1 break;
        proxy_pass http://127.0.0.1:15672;
        proxy_buffering                    off;
        proxy_set_header Host              $http_host;
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
Run Code Online (Sandbox Code Playgroud)

此外,我有JS文件的浏览器缓存,这导致问题,并已禁用它.

我将尝试逐个重新启用SSL,但现在让示例URL正常工作:

https://example.com/rabbitmq/
Run Code Online (Sandbox Code Playgroud)

  • 你在这里节省了我很多时间。我只将目标修改为防火墙后面的另一台服务器,它工作得很好。只需记住在浏览器中的 URL 末尾添加“/”即可。 (2认同)

use*_*747 5

这对我有用

location /rabbitmq {
  proxy_pass http://localhost:15672/;
  rewrite ^/rabbitmq/(.*)$ /$1 break;
}
Run Code Online (Sandbox Code Playgroud)

我不必使用任何其他指令。