×ðÁú¿­Ê±¹ÙÍøµÇ¼

NginxÔõÑùʵÏÖWebSocketÉèÖÃ

Nginx×÷Ϊһ¿î¸ßÐÔÄܵÄWebЧÀÍÆ÷ºÍ·´ÏòÊðÀíЧÀÍÆ÷ £¬ÔÚ´¦ÀíWebSocketÇëÇó·½ÃæÒ²ÓÐÆäÆæÒìµÄÉèÖ÷½·¨¡£WebSocket £¬ÊÇÒ»ÖÖ»ùÓÚTCPµÄЭÒé £¬WebSocketÅþÁ¬µÄ½¨ÉèÐèÒª¾­ÓÉÈý´ÎÎÕÊÖ £¬ÎÕÊÖÍê³Éºó £¬¿Í»§¶ËºÍЧÀÍÆ÷Ö®¼ä¿ÉÒÔ¾ÙÐÐË«ÏòͨѶ¡£ÏÂÃæ £¬½«ÏÈÈÝÔõÑùÔÚNginxÖÐʵÏÖWebSocketµÄÉèÖà £¬²¢¸½ÉÏÏêϸµÄ´úÂëʾÀý¡£

Ê×ÏÈ £¬ÐèÒªÔÚNginxµÄÉèÖÃÎļþÖÐÔöÌíWebSocketµÄÏà¹ØÉèÖá£

http {
  ...
  upstream websocket {
    server localhost:9001;
  }
  ...
  map $http_upgrade $connection_upgrade {
      default upgrade;
      ''      close;
  }
  ...
  server {
      listen 80;
      server_name example.com;

      location / {
          proxy_pass http://websocket;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection $connection_upgrade;
          proxy_set_header Host $host;
      }
      ...
  }
  ...
}

µÇ¼ºó¸´ÖÆ

ÉÏÊöÉèÖÃÖÐ £¬ÎÒÃÇÔöÌíÁËÒ»¸öÃûΪ¡°websocket¡±µÄupstream £¬ÓÃÓÚÖ¸¶¨WebSocketµÄÄ¿µÄЧÀÍÆ÷µØµãºÍ¶Ë¿Ú¡£Í¬Ê± £¬Ê¹ÓÃÁËmapÖ¸Áî £¬½«$http_upgrade£¨¿Í»§¶ËÉý¼¶ÇëÇóÍ·£©Óë$connection_upgrade£¨nginxµÄÉý¼¶ÇëÇóÍ·£©¾ÙÐÐÁËÓ³Éä¡£ÕâÑù £¬ÔÚ¿Í»§¶ËµÄÉý¼¶ÇëÇóÍ·ÖдøÉÏ¡°Upgrade¡±ºÍ¡°Connection¡±ÕâÁ½¸ö×ֶΠ£¬¾Í¿ÉÒÔ´¥·¢Nginx½«HTTPЭÒéÉý¼¶ÖÁWebSocketЭÒé £¬´Ó¶øʵÏÖË«ÏòͨѶ¡£

ÔÚserver¿éÖÐ £¬ÎÒÃÇʹÓÃÁËproxy_passÖ¸Áî £¬½«ËùÓÐWebSocketÇëÇó¶¼ÊðÀíµ½websocketÕâ¸öupstreamÖÐ £¬²¢ÉèÖÃÁËЭÒé°æ±¾ºÍÇëÇóÍ·ÐÅÏ¢¡£ÐèҪעÖصÄÊÇ £¬ÔÚNginxÖоÙÐÐWebSocketµÄÊðÀíʱ £¬±ØÐ轫¡°Upgrade¡±ºÍ¡°Connection¡±ÇëÇóͷһͬ·¢Ë͸øÄ¿µÄЧÀÍÆ÷ £¬²»È»ÅþÁ¬½«»á±»¹Ø±Õ £¬Òò´ËÕâÁ½¸öÇëÇóÍ·ÐÅÏ¢±ØÐèͨ¹ýproxy_set_headerÖ¸ÁîÊÖ¶¯Ìí¼Ó¡£

ÁíÍâ £¬ÐèҪעÖصÄÊÇ £¬ÔÚÉÏÊöÉèÖÃÖÐ £¬ÎÒÃǽö½ö¼àÌýÁËHTTP£¨80£©¶Ë¿Ú £¬ÈôÊÇÐèÒªÔÚHTTPSÏÂÉèÖÃWebSocket £¬ÐèÒªÔÚserver¿éÖÐÔöÌíÒÔÏÂÖ¸Á

listen 443 ssl;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

µÇ¼ºó¸´ÖÆ

ÒÔÉÏÖ¸ÁîÓÃÓÚ¼àÌýHTTPS£¨443£©¶Ë¿Ú £¬²¢Ö¸¶¨Ö¤ÊéºÍÃÜÔ¿ÎļþµÄ·¾¶ºÍÃû³Æ¡£

