需求:公司业务服务器使用的是阿里云,要求内网(仅有内网IP)所有流量走网关服务器(有外网IP及内网IP),内网服务器需要调用一个公网上的第三方邮件站点。在参考了https://www.linuxba.com/archives/7931的配置方法并亲自请教博主后得到了使用stream模块解决该问题:
1.重新编译NGINX,添加stream模块(使用动态模块亦可),具体如何重新编译以及该模块的作用我就不在这里班门弄斧了,请参考官网或其它教程。
2.编译后在NGINX的配置文件中添加配置
在nginx.conf的末尾添加
stream {
stream/*.conf
}
在nginx.conf的同级目录创建stream目录并进入stream目录添加mail.conf并配置指令
upstream smtphm.qiye.163.com { #该域名为反代的虚拟域名,应该和代码里调用的域名一样。
server smtphm.qiye.163.com:994; #第三方邮件服务器的域名及端口
}
server {
listen 994; #监听端口,最好与第三方邮件服务器的端口相同,是否可以不同未实验,有兴趣的可以试试。
proxy_connect_timeout 60s; #根据实际需要填写大小
proxy_timeout 60s; #根据实际需要填写大小
proxy_pass smtphm.qiye.163.com;
}
重新加载配置文件使其生效,执行nginx -s reload
在内网需要访问该网关服务器的服务器上写hosts指向网关服务器(写内网IP即可)
总结:
1.朋友给我推荐了另外一篇教程,我发现与我现在使用的方法一样,链接是 供各位学习交流。
2.这问题使用nginx的邮件模块也可解决,但是我看了邮件模块的使用方法根本没看懂,所以没使用该方法。有兴趣的可以参考这两篇教程https://www.jianshu.com/p/b27e76ba6ac8
3.简单来说我这需求就是解决阿里云内网无法访问外网的问题,还有如下几种解决方法:一、使用阿里云的NAT网关技术也可以解决,只是费用较高。二、自己写防火墙规则,参考教程
4.这里推荐一个nginx各种代理的教程 https://blog.lyz810.com/article/2016/10/nginx-proxy-module-guide/
未经验证的方法及转载别人的经验会在博客里做特别说明,欢迎各位互相学习交流,发现有错误或疑问请留言。