我已经成功配置 Postfix 以从数据库中读取虚拟邮箱列表。但如果我的列表分布在多个数据库中怎么办?有没有办法根据传入电子邮件的目标域设置 Postfix 的数据库访问凭据?
我有多个客户共享一个 Web 服务器,每个客户都通过共享拥有自己的数据库。我想知道我是否也可以在他们之间共享一个 Postfix!?问题是他们的用户列表位于他们各自的数据库中,并且分片的数量会随着时间的推移而增长。我不想为每个新客户重新配置系统。
答案1
Postfix 数据库自述文件中指出,
所有 Postfix 查找表都以 (键,值) 对的形式存储信息。这个接口乍一看可能过于简单,但实际上却非常强大。(键,值) 查询接口完全隐藏了 Postfix 中的 LDAP 或 SQL 的复杂性。这是用简单接口连接复杂系统的一个很好的例子。
Postfix 只为您提供查找键,然后“您的表”必须返回相应的值。对于多个数据库,Postfix 也支持它。但它只有一种操作模式:依次逐个检查数据库,直到找到“键”。当您添加一些自定义逻辑时,例如根据收到的电子邮件的目标域设置 Postfix 的数据库访问凭据,那么postfix就没有这样的选项。
因此,你的问题的答案是:
是否可以对 Postfix 虚拟邮箱数据库进行分片?
是的,这是可能的。但您不能仅使用 postfix 来实现这一点。您需要额外的“工具”来帮助 postfix 从您的数据库中查找信息。Postfix
一些想法:
使用 MySQL 存储过程填充所有数据库,然后跨数据库运行查询,例如:https://stackoverflow.com/questions/2132654/querying-multiple-databases-at-once。您需要单一主凭证才能连接到 mysql。
将多个 postfix-mysql-maps 文件放在一个文件夹中,并设置 cron 定期重新填充 postfix 中的所有文件
main.cf
。下面的命令应该足够了。
postconf -e virtual_mailbox_maps=$(for maps in /etc/postfix/mymaps/*; do printf "mysql:$maps "; done)
答案2
如果您正在使用postfix
并mysql
存储用户域和密码等,则您可以postfix
在一个 mysql 服务器上拥有多个服务器,因为 postfixmysql
仅用于使用读取 sql 查询检索信息。
如果您有一个集中式数据库,则每个客户端都可以指向该数据库。