團隊中的一個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;
}
}