You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Nginx Proxy Manager为后端modoboa邮件服务器托管SSL证书?

解决Nginx Proxy Manager与Modoboa邮件服务器的SSL证书同步问题

下面提供三种可行的优化方案,从快速落地到彻底根治,你可以根据自身环境选择:

方案一:自动证书同步脚本(快速替代手动操作)

既然已经在手动复制证书,直接把这个流程自动化,避免遗忘续订后的同步操作。

操作步骤:

  1. 在Nginx Proxy Manager(以下简称NPM)服务器配置免密SSH登录到Modoboa服务器,让脚本能自动传输文件:

    # 在NPM服务器生成SSH密钥(一路回车即可)
    ssh-keygen -t ed25519
    # 将公钥复制到Modoboa服务器(替换为你的邮件服务器IP和登录用户名)
    ssh-copy-id your-modoboa-user@modoboa-server-ip
    
  2. 在NPM服务器编写同步脚本sync-mail-cert.sh:

    #!/bin/bash
    # NPM中Let's Encrypt证书的存放路径(默认路径,可根据NPM版本调整)
    LOCAL_CERT_DIR="/data/nginx-proxy-manager/letsencrypt/live/your-mail-domain.com"
    # Modoboa服务器中证书的目标存放路径(根据你的Modoboa nginx配置调整)
    REMOTE_CERT_DIR="/etc/nginx/ssl/"
    # Modoboa服务器的登录信息
    REMOTE_USER="your-modoboa-user"
    REMOTE_HOST="modoboa-server-ip"
    
    # 同步证书文件
    rsync -avz $LOCAL_CERT_DIR/fullchain.pem $REMOTE_USER@$REMOTE_HOST:$REMOTE_CERT_DIR/mail-domain.crt
    rsync -avz $LOCAL_CERT_DIR/privkey.pem $REMOTE_USER@$REMOTE_HOST:$REMOTE_CERT_DIR/mail-domain.key
    
    # 远程重启Modoboa的nginx服务,加载新证书
    ssh $REMOTE_USER@$REMOTE_HOST "sudo systemctl reload nginx"
    
  3. 给脚本添加执行权限:

    chmod +x sync-mail-cert.sh
    
  4. 设置定时任务,每周执行一次(Let's Encrypt证书有效期90天,提前更新更稳妥):

    crontab -e
    # 添加一行:每周日凌晨2点执行同步,输出日志到指定文件
    0 2 * * 0 /path/to/sync-mail-cert.sh >> /var/log/mail-cert-sync.log 2>&1
    

    额外优化:部分版本的NPM支持证书续订后触发钩子脚本,可直接将这个同步脚本配置到钩子中,实现证书更新后自动同步,不用依赖定时任务。

方案二:用NPM直接代理邮件协议(推荐,彻底摆脱后端证书)

邮件协议(SMTP/IMAP/POP3)可通过Nginx的stream模块直接代理,让NPM处理所有SSL握手,后端Modoboa的nginx无需配置SSL,直接用内网明文通信(安全可控)。

操作步骤:

  1. 在NPM后台添加TCP/UDP代理(部分版本叫Stream代理):

    • SMTP协议:
      • 监听端口:465(SSL)、587(STARTTLS)、25(可选明文端口)
      • 转发目标:Modoboa服务器的对应明文端口(比如把465转发到Modoboa的2525端口,后端不配置SSL)
      • 启用SSL,选择你的邮件域名证书
    • IMAP/POP3协议:
      • 监听端口:993(IMAP SSL)、995(POP3 SSL)
      • 转发目标:Modoboa服务器的明文端口(IMAP用143,POP3用110,后端不配置SSL)
      • 启用SSL,选择同一个邮件域名证书
  2. 修改Modoboa的nginx配置,移除所有SSL相关配置,改为监听明文端口:
    以IMAP为例:

    server {
        listen 143;
        server_name mail.yourdomain.com;
    
        # 保留其他Modoboa的IMAP代理配置
        proxy_pass imap://127.0.0.1:143;
    }
    

    以SMTP为例:

    server {
        listen 2525;
        server_name mail.yourdomain.com;
    
        # 保留其他Modoboa的SMTP代理配置
        proxy_pass smtp://127.0.0.1:25;
    }
    
  3. 重启Modoboa的nginx和NPM服务,测试邮件客户端连接——所有SSL握手在NPM完成,后端无需管理证书。

方案三:共享证书目录(适合有存储服务器的环境)

用NFS或SMB将NPM的证书目录共享给Modoboa服务器,让Modoboa直接读取NPM的证书文件,无需复制。

操作步骤:

  1. 在NPM服务器配置NFS共享:

    # Debian/Ubuntu系统安装NFS服务
    apt install nfs-kernel-server
    # 编辑共享配置文件
    echo "/data/nginx-proxy-manager/letsencrypt/live modoboa-server-ip(rw,sync,no_root_squash)" >> /etc/exports
    # 重启NFS服务
    systemctl restart nfs-kernel-server
    
  2. 在Modoboa服务器挂载NFS目录:

    # Debian/Ubuntu系统安装NFS客户端
    apt install nfs-common
    # 创建挂载点
    mkdir -p /etc/nginx/ssl/npm-shared
    # 挂载NFS目录
    mount -t nfs npm-server-ip:/data/nginx-proxy-manager/letsencrypt/live /etc/nginx/ssl/npm-shared
    # 设置开机自动挂载,编辑/etc/fstab
    echo "npm-server-ip:/data/nginx-proxy-manager/letsencrypt/live /etc/nginx/ssl/npm-shared nfs defaults 0 0" >> /etc/fstab
    
  3. 修改Modoboa的nginx配置,证书路径指向挂载的共享目录:

    ssl_certificate /etc/nginx/ssl/npm-shared/your-mail-domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/npm-shared/your-mail-domain.com/privkey.pem;
    
  4. 重启Modoboa的nginx服务,证书更新后,可配合方案一的脚本重载nginx加载新证书。


内容的提问来源于stack exchange,提问作者cyberneko2020

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:27:40