Nginx 作为邮件反向代理,处理不同域的不同 TLS/SSL 证书

Nginx 作为邮件反向代理,处理不同域的不同 TLS/SSL 证书

我有几个托管不同域的邮件服务器(例如domain1.com由 提供服务mail.domain1.com,而domain2.com由 提供服务mail.domain2.com)。我尝试设置一个点来访问这些域的邮件,因此我设置了一个带有 Nginx 服务器作为邮件反向代理的 VM。

每个域都使用不同的 TLS 证书,因此我决定设置具有不同和指定的不同server块(就像我以前对 http 所做的那样),如下所示:server_namessl_certificateserver

mail {
  ...
  server {
    listen              25;
    protocol            smtp;
    server_name         mail.domain1.com;
    ssl_certificate     ...;
    ssl_certificate_key ...;
    starttls            on;
    proxy               on;
    xclient             off;
  }

  server {
    listen              25;
    protocol            smtp;
    server_name         mail.domain2.com;
    ssl_certificate     ...;
    ssl_certificate_key ...;
    starttls            on;
    proxy               on;
    xclient             off;
  }
}

但这突然不起作用了,nginx 无法运行,提示“nginx:[emerg] nginx.conf 中重复了“0.0.0.0:25”地址和端口对”

我期望server检查块是否准确server_name,并且该块将用于设置 TLS/SSL 连接,但我错了。同时,我无法将两个域证书合并到一个文件中,并将其用于单个(合并的)服务器块。

也就是说,上面只是一个例子,我曾经托管过更多的邮件域,所以这个问题对我来说非常大。我当然可以使用 Dovecot 的代理功能代理 IMAP/SMTP,同时使用其他软件(哪一个?)代理 SMTP,但 Nginx 看起来是一种很好的通用方法。

请指教,我是否可以使用 Nginx 来存档我的目标或者说如何在不使用很多不同软件的情况下做到这一点?

先感谢您!

答案1

安装 haproxy

cat domain1.com.crt domain1.com.key > /etc/haproxy/ssl/domain1.com.pem
cat domain2.com.crt domain2.com.key > /etc/haproxy/ssl/domain2.com.pem

猫/etc/haproxy/haproxy.cfg

...
listen main-smtp
  mode tcp
  bind :465 ssl crt /etc/haproxy/ssl/
  server s1 127.0.0.1:725 send-proxy
...

猫/etc/nginx/nginx.conf

mail{
  ...
  server {
    listen 725 proxy_protocol;
    protocol smtp;
    timeout 12000s;
  }
  ...
}

相关内容