默认配置文件的位置和操作系统、RabbitMQ 版本有关,通过启动日志查看配置文件路径是最有效的方式。
默认的服务日志在:$RABBITMQ_HOME/var/log/rabbitmq 下
[root@study rabbitmq]# cat rabbit@study.log=INFO REPORT==== 30-Jun-2020::05:21:26 ===Starting RabbitMQ 3.6.15 on Erlang 19.3Copyright (C) 2007-2018 Pivotal Software, Inc.Licensed under the MPL. See http://www.rabbitmq.com/=INFO REPORT==== 30-Jun-2020::05:21:26 ===node : rabbit@studyhome dir : /rootconfig file(s) : /opt/rabbitmq/etc/rabbitmq/rabbitmq.config (not found)cookie hash : pJEbdZ73MP/AuZep7/cVog==log : /opt/rabbitmq/var/log/rabbitmq/rabbit@study.logsasl log : /opt/rabbitmq/var/log/rabbitmq/rabbit@study-sasl.logdatabase dir : /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@studyCopied!
config file(s) 这个就是配置文件的路径了。可以看到还显示了 not found。这里原因是我们没有这个配置文件的缘故。还可以检查 RABBITMQ_CONFIG_FILE 变量是否配置的是这个路径。
一个及其简单的 rabbitmq.config 文件配置。这个是官方对应的说明 中的一个例子
[{rabbit, [{tcp_listeners, [5673]}]}].Copied!
该配置将客户端连接的默认端口从 5672 修改为 5673.
完整的配置请查看 官方文档的说明
配置加密
配置文件中有一些敏感的配置项可以被加密,RabbitMQ 启动时可以对这些项进行解密。
对这些项进行加密并不是意味着系统的安全性增强了,而是遵从一些必要的规范,让一些敏感的数据不会出现在文本形式的配置文件中。
加密后的值以 {encrypted,加密值} 形式出现。比如下面配置中使用口令 zzhpassphrase 将密码 guest 加密
[{rabbit, [{default_user, <<"guest">>},{default_pass,{{encrypted,<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx===假的值">>}}},{loopback_users,[]},{config_entry_decoder,[{passphrase,<<"zzhpassphrase">>}]}]}].Copied!
- loopback_users:配置为 [],则可以使用非本地网络访问
- config_entry_decoder:中 passphrase 配置的就是口令
passphrase 中还可以用文件方式来赋值
[{rabbit, [...{config_entry_decoder,[{passphrase,{file, "/path/to/passphrase/file"}}]}]}].Copied!
加密串的产生:
rabbitmqctl encodeCopied!
比如下面演示 guest 加密串的值
[root@study rabbitmq]# rabbitmqctl encode '<<"guest">>' zzhpassphrase{encrypted,<<"gm+FzEoi1D2y66taDALT1/qvoW4n/mbI1xKVp12FexHJTV/dQgpn3N12dgh9sX1H6a1JRSXtCtf7uj6rUTPEzg==">>}Copied!
对应的解密命令
[root@study rabbitmq]# rabbitmqctl encode --decode '{encrypted,<<"gm+FzEoi1D2y66taDALT1/qvoW4n/mbI1xKVp12FexHJTV/dQgpn3N12dgh9sX1H6a1JRSXtCtf7uj6rUTPEzg==">>}' zzhpassphrase<<"guest">>Copied!
默认情况下,加密机制 PBKDF2 用来从口令中派生出密钥。默认的 Hash 算法是 SHA512,默认的迭代次数是 1000,以及默认的加密算法为 AES_256_CBC。可以在配置文件中进行修改。
[{rabbit, [...{config_entry_decoder,[{passphrase,<<"zzhpassphrase">>},{cipher, blowfish_cfb64},{hash, sha256},{iterations, 10000}]}]}].Copied!
还可以通过 rabbitmqctl 设置
rabbitmqctl ecnode --cipher blowfish_cfb64 --hash sha256 --iterations 10000 '<<"guest">>' zzhpassphrase# 查看支持的加密算法和 hash 算法[root@study rabbitmq]# rabbitmqctl encode --list-ciphers[des3_cbc,des_ede3,des3_cbf,des3_cfb,aes_cbc,aes_cbc128,aes_cfb8,aes_cfb128,aes_cbc256,aes_ige256,des_cbc,des_cfb,blowfish_cbc,blowfish_cfb64,blowfish_ofb64,rc2_cbc][root@study rabbitmq]# rabbitmqctl encode --list-hashes[sha,sha224,sha256,sha384,sha512,md5]Copied!
优化网络配置
RabbitMQ 支持的所有协议都是基于 TCP 层面的。包括操作系统和 RabbitMQ 本身都提供了许多可调节的参数,除了操作系统内核参数和 DNS,所有的 RabbitMQ 设置都可以在 rabbitmq.config 配置文件中配置实现
网络本身就是一个非常宽泛的话题,本章只讲解一些关键的可调节参数的索引,抛砖引玉之用
RabbitMQ 在等待接收客户端连接时需要绑定一个或多个网络接口,并监听特定的端口。网络接口使用 rabbit.tcp_listeners 选项来配置。默认情况下,RabbitMQ 会在所有可用的网络接口上监听 5672 端口。
下面演示,如果指定一个 IP 地址和端口上进行监听
[{rabbit, [{tcp_listeners, [{"192.168.0.2",5672}]}]}].Copied!
同时监听 IPV4 和 IPv6
[{rabbit, [{tcp_listeners, [{"127.0.0.1",5672},{"::1",5672}]}]}].Copied!
后面的笔者不想记录了,讲的有点粗糙,或则自己看不懂了。
