当前位置: 首页 > 知识库问答 >
问题:

通过 Nginx 的 RabbitMQ 连接

楚泳
2023-03-14

我正在尝试设置 rabbitmq 它可以通过 nginx 从外部(从非本地主机)访问。

nginx-rabbitmq.conf:

server {
    listen       5672;
    server_name  x.x.x.x;
    location / {
        proxy_pass http://localhost:55672/;
    }
}

rabbitmq.conf文件:

[
 {rabbit,
  [
   {tcp_listeners, [{"127.0.0.1", 55672}]}
  ]
 }
]

默认情况下,来宾用户只能从本地主机进行交互,因此我们需要创建另一个具有所需权限的用户,如下所示:

sudo rabbitmqctl add_user my_user my_password
sudo rabbitmqctl set_permissions my_user ".*" ".*" ".*"

但是,当我尝试通过pika连接到Rabbitmq时,我得到了ConntionClo的异常

import pika
credentials = pika.credentials.PlainCredentials('my_username', 'my_password')
pika.BlockingConnection(
    pika.ConnectionParameters(host=ip_address, port=55672, credentials=credentials)
)

--[引发连接关闭异常]--

如果我使用相同的参数,但将主机更改为localhost并将端口更改为5672,那么我连接ok:pika。连接参数(主机=ip_address,端口=55672,凭据=凭据)

我已经在GCE web控制台上打开了5672端口,通过nginx进行通信:nginx访问。日志文件显示

[30/Apr/2014:22:59:41 0000]“AMQP\x00\x00\x09\x01”400 172“-”-“-”

显示 400 状态代码响应(错误请求)。

所以从表面上看,请求在通过ngin x时失败,但当我们直接请求Rabbitmq时有效。

有没有其他人有过类似的问题/通过nginx让rabbitmq为外部用户工作?有没有一个rabbitmq日志文件可以让我看到每个请求并帮助我进一步排除故障?

共有3个答案

田永春
2023-03-14

您可以尝试代理到tcp,为nginx安装一个tcp代理模块以与AMQP一起工作。

https://github.com/yaoweibin/nginx_tcp_proxy_module

试一试。

农明辉
2023-03-14

您已经将nginx配置为HTTP反向代理,但是rabbitmq配置为使用AMQP协议(请参阅https://www.rabbitmq.com/configure.html)

为了让ngin x做任何有意义的事情,你需要重新配置Rabbitmq以使用HTTP——例如http://www.rabbitmq.com/web-stomp.html.

当然,这可能会产生连锁反应,因为任何通过AMQP访问rabbitmq的客户端都必须重新配置/重新设计以使用HTTP。

吴英武
2023-03-14

从nginx 1.9开始,就有了tcp或udp的流模块(默认情况下没有编译)。

我用ssl流配置了我的nginx (1.13.3)

stream {
    upstream rabbitmq_backend {
        server rabbitmq.server:5672
    }

    server {
        listen      5671 ssl;

        ssl_protocols           TLSv1.2 TLSv1.1 TLSv1;
        ssl_ciphers             RC4:HIGH:!aNULL:!MD5;
        ssl_handshake_timeout   30s;

        ssl_certificate       /path/to.crt;
        ssl_certificate_key   /path/to.key;

        proxy_connect_timeout 1s;
        proxy_pass rabbitmq_backend;
    }
}

https://docs.nginx.com/nginx/admin-guide/security-controls/terminating-ssl-tcp/

 类似资料:
  • 当用户关闭选项卡或重新加载页面时,disconnect事件应该会触发,但当通过Nginx和CloudFlare传递连接时,则不会触发。提前感谢您的帮助! 更新:似乎在重新加载/关闭断开连接事件后的几秒钟内最终注册。

  • 问题内容: 我已阅读此文档片段: RabbitMQ自动连接/拓扑恢复 从Spring AMQP的第一个版本开始,该框架在代理发生故障的情况下提供了自己的连接和通道恢复。另外,如第3.1.10节“配置代理”中所述,当重新建立连接时,RabbitAdmin将重新声明任何基础结构Bean(队列等)。因此,它不依赖于amqp- client库现在提供的自动恢复。Spring AMQP现在使用amqp-cl

  • RabbitMQ Java客户端有以下概念: -与RabbitMQ服务器实例的连接 -??? 使用者线程池-使用RabbitMQ服务器队列中的消息的线程池 队列-按FIFO顺序保存消息的结构 我试图理解他们之间的关系,更重要的是,他们之间的联系。 我仍然不太清楚是什么,除了这是您发布和使用的结构,并且它是从一个开放的连接创建的。如果有人能向我解释一下“通道”代表什么,可能有助于澄清一些问题。 通道

  • 我一直使用芹菜与Rabbitmq作为后端。每当我发送一个高负载(大约600-1000)的任务到Rabbitmq,我得到以下错误socket.error[Errno 104]连接重置由对等 我一直在使用的一个示例命令是: 这是我的客户。py发送一个任务,该任务在worker上执行给定的bash命令,并轮询超时秒的结果。 我还尝试使用此命令在一段时间间隔内发送负载。它仍然给出相同的错误 是什么导致了这

  • 我做错了什么? 作为命令运行docker run-d-name rabbit MQ _ awr-p 5672:5672-p 5673:5673-p 15672:15672 rabbit MQ:3-管理 但http://localhost:15672/没有在浏览器中启动 下面日志

  • 问题内容: 我需要一个有关如何通过wifi在android上处理数据的教程。Fe,我需要向PC发送一些消息并接收其他消息。我应该如何建立连接?我应该怎么做才能传输数据?如何传输? 对不起,这个假人的问题,但是我找不到好的手册。我将不胜感激,因为它提供了尽可能详尽的手册,或者提供了一些有关建立wifi连接和发送/接收简单消息的简单示例。 问题答案: 您无需使用任何API即可连接到wifi,仅当您想在