Web、WCF和WS通過Nginx共享80端口


團隊中的一個Web項目面對的用戶網絡環境多是在嚴格的防火牆安全條件下,通常只開放一些標准的端口如80,21等。

上線初期,因忽略了這個問題,除了Web應用是以80端口提供訪問外,WCF和WS是以其他端口進行對外訪問的,導致多數用戶無法完整的使用系統的全部功能,如涉及直接訪問WCF和WS服務的功能。

同時加上分配給這個項目外網IP地址資源只有一個,因此對外的直接服務除了使用80端口,其他服務當時就直接采用了其他端口。

為了解決這個問題,在Web服務器上(80端口),采用Nginx解析Web Request中的請求特征,把針對Web、WCF服務和WS的請求分別轉發到內網對應的物理服務器上。

解析的規則如下:

規則一:默認的80端口請求,轉發到Web服務上。

規則二:在規則一的基礎上,如果請求URI中包含”.svc/”格式的字符串,轉發到WCF服務器上。

規則三:如果Request Headers中包含Upgrade信息,且值為websocket的話,轉發到WebSocket服務器上。

Nginx配置文件內容如下:

upstream wcfServer { 

    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; 

    } 

}  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM