小计 -- nginx reverse proxy 解决公司专线没备案IP被封80和443端口的问题

最近,公司搬迁,专线更随着更换了。没有想到,新申请的专线是要备案的,不然专线IP对外的80和443是被封掉的。但备案基本上是要一周时间,这样,公司内部的exchange和OA服务器因为没有80和443端口而无法在公司外使用。解决方案是使用nginx反向代理。

The solution

  1. 在Firewall上设置端口映射,把专线对外IP的TCP 1443 map到 443,TCP 1080 map 到 80.
  2. 在Ucloud云主机上安装nginx ,reverse proxy 到公司专线的TCP 1443和 1080
  3. 在DNS上更改相应的A记录,指向新的nginx reverse proxy完成配置

Nginx reverse proxy configration

server {
       listen       80;
       server_name mail.corp.example.com autodiscover.corp.example.com;
       return 301 https://$host$request_uri;

}

server {
        listen   443 ssl;
        listen   [::]:443 ssl;
        client_max_body_size 0;
        ssl_certificate /etc/nginx/conf.d/ssl/mail.corp.example.com.crt;
        ssl_certificate_key /etc/nginx/conf.d/ssl/mail.corp.example.com.key;
        server_name mail.corp.example.com cas.corp.example.com autodiscover.corp.example.com;
        ssl_session_timeout  10m;
        access_log  /opt/log/nginx/mail.corp.example.com.log  main;
        error_log  /opt/log/nginx/mail.corp.example.com.error.log;
        open_log_file_cache max=100;
        location / {
            proxy_ssl_server_name on;
            proxy_ssl_session_reuse off;
            proxy_ssl_verify off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $http_host;
            proxy_set_header cookie $http_cookie;
            proxy_set_header Proxy-Connection "";
            proxy_http_version 1.1;
            proxy_pass https://xxx.xxx.xxx.xxx:2443;
        }
}

Relevant matters needing attentions

  1. proxy_ssl_server_name on; 要记得加上,不然主机头会丢失,如果后端IIS有多个站点的话,会出404.
  2. 上面的nginx配置,用手机访问没有问题,但如果客户端是outlook2013或以前的版本,那是无法认证通过的。因为 nginx 不收费版本不支持 RPC over http.但是haproxy支持 RPC over http, 大家可以用haproxy来实现。因为我的这台云主机上本来就启着nginx,无法再运行haproxy,
    相关链接
坚持原创技术分享,您的支持将鼓励我继续创作!