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; 

    } 

}  

相關文章
相關標籤/搜索