NGINX配置邮件代理服务器
NGINX配置邮件代理服务器
本文将说明如何将NGINX Plus或NGINX开源配置为邮件服务器或外部邮件服务的代理。
介绍
NGINX可以将IMAP,POP3和SMTP协议代理到承载邮件帐户的上游邮件服务器之一,因此可以用作电子邮件客户端的单个端点。这可能带来许多好处,例如:
- 轻松扩展邮件服务器的数量
- 根据不同的规则选择邮件服务器,例如,根据客户的IP地址选择最近的服务器
- 在邮件服务器之间分配负载
先决条件
NGINX Plus(已包含代理电子邮件流量所必需的Mail模块)或NGINX开源使用
--with-mail
用于电子邮件代理功能的--with-mail_ssl_module
参数和用于SSL / TLS支持的参数编译了Mail模块:$ ./configure --with-mail --with-mail_ssl_module --with-openssl = [ DIR ] /openssl-1.1.1
IMAP,POP3和/或SMTP邮件服务器或外部邮件服务
配置SMTP / IMAP / POP3邮件代理服务器
在NGINX配置文件中:
创建一个顶级
mail
上下文(在与http
上下文相同的级别上定义):邮件 { #... }
使用
server_name
指令指定邮件服务器的名称:邮件 { server_name mail.example.com ; #... }
使用
auth_http
指令指定HTTP认证服务器。身份验证服务器将对电子邮件客户端进行身份验证,选择上游服务器进行电子邮件处理,并报告错误。请参阅为邮件代理设置身份验证。邮件 { server_name mail.example.com ; auth_http 本地主机:9000 /cgi-bin/nginxauth.cgi ; #... }
或者,通过指定
proxy_pass_error_message
指令来指定是否从认证服务器通知用户错误。当邮箱内存不足时,这可能很方便:邮件 { server_name mail.example.com ; auth_http 本地主机:9000 /cgi-bin/nginxauth.cgi ;proxy_pass_error_message 在;#... }
使用这些
server
块配置每个SMTP,IMAP或POP3服务器。对于每个服务器,请指定:- 与带有指令的指定协议相对应的端口号
listen
- 带有指令的协议
protocol
(如果未指定,将从指令中指定的端口自动检测到listen
) - 允许的身份验证方法有
imap_auth
,pop3_auth
和smtp_auth
指令:
服务器 { 收听 25 ; 协议 smtp ; smtp_auth 登录 普通 cram-md5 ; } 服务器 { 监听 110 ; 协议 pop3 ; pop3_auth 普通 apop cram-md5 ; }服务器 { 监听 143 ; 协议 imap ; }
- 与带有指令的指定协议相对应的端口号
设置邮件代理的身份验证
来自客户端的每个POP3 / IMAP / SMTP请求都将首先在外部HTTP身份验证服务器上或通过身份验证脚本进行身份验证。Nginx邮件服务器代理必须具有验证服务器。您可以根据基于HTTP协议的NGINX身份验证协议自行创建服务器。
如果身份验证成功,则身份验证服务器将选择上游服务器并重定向请求。在这种情况下,来自服务器的响应将包含以下几行:
HTTP / 1.0 200 OK 身份验证状态:确定 Auth-Server:<主机> #将用于邮件处理的上游服务器的服务器名称或IP地址 Auth-Port:<port> #上游服务器的端口
如果身份验证失败,则身份验证服务器将返回错误消息。在这种情况下,来自服务器的响应将包含以下几行:
HTTP / 1.0 200 OK 身份验证状态:<消息> #返回到客户端的错误消息,例如“无效的登录名或密码”身份 验证等待:<number> #直到连接关闭为止剩余的身份验证尝试次数
请注意,在两种情况下,响应都将包含HTTP / 1.0 200 OK,这可能会造成混淆。
从该验证服务器请求和响应的更多示例,请参阅ngx_mail_auth_http_module在NGINX参考文档。
为邮件代理设置SSL / TLS
使用SSL / TLS上的POP3 / SMTP / IMAP,请确保在客户端和邮件服务器之间传递的数据受到保护。
为邮件代理启用SSL / TLS:
通过在命令行中键入命令,然后在输出中查找该行,确保已为NGINX配置了SSL / TLS支持。
nginx -V
with --mail_ssl_module
$ nginx -V 配置参数:... with--mail_ssl_module
确保已获取服务器证书和私钥,并将它们放在服务器上。可以从可信证书颁发机构(CA)获得证书,也可以使用SSL库(例如OpenSSL)生成证书。
使用
ssl
指令为邮件代理启用SSL / TLS 。如果在mail
上下文中指定了伪指令,则将为所有邮件代理服务器启用SSL / TLS。您还可以使用以下starttls
指令启用STLS和STARTTLS :ssl on ;
要么
STARTTLS 上;
添加SSL证书:使用
ssl_certificate
指令指定证书的路径(必须采用PEM格式),并在指令中指定私钥的路径ssl_certificate_key
:邮件 { #... ssl_certificate /etc/ssl/certs/server.crt ; ssl_certificate_key /etc/ssl/certs/server.key ; }
您可以通过
ssl_protocols
和ssl_ciphers
指令仅使用SSL / TLS的强版本和密码,也可以设置自己喜欢的协议和密码:邮件 { #... ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; }
为邮件代理优化SSL / TLS
这些提示将帮助您使NGINX邮件代理更快,更安全:
通过将
worker_processes
指令设置为与mail
上下文相同的级别,设置工作进程的数量等于处理器的数量:worker_processes 自动; 邮件 { #... }
使用以下
ssl_session_cache
指令启用共享会话缓存并禁用内置会话缓存:worker_processes 自动;邮件 { #... ssl_session_cache shared:SSL:10m ; #... }
(可选)您可以
5
使用以下ssl_session_timeout
指令来延长会话生存时间(默认情况下为分钟):worker_processes 自动;邮件 { #... ssl_session_cache shared:SSL:10m ; ssl_session_timeout 10m ; #... }
完整的例子
worker_processes 自动;邮件 { server_name mail.example.com ; auth_http 本地主机:9000 /cgi-bin/nginxauth.cgi ;proxy_pass_error_message 在;ssl on ; ssl_certificate /etc/ssl/certs/server.crt ; ssl_certificate_key /etc/ssl/certs/server.key ; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_ciphers HIGH:!aNULL:!MD5 ; ssl_session_cache shared:SSL:10m ; ssl_session_timeout 10m ;服务器 { 收听 25 ; 协议 smtp ; smtp_auth 登录 普通 cram-md5 ; }服务器 { 监听 110 ; 协议 pop3 ; pop3_auth 普通 apop cram-md5 ; }服务器 { 监听 143 ; 协议 imap ; } }
在此示例中,有三个电子邮件代理服务器:SMTP,POP3和IMAP。每个服务器都配置有SSL和STARTTLS支持。SSL会话参数将被缓存。
代理服务器使用HTTP身份验证服务器-其配置超出了本文的范围。来自服务器的所有错误消息将返回给客户端。
NGINX配置邮件代理服务器相关推荐
- nginx配置使用笔记:三
什么是remote_addr remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你 的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web ...
- Nginx(四):Nginx配置实战
相关阅读: Nginx(一):Nginx原理概述 与 安装步骤详解 Nginx(二):反向代理原理 与 配置文件详解 Nginx(三):负载均衡策略 与 Nginx静态服务器 Nginx(四):Ngi ...
- Nginx server之Nginx作为反向代理服务器
2019独角兽企业重金招聘Python工程师标准>>> 一:Nginx介绍 1.Nginx简介:nginx [engine x]是一个俄罗斯人编写的HTTP和反向代理服务器,另外它也 ...
- nginx 配置详解_Nginx 配置详解
序言 Nginx是lgor Sysoev为俄罗斯访问量第二的http://rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HT ...
- Nginx配置详解/代理服务的配置说明
Nginx配置详解 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作 ...
- 【Nginx系列】Nginx配置使用与工作原理
热门系列: [Linux系列]Linux实践(一):linux常用命令 程序人生,精彩抢先看 目录 1.Nginx介绍 1.1 什么是Nginx? 1.2 Nginx能做什么 1.3 为什么要选择用N ...
- nginx配置与应用
Nginx 初识nginx 介绍Nginx Nginx安装 配置文件 启动Nginx Nginx配置文件 日志格式 网站配置 server配置网站 虚拟化主机 nginx日志 切割日志 nginx模块 ...
- Nginx 配置参数详解
序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...
- 前后端分离nginx配置,同时解决跨域问题
背景 现在,web开发的前后端分离技术越来越火爆,由于最近的公司官网使用了前后端分离的方案,这里就来记录一下前后端分离的项目部署.这里我们使用的前端框架是Vue.js,后台使用Laravel7提供数据 ...
最新文章
- flask 常见关系模板代码
- RTC是DS1339,驱动采用的是rtc-ds1307.c
- hdu 6851 Vacation(思维+贪心)
- 自己搭建的邮件系统不能发往gmail、hotmail等问题解决
- 有法院被执行人记录还能贷款吗?
- MySQL中left join、right join与inner join的区别
- 七、MySQL DDL数据定义语言 学习笔记(库和表的创建、修改、删除详解 + 强化复习)
- mysql数据库支持emoji表情的详解
- python 机器学习_基于 Python 语言的机器学习工具Sklearn
- SQL 数据库 函数
- 【优化算法】Tent混沌映射的粒子群算法【含Matlab源码 940期】
- Axure RP9教程 入门讲解
- 爱普生R230打印机两个红灯交替闪怎么回事?
- log4j-XML文件配置
- QSV格式转换MP4应该使用哪个视频格式转换器
- C#实现时间戳与标准时间的互转学习通http://www.bdgxy.com/
- 材料模拟计算超算云平台上线,发布会推出两项优惠政策
- 最快下载微软必应Bing搜索背景图片的方法
- JS内存问题:栈和堆
- 前端逼死强迫症之css续集
热门文章
- Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
- 为什么我做数据库类的程序要用代码生成器,而且是前前后后,反反复复 [转]...
- 如何在手机上安装Ubuntu Touch 13.10
- linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )...
- 有关linux用户和用户组管理的知识详解
- UIView的一些基本方法 init、loadView、viewDidLoad、viewDidUnload、dealloc
- Magento 页面中加入CMS static block
- C++ concurrency::task实现异步编程(Windows)
- 搜索回溯——N皇后(hdu2553)
- LeetCode 581. Shortest Unsorted Continuous Subarray