Web、WCF和WS经过Nginx共享80端口

团队中的一个Web项目面对的用户网络环境可能是在严格的防火墙安全条件下,一般只开放一些标准的端口如80,21等。web

上线初期,因忽略了这个问题,除了Web应用是以80端口提供访问外,WCF和WS是以其余端口进行对外访问的,致使多数用户没法完整的使用系统的所有功能,如涉及直接访问WCF和WS服务的功能。安全

同时加上分配给这个项目外网IP地址资源只有一个,所以对外的直接服务除了使用80端口,其余服务当时就直接采用了其余端口。服务器

为了解决这个问题,在Web服务器上(80端口),采用Nginx解析Web Request中的请求特征,把针对Web、WCF服务和WS的请求分别转发到内网对应的物理服务器上。websocket

解析的规则以下:网络

规则一:默认的80端口请求,转发到Web服务上。socket

规则二:在规则一的基础上,若是请求URI中包含”.svc/”格式的字符串,转发到WCF服务器上。server

规则三:若是Request Headers中包含Upgrade信息,且值为websocket的话,转发到WebSocket服务器上。资源

Nginx配置文件内容以下:字符串

upstream wcfServer { io

    server 10.0.0.111:8089;

}

 

upstream webServer { 

    server 10.0.0.118:8000;

}

 

upstream socketServer { 

    server 10.0.0.112:7181;

}

 

server { 

    listen 80; 

    location / { 

       

                proxy_pass http:// webServer ;

                if ( $request_uri ~* \.(svc)/~* )

        {

                        proxy_pass http:// wcfServer ; 

                 }

        if ( $http_upgrade ~* websocket$ )

        {

                        proxy_pass http:// socketServer ; 

                 }

        proxy_http_version 1.1; 

        proxy_set_header Upgrade $http_upgrade; 

        proxy_set_header Connection "Upgrade";

                proxy_send_timeout 600s;

                client_max_body_size 1024M;

                client_body_buffer_size 4096k; 

    } 

}  

相关文章
相关标签/搜索