背景

最近刚帮一家公司的Zimbra邮件系统完成了从8.6.0 ==> 8.8.15 的版本升级工作;升级过程一切都挺顺利的;升级后正常运行3天,客户给我反映了一个用户无法自主修改密码的问题,最终我摸索着也成功修复该问题,这里记录一下问题处理笔记;

问题

当用户在自己的web邮箱中点击修改密码功能时,原本要弹出的密码设定窗口会自动重定向连接到服务器地址的8443端口,因为客户的网络边界防火墙并没有对外开放Zimbra服务器的8443端口,因此就导致所有在公司外面登陆访问zimbra web邮箱的用户全部都无法使用修改密码功能,如果手动删除URL中的8443端口后,就可以正常访问和修改密码,因此需要修复该问题;
Zimbra-redirect-8443-port.png

分析

这里需要注意的是,Zimbra8.6 开始引入了一个新的 proxy 角色,会将所有对外发布的客户端协议都全部通过这个 Proxy角色来统一进行会话代理,包括(httphttpspop3pop3simap4imap4s协议,但不代理SMTP)所有客户端访问这些协议的请求会统一由这个Proxy进行接收处理和路由分发到内部对应的其它服务器或是本机协议处理程序上;

该客户原本的8.6.0版本是没有安装和启用proxy角色的,但在升级到8.8.15版本之前,由于安装程序强制要求必须检测到系统上有安装和启用ProxyMemcache这两个组件后安装程序才可以继续进行下去;因此有先在8.6.0版本上安装并配置启用了Proxy后才完成版本升级工作,因此对于这个问题自然想到了有关于Proxy的相关配置和设定上面;

Zimbra官方对于关于Proxy角色的运行架构图如下:
Zimbra-ADDING_PROXY_topu.png

通过查阅Zimbra的文档得知,当启用了Proxy组件后,Zimbra原本的服务端口都会被修改,而改由Proxy进程来监听对外发布的标准端口,其各服务端口的对应关系如下:

服务内部端口代理对外端口
http8080proxy80
https8443proxy443
pop37110proxy110
pop3s7995proxy995
imap7143proxy143
imaps7993proxy993

因此当用户登录访问web邮箱时,连接的是标准https端口443,这是经过Proxy代理访问的,但当点击“修改密码”菜单时跳转的链接却被重定向到了8443端口上,也就是直接访问Zimbrahttp服务的内部端口了,而没有通过Proxy的代理,看起来跳转的动作时直接将Zimbra内部的服务地址直接返回导致的问题;因此需要设定让Proxy知道正确的跳转链接地址应该是什么,或者说需要修改配置去修改或者定义这个对外统一发布的URL地址;

解决方法

Zimbra的官方wiki上其实已经有相关的说明和解决方法了,内容如下:

Problem
Users trying to change their password and webmail URL redirects to mailbox server on port 8443

Solution
This type of problem occurs where public service hostname, protocol and port values are not configured.

To fix this problem we have to set zimbraPublicServiceHostname, zimbraPublicServiceProtocol, and zimbraPublicServicePort on Domain or Global level configuration.

参考链接
Steps to fix port redirection problem with password change request on webclient

问题原因就是在配置和启用Proxy组件后,没有配置对外 公共服务主机名协议端口这三个参数;
这三个参数可以在默认的 “全局设定”“邮件域设定” 中进行配置;

通过Zimbra adminweb界面设定 公用服务 的相关配置如下
(web管理界面只能在 邮件域设定中配置,默认全局设定中没有相关配置项):
Zimbra-Web-Settings.png

通过 Zimbra Console 命令行的方式设定 公用服务 的相关配置指令如下:

全局配置:

su - zimbra 
zmprov mcf zimbraPublicServiceHostname MAIL.DOMAIN.COM
zmprov mcf zimbraPublicServiceProtocol https
zmprov mcf zimbraPublicServicePort 443

邮件域配置

su - zimbra 
zmprov md DOMAIN.COM zimbraPublicServiceHostname MAIL.DOMAIN.COM
zmprov md DOMAIN.COM zimbraPublicServiceProtocol https
zmprov md DOMAIN.COM zimbraPublicServicePort 443

采用以上任意一种设定后,都必须要重启 Zimbra 服务才能正式生效

    zmcontrol restart

注意:

  • 请注意将以上设定和指令中的MAIL.DOMAIN.COM 替换成你自己要让用户访问的主机名地址;将DOMAIN.COM替换成你自己的邮件域名;
  • 如果你的Zimbra上只有一个邮件域,则采用以上任意一种配置方式都可以;如果Zimbra上同时配置启用了多个邮件域,并且你为每一个不同域的用户都各自分配了独立的访问域名来访问和登录Zimbraweb邮箱服务,那么只能采用 邮件域配置 的方式进行设定,并且要分别在不同的邮件域配置中设定对应的公用服务主机名;
Last modification:November 25, 2019
如果觉得我的文章对你有用,请随意赞赏