Nginx 本身并不直接提供邮件服务,但可以通过与第三方模块(如 nginx-mail 或 nginx-mailstream)结合使用来提供邮件服务。以下是一个基本的配置示例,展示如何使用 Nginx 和 nginx-mail 模块来设置一个简单的邮件代理服务器。
nginx-mail 模块:这个模块不是默认安装的,你需要从源码编译 Nginx 并添加这个模块。nginx-mail 模块下载 Nginx 源码:
wget http://nginx.org/download/nginx-1.21.6.tar.gz
tar -zxvf nginx-1.21.6.tar.gz
cd nginx-1.21.6
下载 nginx-mail 模块:
git clone https://github.com/yaoweibin/nginx-mail.git
编译 Nginx 并添加 nginx-mail 模块:
./configure --with-http_ssl_module --add-module=../nginx-mail
make
sudo make install
编辑 Nginx 配置文件(通常是 /usr/local/nginx/conf/nginx.conf),添加以下配置:
mail {
server {
listen 25; # SMTP 端口
protocol smtp;
host mail.example.com; # 你的邮件服务器域名
auth_http localhost/auth; # 使用本地 HTTP 服务器进行认证
auth_http_timeout 3s;
auth_request_set $auth_user $upstream_http_x_auth_user;
auth_request_set $auth_password $upstream_http_x_auth_password;
smtp_auth on;
smtp_capabilities "TOP";
smtp_helo_name mail.example.com;
# 允许的 IP 地址范围
allow 192.168.1.0/24;
deny all;
# 日志文件
access_log logs/mail.access.log;
error_log logs/mail.error.log;
}
server {
listen 587; # Submission 端口
protocol smtp;
host mail.example.com; # 你的邮件服务器域名
auth_http localhost/auth; # 使用本地 HTTP 服务器进行认证
auth_http_timeout 3s;
auth_request_set $auth_user $upstream_http_x_auth_user;
auth_request_set $auth_password $upstream_http_x_auth_password;
smtp_auth on;
smtp_capabilities "TOP";
smtp_helo_name mail.example.com;
# 允许的 IP 地址范围
allow 192.168.1.0/24;
deny all;
# 日志文件
access_log logs/mail.access.log;
error_log logs/mail.error.log;
}
server {
listen 143; # IMAP 端口
protocol imap;
host mail.example.com; # 你的邮件服务器域名
ssl on;
ssl_certificate /path/to/ssl/certificate.pem;
ssl_certificate_key /path/to/ssl/private.key;
# 允许的 IP 地址范围
allow 192.168.1.0/24;
deny all;
# 日志文件
access_log logs/mail.access.log;
error_log logs/mail.error.log;
}
server {
listen 993; # IMAP over SSL 端口
protocol imap;
host mail.example.com; # 你的邮件服务器域名
ssl on;
ssl_certificate /path/to/ssl/certificate.pem;
ssl_certificate_key /path/to/ssl/private.key;
# 允许的 IP 地址范围
allow 192.168.1.0/24;
deny all;
# 日志文件
access_log logs/mail.access.log;
error_log logs/mail.error.log;
}
server {
listen 110; # POP3 端口
protocol pop3;
host mail.example.com; # 你的邮件服务器域名
ssl on;
ssl_certificate /path/to/ssl/certificate.pem;
ssl_certificate_key /path/to/ssl/private.key;
# 允许的 IP 地址范围
allow 192.168.1.0/24;
deny all;
# 日志文件
access_log logs/mail.access.log;
error_log logs/mail.error.log;
}
server {
listen 995; # POP3 over SSL 端口
protocol pop3;
host mail.example.com; # 你的邮件服务器域名
ssl on;
ssl_certificate /path/to/ssl/certificate.pem;
ssl_certificate_key /path/to/ssl/private.key;
# 允许的 IP 地址范围
allow 192.168.1.0/24;
deny all;
# 日志文件
access_log logs/mail.access.log;
error_log logs/mail.error.log;
}
}
你需要设置一个 HTTP 服务器来处理邮件认证请求。以下是一个简单的示例,使用 PHP 来实现:
创建一个 PHP 文件(例如 auth.php):
<?php
$username = $_SERVER['HTTP_X_AUTH_USER'];
$password = $_SERVER['HTTP_X_AUTH_PASSWORD'];
// 这里应该是你的用户认证逻辑
if ($username == 'user' && $password == 'pass') {
echo json_encode(['user' => $username]);
exit;
} else {
http_response_code(401);
echo json_encode(['error' => 'Authentication failed']);
exit;
}
?>
将这个文件放在你的 web 服务器上,并确保 Nginx 可以访问它。
sudo /usr/local/nginx/sbin/nginx
你可以使用 telnet 或其他邮件客户端工具来测试你的邮件服务是否正常工作。
telnet localhost 25
输入以下命令来测试 SMTP 服务:
HELO example.com
AUTH LOGIN
<base64 encoded username>
<base64 encoded password>
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
Subject: Test Email
This is a test email.
.
QUIT
通过以上步骤,你应该能够配置一个基本的 Nginx 邮件代理服务器。请根据你的具体需求进行调整和扩展。