# 配置文件

默认配置文件的位置和操作系统、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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

config file(s) 这个就是配置文件的路径了。可以看到还显示了 not found。这里原因是我们没有这个配置文件的缘故。还可以检查 RABBITMQ_CONFIG_FILE 变量是否配置的是这个路径。

一个及其简单的 rabbitmq.config 文件配置。这个是官方对应的说明 中的一个例子

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

该配置将客户端连接的默认端口从 5672 修改为 5673.

完整的配置请查看 官方文档的说明

# 配置加密

配置文件中有一些敏感的配置项可以被加密,RabbitMQ 启动时可以对这些项进行解密。

对这些项进行加密并不是意味着系统的安全性增强了,而是遵从一些必要的规范,让一些敏感的数据不会出现在文本形式的配置文件中。

加密后的值以 {encrypted,加密值} 形式出现。比如下面配置中使用口令 zzhpassphrase 将密码 guest 加密

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

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

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

加密串的产生:

rabbitmqctl encode
1

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

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

对应的解密命令

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

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

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

还可以通过 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]

1
2
3
4
5
6
7
8
9
10

# 优化网络配置

RabbitMQ 支持的所有协议都是基于 TCP 层面的。包括操作系统和 RabbitMQ 本身都提供了许多可调节的参数,除了操作系统内核参数和 DNS,所有的 RabbitMQ 设置都可以在 rabbitmq.config 配置文件中配置实现

网络本身就是一个非常宽泛的话题,本章只讲解一些关键的可调节参数的索引,抛砖引玉之用

RabbitMQ 在等待接收客户端连接时需要绑定一个或多个网络接口,并监听特定的端口。网络接口使用 rabbit.tcp_listeners 选项来配置。默认情况下,RabbitMQ 会在所有可用的网络接口上监听 5672 端口。

下面演示,如果指定一个 IP 地址和端口上进行监听

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

同时监听 IPV4 和 IPv6

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

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