我正在尝试设置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}]}
]
}
]
默认情况下,guest用户只能从localhost进行交互,因此我们需要创建另一个具有所需权限的用户,如下所示:
sudo rabbitmqctl add_user my_user my_password
sudo rabbitmqctl set_permissions my_user ".*" ".*" ".*"
然而,当我尝试通过pika连接到rabbitmq时,我收到ConnectionClosed异常
import pika
credentials = pika.credentials.PlainCredentials('my_username', 'my_password')
pika.BlockingConnection(
pika.ConnectionParameters(host=ip_address, port=55672, credentials=credentials)
)
--[引发连接关闭异常]--
如果我使用相同的参数,但将host更改为localhost,将port更改为5672,则连接正常:pika.ConnectionParameters(host=ip_address, port=55672, credentials=credentials)
我已经在GCE Web控制台上打开了端口5672,并且正在通过nginx进行通信:nginx access.log文件显示
[30/2014年4月22日:59:41 +0000]“AMQP\x00\x00\x09\x01”400 172“-”“-”“-”
显示400状态代码响应(错误请求)。
因此,从外观上看,当通过nginx时请求失败,但当我们直接请求rabbitmq时可以工作。
有没有其他人遇到过类似的问题/让rabbitmq通过nginx为外部用户工作?有没有rabbitmq日志文件可以让我看到每个请求并帮助进一步排除故障?
6条答案
按热度按时间rdlzhqv91#
从nginx 1.9开始,就有了tcp或udp的流模块(默认情况下没有编译)。
我用SSL流配置了我的nginx(1.13.3)
https://docs.nginx.com/nginx/admin-guide/security-controls/terminating-ssl-tcp/
at0kjp5o2#
您已经将nginx配置为HTTP反向代理,但是rabbitmq配置为使用AMQP协议(请参见https://www.rabbitmq.com/configure.html中对tcp_listener的描述)
为了让nginx做任何有意义的事情,您需要重新配置rabbitmq以使用HTTP -例如http://www.rabbitmq.com/web-stomp.html。
当然,这可能会产生涟漪React,因为任何通过AMQP访问rabbitmq的客户机都必须重新配置/重新设计才能使用HTTP。
v1uwarro3#
您可以尝试代理到tcp,为nginx安装一个tcp-proxy模块以便与AMQP一起工作。
https://github.com/yaoweibin/nginx_tcp_proxy_module
给予看。
u4vypkhs4#
Nginx最初只是HTTP服务器,我也建议研究一下上面提到的TCP代理模块,但是如果你想拥有经过验证的负载平衡器,这是通用的TCP反向代理(不仅仅是HTTP,而是可以处理任何协议),你可以考虑使用HAproxy。
1dkrff035#
因为amqp是在tcp/udp级别,你需要为tcp/udp连接https://docs.nginx.com/nginx/admin-guide/load-balancer/tcp-udp-load-balancer配置nginx
zy1mlcev6#
我可能会迟到的党,但我非常肯定,我的文章一定会帮助很多人在未来几天。
在本文中,我解释了如何在端口上使用NGINX作为反向代理为RabbitMQ管理GUI安装Letsencrypt证书**:15672**,它在HTTP协议上运行。
我还使用了相同的SSL证书来启动运行在AMQP协议上的RabbitMQ Server。
请阅读以下文章以了解详细说明:
https://stackcoder.in/posts/install-letsencrypt-ssl-certificate-for-rabbitmq-server-and-rabbitmq-management-tool
注意:不要将运行在端口5672上的RabbitMQ服务器配置为反向代理。即使您这样做,也请使用NGINX流。但我强烈建议坚持在rabbitmq.conf文件中添加证书路径,因为RabbitMQ在TCP/UDP上工作