ÏÂÃæÊÇÒ»¸öÏêϸµÄWebSocketЧÀÍÆ÷´úÂëʾÀý £¬Ê¹ÓÃNode.jsʵÏÖ£º

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 9001 });

server.on('connection', (socket, req) => {
  console.log('Client connected');

  socket.on('message', (message) => {
    console.log(`Received message: ${message}`);
    socket.send(`Your message: ${message}`);
  });

  socket.on('close', () => {
    console.log('Client disconnected');
  });
});

µÇ¼ºó¸´ÖÆ

¸Ã´úÂëÖÐ £¬ÎÒÃǽ¨ÉèÁËÒ»¸öWebSocketЧÀÍÆ÷ £¬²¢¼àÌýÁË9001¶Ë¿Ú¡£ÔÚÅþÁ¬½¨Éèºó £¬ÎÒÃÇÊä³ö¡°Client connected¡±µÄÐÅÏ¢ £¬²¢ÔÚÎüÊÕµ½¿Í»§¶ËµÄÐÂÎźó £¬½«¸ÃÐÂÎÅ·µ»Ø¸ø¿Í»§¶Ë £¬È»ºó¼àÌý¹Ø±ÕÊÂÎñ £¬²¢Êä³ö¡°Client disconnected¡±µÄÐÅÏ¢¡£

ͨ¹ýÒÔÉϵĴúÂëºÍÉèÖÃʾÀý £¬ÎÒÃÇ¿ÉÒÔÔÚNginxÖÐʵÏÖWebSocketЭÒéµÄÊðÀíºÍͨѶÊÂÇé¡£ÐèҪעÖصÄÊÇ £¬WebSocketЭÒéµÄʹÓÃÕÕ¾ÉÓÐÒ»¶¨µÄÏÞÖÆ £¬Ïêϸ¶øÑÔ £¬WebSocketÅþÁ¬µÄ½¨ÉèÀú³ÌÓëHTTP/HTTPSЭÒéÀàËÆ £¬¿ÉÊÇ £¬Ò»µ©ÅþÁ¬½¨ÉèÀֳɺó £¬Ë«·½Ö®¼äµÄͨѶÍêÈ«ÒÀÀµÓÚWebSocketЭÒé £¬¶ø²»ÔÙÒÀÀµÓÚHTTP/HTTPSЭÒé¡£Òò´Ë £¬ÔÚʹÓÃWebSocketЭÒéʱ £¬ÐèÒª»Ø±ÜһЩͨÀýµÄWeb¿ª·¢ÏÞÖÆ £¬Í¬Ê± £¬Ò²Òª×¢ÖØÇå¾²ÐÔºÍÎȹÌÐԵȷ½ÃæµÄÎÊÌâ¡£

ÒÔÉϾÍÊÇNginxÔõÑùʵÏÖWebSocketÉèÖõÄÏêϸÄÚÈÝ £¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡

ÃâÔð˵Ã÷£ºÒÔÉÏչʾÄÚÈÝȪԴÓÚÏàÖúýÌå¡¢ÆóÒµ»ú¹¹¡¢ÍøÓÑÌṩ»òÍøÂçÍøÂçÕûÀí £¬°æȨÕùÒéÓë±¾Õ¾ÎÞ¹Ø £¬ÎÄÕÂÉæ¼°¿´·¨Óë¿´·¨²»´ú±í×ðÁú¿­Ê±¹ÙÍøµÇ¼ÂËÓÍ»úÍø¹Ù·½Ì¬¶È £¬Çë¶ÁÕß½ö×ö²Î¿¼¡£±¾ÎĽӴýתÔØ £¬×ªÔØÇë˵Ã÷À´ÓÉ¡£ÈôÄúÒÔΪ±¾ÎÄÇÖÕ¼ÁËÄúµÄ°æȨÐÅÏ¢ £¬»òÄú·¢Ã÷¸ÃÄÚÈÝÓÐÈκÎÉæ¼°ÓÐÎ¥¹«µÂ¡¢Ã°·¸Ö´·¨µÈÎ¥·¨ÐÅÏ¢ £¬ÇëÄúÁ¬Ã¦ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼ʵʱÐÞÕý»òɾ³ý¡£

Ïà¹ØÐÂÎÅ

ÁªÏµ×ðÁú¿­Ê±¹ÙÍøµÇ¼

18523999891

¿É΢ÐÅÔÚÏß×Éѯ

ÊÂÇéʱ¼ä£ºÖÜÒ»ÖÁÖÜÎå £¬9:30-18:30 £¬½ÚãåÈÕÐÝÏ¢

QR code
ÍøÕ¾µØͼ