默认配置文件的位置和操作系统、RabbitMQ 版本有关,通过启动日志查看配置文件路径是最有效的方式。
默认的服务日志在:$RABBITMQ_HOME/var/log/rabbitmq 下

  1. [root@study rabbitmq]# cat rabbit@study.log
  2. =INFO REPORT==== 30-Jun-2020::05:21:26 ===
  3. Starting RabbitMQ 3.6.15 on Erlang 19.3
  4. Copyright (C) 2007-2018 Pivotal Software, Inc.
  5. Licensed under the MPL. See http://www.rabbitmq.com/
  6. =INFO REPORT==== 30-Jun-2020::05:21:26 ===
  7. node : rabbit@study
  8. home dir : /root
  9. config file(s) : /opt/rabbitmq/etc/rabbitmq/rabbitmq.config (not found)
  10. cookie hash : pJEbdZ73MP/AuZep7/cVog==
  11. log : /opt/rabbitmq/var/log/rabbitmq/rabbit@study.log
  12. sasl log : /opt/rabbitmq/var/log/rabbitmq/rabbit@study-sasl.log
  13. database dir : /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@study
  14. Copied!

config file(s) 这个就是配置文件的路径了。可以看到还显示了 not found。这里原因是我们没有这个配置文件的缘故。还可以检查 RABBITMQ_CONFIG_FILE 变量是否配置的是这个路径。
一个及其简单的 rabbitmq.config 文件配置。这个是官方对应的说明 中的一个例子

  1. [
  2. {rabbit, [
  3. {tcp_listeners, [5673]}
  4. ]
  5. }
  6. ].
  7. Copied!

该配置将客户端连接的默认端口从 5672 修改为 5673.
完整的配置请查看 官方文档的说明

配置加密

配置文件中有一些敏感的配置项可以被加密,RabbitMQ 启动时可以对这些项进行解密。
对这些项进行加密并不是意味着系统的安全性增强了,而是遵从一些必要的规范,让一些敏感的数据不会出现在文本形式的配置文件中。
加密后的值以 {encrypted,加密值} 形式出现。比如下面配置中使用口令 zzhpassphrase 将密码 guest 加密

  1. [
  2. {rabbit, [
  3. {default_user, <<"guest">>},
  4. {default_pass,{
  5. {encrypted,<<"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx===假的值">>}
  6. }},
  7. {loopback_users,[]},
  8. {config_entry_decoder,[
  9. {passphrase,<<"zzhpassphrase">>}
  10. ]}
  11. ]
  12. }
  13. ].
  14. Copied!
  • loopback_users:配置为 [],则可以使用非本地网络访问
  • config_entry_decoder:中 passphrase 配置的就是口令

passphrase 中还可以用文件方式来赋值

  1. [
  2. {rabbit, [
  3. ...
  4. {config_entry_decoder,[
  5. {passphrase,{file, "/path/to/passphrase/file"}}
  6. ]}
  7. ]
  8. }
  9. ].
  10. Copied!

加密串的产生:

  1. rabbitmqctl encode
  2. Copied!

比如下面演示 guest 加密串的值

  1. [root@study rabbitmq]# rabbitmqctl encode '<<"guest">>' zzhpassphrase
  2. {encrypted,<<"gm+FzEoi1D2y66taDALT1/qvoW4n/mbI1xKVp12FexHJTV/dQgpn3N12dgh9sX1H6a1JRSXtCtf7uj6rUTPEzg==">>}
  3. Copied!

对应的解密命令

  1. [root@study rabbitmq]# rabbitmqctl encode --decode '{encrypted,<<"gm+FzEoi1D2y66taDALT1/qvoW4n/mbI1xKVp12FexHJTV/dQgpn3N12dgh9sX1H6a1JRSXtCtf7uj6rUTPEzg==">>}' zzhpassphrase
  2. <<"guest">>
  3. Copied!

默认情况下,加密机制 PBKDF2 用来从口令中派生出密钥。默认的 Hash 算法是 SHA512,默认的迭代次数是 1000,以及默认的加密算法为 AES_256_CBC。可以在配置文件中进行修改。

  1. [
  2. {rabbit, [
  3. ...
  4. {config_entry_decoder,[
  5. {passphrase,<<"zzhpassphrase">>},
  6. {cipher, blowfish_cfb64},
  7. {hash, sha256},
  8. {iterations, 10000}
  9. ]}
  10. ]
  11. }
  12. ].
  13. Copied!

还可以通过 rabbitmqctl 设置

  1. rabbitmqctl ecnode --cipher blowfish_cfb64 --hash sha256 --iterations 10000 '<<"guest">>' zzhpassphrase
  2. # 查看支持的加密算法和 hash 算法
  3. [root@study rabbitmq]# rabbitmqctl encode --list-ciphers
  4. [des3_cbc,des_ede3,des3_cbf,des3_cfb,aes_cbc,aes_cbc128,aes_cfb8,aes_cfb128,
  5. aes_cbc256,aes_ige256,des_cbc,des_cfb,blowfish_cbc,blowfish_cfb64,
  6. blowfish_ofb64,rc2_cbc]
  7. [root@study rabbitmq]# rabbitmqctl encode --list-hashes
  8. [sha,sha224,sha256,sha384,sha512,md5]
  9. Copied!

优化网络配置

RabbitMQ 支持的所有协议都是基于 TCP 层面的。包括操作系统和 RabbitMQ 本身都提供了许多可调节的参数,除了操作系统内核参数和 DNS,所有的 RabbitMQ 设置都可以在 rabbitmq.config 配置文件中配置实现
网络本身就是一个非常宽泛的话题,本章只讲解一些关键的可调节参数的索引,抛砖引玉之用
RabbitMQ 在等待接收客户端连接时需要绑定一个或多个网络接口,并监听特定的端口。网络接口使用 rabbit.tcp_listeners 选项来配置。默认情况下,RabbitMQ 会在所有可用的网络接口上监听 5672 端口。
下面演示,如果指定一个 IP 地址和端口上进行监听

  1. [
  2. {rabbit, [
  3. {tcp_listeners, [{"192.168.0.2",5672}]}
  4. ]
  5. }
  6. ].
  7. Copied!

同时监听 IPV4 和 IPv6

  1. [
  2. {rabbit, [
  3. {tcp_listeners, [
  4. {"127.0.0.1",5672},
  5. {"::1",5672}
  6. ]
  7. }
  8. ]
  9. }
  10. ].
  11. Copied!

后面的笔者不想记录了,讲的有点粗糙,或则自己看不懂了。