默认配置文件的位置和操作系统、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.3
Copyright (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@study
home dir : /root
config file(s) : /opt/rabbitmq/etc/rabbitmq/rabbitmq.config (not found)
cookie hash : pJEbdZ73MP/AuZep7/cVog==
log : /opt/rabbitmq/var/log/rabbitmq/rabbit@study.log
sasl log : /opt/rabbitmq/var/log/rabbitmq/rabbit@study-sasl.log
database dir : /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@study
Copied!
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 encode
Copied!
比如下面演示 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!
后面的笔者不想记录了,讲的有点粗糙,或则自己看不懂了。