首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过Nginx连接RabbitMQ

通过Nginx连接RabbitMQ
EN

Stack Overflow用户
提问于 2014-04-30 23:09:09
回答 5查看 28.2K关注 0票数 9

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

nginx-rabbitmq.conf:

代码语言:javascript
运行
复制
server {
    listen       5672;
    server_name  x.x.x.x;
    location / {
        proxy_pass http://localhost:55672/;
    }
}

rabbitmq.conf:

代码语言:javascript
运行
复制
[
 {rabbit,
  [
   {tcp_listeners, [{"127.0.0.1", 55672}]}
  ]
 }
]

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

代码语言:javascript
运行
复制
sudo rabbitmqctl add_user my_user my_password
sudo rabbitmqctl set_permissions my_user ".*" ".*" ".*"

然而,当我尝试通过pika连接到兔子to时,我会得到ConnectionClosed异常。

代码语言:javascript
运行
复制
import pika
credentials = pika.credentials.PlainCredentials('my_username', 'my_password')
pika.BlockingConnection(
    pika.ConnectionParameters(host=ip_address, port=55672, credentials=credentials)
)

--引发ConnectionClosed异常--

如果使用相同的参数,但将主机更改为localhost,端口改为5672,则连接ok:pika.ConnectionParameters(host=ip_address, port=55672, credentials=credentials)

我已经在GCE web控制台上打开了端口5672,并且正在通过nginx进行通信: nginx access.log文件显示

2014年4月30日:22:59:41 +0000 "AMQP\x00\x00\x09\x01“400 172 -”

它显示了400个状态代码响应(糟糕的请求)。

因此,从外观上看,这个请求在通过nginx时失败,但是当我们直接请求rabbitmq时,请求是有效的。

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-01 01:03:15

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

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

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

票数 10
EN

Stack Overflow用户

发布于 2018-07-06 11:25:28

因为nginx1.9有tcp或udp的流模块(默认情况下不是用它编译)。

我用ssl流配置了nginx (1.13.3)

代码语言:javascript
运行
复制
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/

票数 15
EN

Stack Overflow用户

发布于 2014-10-09 09:14:20

您可以尝试并代理到tcp,为nginx安装一个tcp代理模块来使用AMQP。

module

试试看。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23399604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档