欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

配置Nginx反向代理Exchange 2007上的OWA

程序员文章站 2024-01-17 22:41:16
...

最后刚刚完成 Ex change 项目正式上线工作,考虑到一些用户的特殊要求,打算将 OWA 发布到公网,考虑到安全因素,不采用端口映射方式,另外也因为一些其它原因,没有采用微软建议方式,采用 ISA 发布。(网上资料很多,已有很多成熟的方案,如无成本等方面原

最后刚刚完成Exchange项目正式上线工作,考虑到一些用户的特殊要求,打算将OWA发布到公网,考虑到安全因素,不采用端口映射方式,另外也因为一些其它原因,没有采用微软建议方式,采用ISA发布。(网上资料很多,已有很多成熟的方案,如无成本等方面原因,建议采用,主要是方案很成熟,省事。^_^

上面提了这么多要求,但是工作还得做,想了下,本质上就是让用户能在公网上能直接访问到OWA,但又不是直接访问到,所以想到这,就是加个中间人角色,让它帮忙把公网用户的要求传给内网服务器,说白了其实就是一反向代理

应用反向代理的软件有很多,squid,nginx等等大大有名,因为nginx现在很流行,且此软件占用资源少,等优点,就在自己喜欢的gentoo上并应用了。

下面给出此代理的部分网络架构图,大家看了就明白了是怎么回事了。

配置Nginx反向代理Exchange 2007上的OWA

下面就正式开始配置工作

Exchange Server Name: msg114.sunwill.cn

OWA Internat Name: outlook.sunwill.cn

一、系统及nginx安装 ~略,这个很简单的,大家都知道的

二、在Proxy上生成ssl证书,这一步很重要,当然,如果已经有申请到证书,就直接拷过来用就行,没必要用自生成的证书。

# mkdir /etc/nginx/ssl.crt

# mkdir /etc/nginx/ssl.key

Make sure to:

- Copy your certificate file to: /etc/nginx/ssl.crt/

- Copy your certificate key file to: /etc/nginx/ssl.key/

证书生成过程,大家可以在网查到,网上也有很多教程,只要生成了证书,放到上面两个目录中就行,nginx进行代理转发时用得到

三、就是配置OWA反向代理了,配置文件如下所示

edward@jt-it001:~$vim /etc/nginx/conf.d/owa.conf

server {
listen 80;
server_name outlook.sunwill.cn;

# Redirect any HTTP request to HTTPS
rewrite ^(.*) https://outlook.sunwill.cn$1 permanent;
error_log /var/log/nginx/outlook.sunwill.cn-owa-error.log;
access_log /var/log/nginx/outlook.sunwill.cn-owa-access.log;
}

server {
listen 443;
server_name outlook.sunwill.cn;

auth_basic "sunwill";
auth_basic_user_file nginx_passwd;

# Redirect from "/" to "/owa" by default
rewrite ^/$ https://outlook.sunwill.cn/owa permanent;

# Enable SSL
ssl on;
ssl_certificate /etc/nginx/ssl.crt/outlook.sunwill.cn.crt;
ssl_certificate_key /etc/nginx/ssl.key/outlook.sunwill.cn.key;
ssl_session_timeout 5m;

# Set global proxy settings
proxy_read_timeout 360;

proxy_pass_header Date;
proxy_pass_header Server;

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

location /owa { proxy_pass https://msg114.sunwill.cn/owa; }
location /exchange { proxy_pass https://msg114.sunwill.cn/exchange; }
location /exchweb { proxy_pass https://msg114.sunwill.cn/exchweb; }
location /public { proxy_pass https://msg114.sunwill.cn/public; }
location /Microsoft-Server-ActiveSync { proxy_pass https://msg114.sunwill.cn/Microsoft-Server-ActiveSync; }

error_log /var/log/nginx/outlook.sunwill.cn-owa-ssl-error.log;
access_log /var/log/nginx/outlook.sunwill.cn-owa-ssl-access.log;
}

最后一点,因为机器是放在DMZ中,所以有可能,其实也没必要让Proxy访问内网的DNS服务器,直接配置系统的/etc/hosts文件即可。让Proxy把资源反向代理到正确的服务器。

echo "192.168.103.200 msg114.sunwill.cn msg114" >> /etc/hosts

最后一些说明,

1.公网域名outlook.sunwill.cn指向到Proxy的公网地址

2.安全方面的一些考量,老生常谈了,服务器开启防火墙,只对外开户指定端口,服务器只运行需要的服务

3.自建证书是因为nginx有启用ssl,所以需要,可以直接用linux上自建的证书,此证书不一定要与exchange服务器上的证书一样,当然如果有申请正式的证书,肯定是用这个了

4.host记录一定要有,当然你愿意在DMZ区的防火墙上开户至内网的DNS查询,也可以,只是降低了相关安全性而已。