Nginx£º¸ßÇåÊÓÆµÐÔÄܵĻùʯ£¬²»Ö¹ÓÚ¾²Ì¬Îļþ·þÎñ
ÔÚÊý×ÖÄÚÈݱ¬Õ¨µÄʱ´ú£¬ÊÓÆµÒÑÈ»³ÉΪÐÅÏ¢Èö²¥ºÍÓéÀÖÏûºÄµÄÖ÷Á÷¡£Åãͬ¶øÀ´µÄÊǶÔÊÓÆµ´«ÊäÐÔÄܵÄÑÏËàÌôÕ½£º¿¨¶Ù¡¢»º³å¡¢¼ÓÔØ»ºÂý£¬ÕâЩ¶¼ÊÇÓû§ÌåÑéµÄ¡°É±ÊÖ¡±¡£ÏëҪΪÓû§ÌṩÈçË¿°ã˳»¬µÄ¸ßÇåÊÓÆµÌåÑ飬ѡÔñÒ»¸öǿʢµÄ·þÎñÆ÷Èí¼þÖÁ¹ØÖ÷Òª¡£ÔÚÖÚ¶àÑ¡ÔñÖУ¬NginxÒÔÆäÇáÁ¿¼¶¡¢¸ß²¢·¢¡¢µÍ×ÊÔ´µÄÌØÕ÷£¬ÍÑÓ±¶ø³ö£¬³ÉΪÖÚ¶àÊÓÆµ·þÎñÌṩÉ̺ÍÄÚÈÝ·Ö·¢ÍøÂçµÄ¡°Ê×Ñ¡¡±¡£
1.NginxµÄ½¹µãÓÅÊÆ£ºÎªºÎËüÊÇÊÓÆµÐÔÄܵÄÍõÕߣ¿
NginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµÁìÓò´ó·ÅÒì²Ê£¬²¢?·ÇÎÞÒâ¡£ËüËù¾ß±¸µÄ¼¸´ó½¹µãÓÅÊÆ£¬×é³ÉÁËÆäǿʢµÄÐÔÄÜ»ùʯ£º
ÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕÄ£×Ó£ºÕâÊÇNginx×îΪÈ˸èË̵ÄÌØÕ÷Ö®Ò»¡£Óë¹Å°åµÄ¶àÀú³Ì»ò¶àÏß³ÌÄ£×Ó²î±ð£¬Nginx½ÓÄÉÊÂÎñÇý¶¯ºÍÒì²½·ÇÛÕ±ÕI/OÄ£×Ó¡£ÕâÒâζ×Å£¬ÔÚÒ»¸öÖ÷Àú³ÌºÍ¶à¸öÊÂÇéÀú³ÌÖУ¬Nginx¿ÉÒÔͨ¹ýÉÙÁ¿µÄÏ̴߳¦Öóͷ£´ó×ڵIJ¢?·¢ÅþÁ¬¡£
µ±Ò»¸öÅþÁ¬ÔÚÆÚ´ýI/O²Ù×÷£¨Èç¶ÁÈ¡Îļþ»òÍøÂç´«Ê䣩ʱ£¬Ëü²»»áÛÕ±ÕÕû¸öÀú³Ì£¬¶øÊǽ«¿ØÖÆÈ¨½»»¹¸øÊÂÎñÑ»·£¬ÐÐÖ¹ÖÃÆäËûÍ£µ±µÄÊÂÎñ¡£ÕâÖÖÉè¼Æ¼«´óµØ?Ìá¸ßÁËNginxµÄ²¢·¢´¦Öóͷ£ÄÜÁ¦ºÍ×ÊԴʹÓÃÂÊ£¬¹ØÓÚÐèҪͬʱ´¦Öóͷ£´ó×ÚÊÓÆµÁ÷µÄ³¡¾°À´Ëµ£¬ÓÅÊÆÓÈΪÏÔ×Å¡£
ÏëÏóһϣ¬Ò»¸öNginxÊÂÇéÀú³Ì¾ÍÏñÒ»¸ö¸ßЧµÄµ÷ÀíÔ±£¬Í¬Ê±´¦Öóͷ£×ųÉǧÉÏÍò¸öÊÓÆµ²¥·ÅÇëÇ󣬶ø²»»áÓÉÓÚÈκÎÒ»¸öÇëÇóµÄÉÔÂý¶ø¡°ÊÖæ½ÅÂÒ¡±¡£ÄÚ´æÏûºÄµÍ£¬Ð§ÂʸߣºÏà±ÈÓÚApacheµÈ·þÎñÆ÷£¬NginxµÄÄÚ´æ?Õ¼ÓÃͨ³£ÒªµÍµÃ¶à¡£ÕâµÃÒæÓÚÆä¾«Çɵļܹ¹Éè¼ÆºÍ¶ÔCÓïÑԵľ«Õ¿ÔËÓá£
µÍÄÚ´æÏûºÄÒâζ×ÅÔÚÏàͬµÄÓ²¼þ×ÊÔ´Ï£¬Nginx¿ÉÒÔÖ§³Ö¸ü¶àµÄ²¢·¢ÅþÁ¬£¬´Ó¶ø½µµÍ·þÎñÆ÷±¾Ç®£¬Ìá¸ßÕûÌåµÄÐԼ۱ȡ£¹ØÓÚÐèÒª°²ÅÅ´ó×Ú·þÎñÆ÷ÒÔÖ§³ÖÖØ´óÓû§Á¿µÄÊÓÆµÆ½Ì¨¶øÑÔ£¬ÕâÒ»µãÖÁ¹ØÖ÷Òª¡£Ç¿Ê¢µÄ¾²Ì¬Îļþ´¦Öóͷ£ÄÜÁ¦£º¾ø´ó´ó¶¼ÊÓÆµÄÚÈÝÔÚ´«Êäǰ¶¼»á±»·â×°³ÉÖÖÖÖÃûÌõÄÊÓÆµÎļþ£¨ÈçMP4,FLV,TSµÈ£©£¬ÕâЩ¶¼¿ÉÒÔ±»?ÊÓΪ¾²Ì¬Îļþ¡£
NginxÔÚ´¦Öóͷ£¾²Ì¬ÎļþµÄ?ËÙÂÊÉÏÓÐמªÈ˵ÄÌåÏÖ£¬ÆäÓÅ»¯µÄÎļþI/O²Ù×÷ºÍ¸ßЧµÄ»º´æ»úÖÆ£¬Äܹ»¿ìËÙ½«ÊÓÆµÎļþ´Ó´ÅÅ̶ÁÈ¡²¢·¢Ë͸ø¿Í»§¶Ë£¬´ó´óËõ¶ÌÁËÊÓÆµµÄ³õʼ¼ÓÔØÊ±¼ä¡£¸ß¶È¿ÉÉèÖÃÐÔºÍÄ£¿é»¯£ºNginxÓµÓи»ºñÇҸ߶ȿÉÉèÖõÄÄ£¿éϵͳ¡£ÕâÒâζ×ÅÎÒÃÇ¿ÉÒÔÆ¾Ö¤ÏêϸµÄÊÓÆµ´«ÊäÐèÇó£¬ÎÞаµØÑ¡ÔñºÍÆôÓÃËùÐèµÄÄ£¿é¡£
ÀýÈ磬ngx_http_mp4_moduleÄܹ»ÓÅ»¯MP4ÎļþµÄÁ÷ʽ´«Ê䣬ngx_http_flv_moduleÄܹ»´¦Öóͷ£FLVÃûÌõÄÊÓÆµ£¬¶øngx_http_hls_moduleºÍngx_http_dash_moduleÔòÄܹ»ÎªHLSºÍDASHµÈ×Ô˳Ӧ±ÈÌØÂÊÁ÷ýÌåÐÒéÌṩ֧³Ö¡£
ÕâÖÖÄ£¿é»¯Éè¼ÆÊ¹µÃNginxÄܹ»¡°Á¿Éí¶¨ÖÆ¡±£¬ÍêÉÆÆõºÏÖÖÖÖÖØ´óµÄÊÓÆµ³¡¾°¡£¾«²ÊµÄ·´Ïò´úÀíºÍ¸ºÔØÆ½ºâÄÜÁ¦£ºÏÖ´ú?ÊÓÆµÆ½Ì¨Í¨³£Óɶà¸öºó¶Ë·þÎñÆ÷Ìṩ·þÎñ£¬Nginx×÷Ϊ·´Ïò´úÀí£¬Äܹ»ÓÐÓõØÎ´À´×Ô¿Í»§¶ËµÄÇëÇó·Ö·¢µ½ÕâЩºó¶Ë·þÎñÆ÷¡£ÆäÄÚÖõĶàÖÖ¸ºÔØÆ½ºâËã·¨£¨ÈçÂÖѯ¡¢¼ÓȨÂÖѯ¡¢IP¹þÏ£µÈ£©Äܹ»È·±£Á÷Á¿µÄÔȳƷÖÅÉ£¬×èÖ¹µ¥µã¹ÊÕÏ£¬²¢×î´óÏ޶ȵØÊ¹Óúó¶Ë·þÎñÆ÷µÄ×ÊÔ´£¬´Ó¶øÕûÌåÌáÉýÊÓÆµ·þÎñµÄ¿ÉÓÃÐÔºÍÎȹÌÐÔ¡£
NginxµÄǿʢÐÔÄܲ¢·Ç½ö½öÌåÏÖÔÚÆä»ù´¡¼Ü¹¹ÉÏ£¬¸üÔÚÓÚÆä¶ÔÊÓÆµ´«ÊäÒªº¦ÊÖÒÕµÄÉî¶ÈÖ§³ÖºÍÓÅ»¯£º
HTTP/2ºÍHTTP/3µÄ¸³ÄÜ£ºËæ×ÅÍøÂçÐÒéµÄÒ»Ö±Ñݽø£¬HTTP/2ºÍHTTP/3´øÀ´ÁËÏÔÖøµÄÐÔÄÜÌáÉý¡£HTTP/2ÒýÈëÁ˶à·¸´Óã¨Multiplexing£©ºÍÍ·²¿Ñ¹Ëõ£¨HeaderCompression£©µÈÌØÕ÷£¬Äܹ»ÔÚͳһTCPÅþÁ¬ÉÏͬʱ´«Êä¶à¸öÇëÇóºÍÏìÓ¦£¬´ó´óïÔÌÁËÍøÂçÍù·µ´Î?Êý£¬ÌáÉýÁËÊÓÆµ¼ÓÔØËÙÂÊ¡£
HTTP/3¸üÊÇ»ùÓÚQUICÐÒ飬½øÒ»²½ïÔÌÁËÅþÁ¬½¨Éèʱ¼ä£¬²¢¸ÄÉÆÁËÔÚ²»?ÎȹÌÍøÂçÇéÐÎϵĴ«ÊäÐÔÄÜ¡£Nginx¶ÔÕâЩÐÂÐÒéÌṩÁËǿʢµÄÖ§³Ö£¬Í¨¹ý¼òÆÓµÄÉèÖü´¿ÉÆôÓã¬ÎªÊÓÆµ´«Êä´øÀ´Öʵı¼ÌÚ¡£Ç¿Ê¢µÄ»º´æ»úÖÆ£ºÊÓÆµÄÚÈݵĻº´æÖÁ¹ØÖ÷Òª£¬ÓÈÆäÊÇÔÚCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩ÇéÐÎÖС£
NginxÌṩÁËÎÞаÇÒ¸ßЧµÄ»º´æÕ½ÂÔ¡£Í¨¹ýproxy_cacheÖ¸Á¿ÉÒÔ½«¶¯Ì¬ÌìÉúµÄÊÓÆµÁ÷»òƵÈÔ»á¼ûµÄÊÓÆµÎļþ»º±£´æNginx·þÎñÆ÷ÉÏ¡£µ±Óû§ÔÙ´ÎÇëÇóÏàͬÄÚÈÝʱ£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬ÎÞÐè»á¼ûºó¶Ë·þÎñÆ÷£¬´Ó¶øÏÔÖø½µµÍÑÓ³Ù£¬½ÚÔ¼´ø¿í£¬²¢¼õÇáºó¶Ë·þÎñÆ÷µÄѹÁ¦¡£
Õâ¹ØÓÚÖ±²¥ºÍµã²¥?³¡¾°¶¼¼«ÎªÖ÷Òª¡£Á㿽±´?£¨Zero-Copy£©ÊÖÒÕ£ºÔÚLinuxÄÚºËÖУ¬Nginx¿ÉÒÔʹÓÃsendfile()ϵͳŲÓÃʵÏÖÁ㿽±´¡£ÕâÒâζ×Å£¬ÔÚ½«ÊÓÆµÎļþ´Ó´ÅÅÌ·¢Ë͵½ÍøÂçʱ£¬Êý¾ÝÎÞÐè¾ÓÉÓû§¿Õ¼äºÍÄں˿ռäÖ®¼äµÄ¶à´Î¿½±´?£¬Ö±½ÓÔÚÄں˿ռäÍê³É´«Êä¡£
Õ⼫´óµØïÔÌÁËCPUµÄ¿ªÏúºÍÄڴ濽±´µÄ´ÎÊý£¬ÏÔÖøÌá¸ßÁËÎļþ´«?ÊäµÄЧÂÊ£¬ÓÈÆäÊÇÔÚ´óÎļþ´«Ê䳡¾°Ï£¬Ð§¹û¸üΪÏÔÖø¡£Ë³Ó¦ÐÔÁ÷ýÌåÐÒéµÄÖ§³Ö£ºÏÖ´úÊÓÆµ´«?ÊäÆÕ±é½ÓÄÉ˳ӦÐÔ±ÈÌØÂÊÁ÷ýÌ壨AdaptiveBitrateStreaming,ABS£©ÊÖÒÕ£¬ÈçHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)¡£
ÕâЩÊÖÒÕÔÊÐí·þÎñÆ÷ƾ֤¿Í»§¶ËµÄÍøÂç״̬ºÍ×°±¸ÄÜÁ¦£¬¶¯Ì¬µØÍÆËͲî±ðÖÊÁ¿µÄÊÓÆµÁ÷£¬´Ó¶øÌṩ¸üÁ÷ͨµÄԢĿÌåÑé¡£Nginx¿ÉÒÔͨ¹ýÏìÓ¦µÄÄ£¿é£¨Èçngx_http_hls_module»òͨ¹ýµÚÈý·½Ä£¿é£©À´Ö§³ÖÕâЩÐÒ飬¾ÙÐÐÊÓÆµ·Ö¶Î¡¢ÌìÉú²¥·ÅÁÐ±í£¨M3U8/MPD£©£¬²¢ÓÐÓõؽ«ÕâЩýÌåÇÐÆ¬·Ö·¢¸ø¿Í»§¶Ë¡£
ÓÅ»¯workerprocessesºÍworkerconnections£ºworker_processes¿ØÖÆNginxÊÂÇéÀú³ÌµÄÊýÄ¿£¬Í¨³£½¨ÒéÉèÖÃΪCPU½¹µãÊý¡£worker_connections½ç˵ÁËÿ¸öÊÂÇéÀú³Ì¿ÉÒÔ´¦Öóͷ£µÄ×î´ó²¢·¢ÅþÁ¬Êý¡£
ºÏÀíÉèÖÃÕâÁ½¸ö²ÎÊý£¬Äܹ»³ä·ÖʹÓ÷þÎñÆ÷µÄCPUºÍÄÚ´æ×ÊÔ´£¬×î´ó»¯²¢·¢´¦Öóͷ£ÄÜÁ¦¡£ÆôÓÃGzipѹËõ£¨ÉóÉ÷ÓÃÓÚÊÓÆµ£©£ºËäÈ»GzipѹËõÄܹ»¼õС´«ÊäÊý¾ÝÁ¿£¬µ«¹ØÓÚÒѾ¸ß¶ÈѹËõµÄÊÓÆµÎļþ£¨ÈçH.264,H.265±àÂëµÄÊÓÆµ£©£¬GzipѹËõЧ¹û²»¼Ñ£¬·´¶ø»áÔöÌíCPU¼ç¸º¡£
Òò´Ë£¬Í¨³£½¨Òé²î³ØÊÓÆµÎļþ×Ô¼ºÆôÓÃGzipѹËõ£¬¶øÊǶÔÊÓÆµ²¥?·ÅÆ÷Ò³Ãæ¡¢APIÏìÓ¦µÈÎı¾?ÀàÊý¾ÝÆôÓá£ÉèÖÃsendfileon;£ºÆôÓÃsendfileÖ¸Á³ä·ÖʹÓÃÁ㿽±´ÊÖÒÕ£¬Ìá¸ßÎļþ´«ÊäЧÂÊ¡£ÉèÖøßЧµÄ»º´æÕ½ÂÔ£º×ÐϸÍýÏëproxy_cache_pathºÍproxy_cacheÖ¸Áƾ֤ÊÓÆµÄÚÈݵĻá¼ûƵÂʺÍÉúÃüÖÜÆÚ£¬ÉèÖúÏÊʵÄ?»º´æÄ¿Â¼¡¢»º´æÊ±¼ä»ººÍ´æ¼ü¡£
ʹÓÃngx_http_mp4_moduleÓÅ»¯MP4Á÷ʽ´«Ê䣺¹ØÓÚMP4ÃûÌõÄÊÓÆµ£¬¿ÉÒÔͨ¹ýmp4Ö¸Áî¾ÙÐÐÓÅ»¯£¬ÀýÈçmp4_buffer_sizeºÍmp4_max_buffer_size£¬ÒÔ¸ü¸ßЧµØ´¦Öóͷ£MP4ÎļþµÄ?Á÷ʽ´«Ê䣬ïÔÌÑÓ³Ù¡£
Óµ±§HTTP/2£ºÔÚNginxÖÐÆôÓÃHTTP/2£¬¿ÉÒÔÏÔÖø¸ÄÉÆ¶àÎļþÏÂÔØºÍÊÓÆµÁ÷µÄ¼ÓÔØËÙÂÊ¡£Ë¼Á¿Ê¹ÓõÚÈý·½Ä£¿é£º¹ØÓÚ¸ü¸ß¼¶µÄÊÓÆµ´«ÊäÐèÇó£¬ÀýÈçWebRTCÐÅÁî·þÎñÆ÷¡¢RTMPÐÒé´ú?ÀíµÈ£¬¿ÉÒÔ˼Á¿¼¯³É?µÚÈý·½NginxÄ£¿é¡£
ͨ¹ýÉîÈëÃ÷È·NginxµÄµ×²ãÔÀí£¬²¢ÍŽáÉÏÊöʵ²Ù¼¼ÇÉ£¬Äú¿ÉÒÔΪÄúµÄÊÓÆµ·þÎñ¹¹½¨Ò»¸ö¸ßÐÔÄÜ¡¢¸ß¿ÉÓᢵͱ¾Ç®?µÄ´«Êä»ù´¡ÉèÊ©¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«½øÒ»²½Ì½ÌÖNginxÔÚCDN¡¢Ö±²¥ÒÔ¼°WebRTCµÈ¸üÖØ´óµÄÊÓÆµ³¡¾°ÖеÄÓ¦Óã¬ÒÔ¼°ÔõÑùͨÏ꾡Ä廯ÉèÖã¬ÍÚ¾òNginx100%µÄÊÓÆµÐÔÄÜDZÁ¦¡£
NginxÐÔÄÜÁ¶½ðÊõ£ºCDN¡¢Ö±²¥ÓëWebRTCµÄÉî¶ÈÈÚºÏ
ÔÚµÚÒ»²¿·Ö£¬ÎÒÃÇÒѾº»ÊµÁËNginxÔÚÊÓÆµÐÔÄÜ·½ÃæµÄ»ù´¡ÊìϤ¡£Ëü²»µ«½öÊÇÒ»¸öWeb·þÎñÆ÷£¬¸üÊǹ¹½¨¸ßЧÊÓÆµ´«ÊäϵͳµÄǿʢÒýÇæ¡£±¾²¿·Ö½«ÉîÈë̽ÌÖNginxÔõÑùÔÚCDN¡¢ÊµÊ±Ö±²¥?ºÍWebRTCµÈ¸üÖØ´óµÄÊÓÆµ³¡¾°ÖУ¬½øÒ»²½ÊÍ·ÅÆä¡°100%ÊÓÆµÐÔÄÜ¡±µÄDZÁ¦£¬ÎªÓû§´øÀ´ÎÞÓëÂױȵÄԢĿÌåÑé¡£
ÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©µÄ½¹µãÀíÄîÊǽ«ÄÚÈÝ»º±£´æÈ«Çò¸÷µØ±ßÑØ½Úµã£¬µ±Óû§ÇëÇóÄÚÈÝʱ£¬¾Í½ü´Ó±ßÑØ½Úµã»ñÈ¡£¬´Ó¶øËõ¶ÌÑÓ³Ù£¬ÌáÉý»á¼ûËÙÂÊ¡£NginxÔÚCDN¼Ü¹¹ÖÐÊÎÑÝ×ÅÖÁ¹ØÖ÷ÒªµÄ½ÇÉ«£º
±ßÑØ½ÚµãµÄ¸ßÐÔÄÜ»º´æ£ºNginxµÄ?proxy_cache¹¦Ð§Êǹ¹½¨CDN»º´æ²ãµÄÀíÏëÑ¡Ôñ¡£Ã¿¸ö±ßÑØ½Úµã¶¼¿ÉÒÔ°²ÅÅNginx£¬²¢?½«ÆäÉèÖÃΪ¸ßЧµÄ»º´æ·þÎñÆ÷¡£Í¨¹ýºÏÀíµÄ»º´æÕ½ÂÔ£¬NginxÄܹ»½«ÈÈÃÅÊÓÆµÄÚÈÝ£¨ÈçÓ°Ï·¡¢µçÊӾ硢ÈÈÃÅÖ±²¥ÇÐÆ¬£©»º´æÏÂÀ´£¬µ±Óû§»á¼ûʱ£¬Ö±½Ó´Ó×î½üµÄ±ßÑØ½ÚµãÌṩ·þÎñ£¬´ó´óïÔÌÁË»ØÔ´Á÷Á¿£¬½µµÍÁËÑÓ³Ù£¬²¢ÏÔÖøÌáÉýÁ˲¥·ÅµÄÁ÷ͨ¶È¡£
¸ºÔØÆ½ºâÓëÁ÷Á¿µ÷Àí£ºÔÚCDNµÄÖÐÐĽڵã»òÇøÓò»ã¾Ûµã£¬Nginx¿ÉÒÔ×÷ΪǿʢµÄ¸ºÔØÆ½ºâÆ÷£¬½«Óû§µÄÇëÇóÖÇÄܵطַ¢µ½¸÷¸ö±ß??Ôµ½Úµã£¬»òÕßδÀ´×Ô±ßÑØ½ÚµãµÄÁ÷Á¿Æ½ºâµ½Ô´Õ¾¡£Í¨¹ýupstreamÄ£¿éºÍÖÖÖÖ¸ºÔØÆ½ºâËã·¨£¬NginxÄܹ»È·±£Á÷Á¿µÄÓÐÓÃʹÓã¬×èÖ¹½Úµã¹ýÔØ£¬²¢ÊµÏÖ¿ìËٵĹÊÕÏ×ªÒÆ£¬°ü¹Ü·þÎñµÄ¿ÉÓÃÐÔ¡£
ÐÒéÊÊÅäÓëÓÅ»¯£ºÏÖ´úCDNÐèÒªÖ§³ÖÖÖÖÖÊÓÆµ´«ÊäÐÒ飬°üÀ¨HTTP/1.1,HTTP/2,HTTP/3,HLS,DASHµÈ¡£NginxµÄÄ£¿é»¯Éè¼ÆÊ¹ÆäÄܹ»ÎÞаµØÖ§³ÖÕâЩÐÒé¡£ÀýÈ磬ͨ¹ýÉèÖÃlisten443sslhttp2;£¬¼´¿ÉÇáËÉ¿ªÆôHTTPSºÍHTTP/2¡£
Nginx»¹¿ÉÒÔ×÷ΪRTMP/RTSPµÈÁ÷ýÌåÐÒéµÄ´úÀí£¬½«ÕâЩÐÒéµÄÁ÷Á¿×ª»»ÎªHTTPÐÒ飬Àû±ãCDN¾ÙÐÐͳһ¹ÜÀíºÍ·Ö·¢¡£Çå¾²·À»¤£ºCDNÒ²¼ç¸º×ÅÒ»¶¨µÄÇå¾²·À»¤ÔðÈΡ£NginxÌṩÁ˸»ºñµÄÇå¾²¹¦Ð§£¬Èç»á¼û¿ØÖÆ¡¢ÇëÇóÏÞËÙ¡¢SSL/TLS¼ÓÃܵȣ¬¿ÉÒÔÓÐÓõÖÓùDDoS¹¥»÷¡¢±ÜÃâÄÚÈݱ»²»·¨µÁÁ´£¬°ü¹ÜÊÓÆµÄÚÈݵİæÈ¨ºÍÓû§Çå¾²¡£
2.ʵʱֱ²¥µÄ¼ÓËÙÀûÆ÷£ºNginx+RTMP/HLS/DASH
Ö±²¥?³¡¾°¶ÔÑӳٺͲ¢?·¢ÄÜÁ¦µÄÒªÇó¸üΪ¿Á¿Ì¡£Nginxͨ¹ýÓëRTMP¡¢HLSºÍDASHµÈÐÒéµÄÍŽᣬ³ÉΪ¹¹½¨¸ßÐÔÄÜÖ±²¥Æ½Ì¨µÄÓÐÁ¦Ö§³Ö£º
RTMPÐÒéµÄÖ±²¥ÍÆÁ÷ÓëÀÁ÷£ºRTMP(Real-TimeMessagingProtocol)ÊÇÖ±²¥ÁìÓò³£ÓõÄÐÒ飬ÓÃÓÚ´ÓÖ±²¥Ô´ÍÆË͵½·þÎñÆ÷£¬ÒÔ¼°´Ó·þÎñÆ÷·Ö·¢¸ø¹ÛÖÚ¡£ËäÈ»Nginx×Ô¼º²»Ö±½ÓÖ§³ÖRTMP£¬µ«Í¨¹ýÖøÃûµÄµÚÈý·½Ä£¿énginx-rtmp-module£¬Nginx¿ÉÒÔÒ¡ÉíÒ»Äð³É?Ϊһ¸ö¹¦Ð§Ç¿Ê¢µÄRTMP·þÎñÆ÷¡£
Ëü¿ÉÒÔÎüÊÕÀ´×ÔOBS¡¢FFmpegµÈ?ÍÆÁ÷¹¤¾ßµÄÖ±²¥Á÷£¬²¢?½«Æäת·¢¸ø¹ÛÖÚ¡£HLS/DASHµÄ×Ô˳Ӧ±ÈÌØÌ¹Âʲ¥£ºÎªÁËÓ¦¶Ô²î±ðÍøÂçÇéÐÎϵÄÓû§£¬HLSºÍDASHÐÒéÔÚÖ±²¥ÖÐÔ½À´Ô½ÆÕ¼°¡£Nginx¿ÉÒÔͨ¹ýnginx-rtmp-moduleÌṩµÄ¹¦Ð§£¬½«RTMPÁ÷ʵʱµØ×ª»»ÎªHLS»òDASHÃûÌõÄýÌåÇÐÆ¬ºÍ²¥·ÅÁÐ±í¡£
ÕâÑù£¬¹ÛÖھͿÉÒÔÆ¾Ö¤×Ô¼ºµÄÍøÂçÇéÐΣ¬×Ô¶¯Ñ¡Ôñ×îºÏÊʵÄÊÓÆµÖÊÁ¿£¬×èÖ¹¿¨¶Ù¡£NginxµÄ¸ßЧ»º´æºÍ·Ö·¢ÄÜÁ¦£¬Äܹ»È·±£´ó×Ú¹ÛÖÚͬʱԢĿֱ²¥Ê±£¬ÒÀÈ»Äܹ»»ñµÃÁ÷ͨµÄÌåÑé¡£µÍÑÓ³ÙÖ±²¥½â¾ö¼Æ»®£º¹ØÓÚÐèÒª¼«µÍÑÓ³ÙµÄÖ±²¥³¡¾°£¨Èçµç¾ºÈüÊ¡¢ÔÚÏß»¥¶¯£©£¬Nginx»¹¿ÉÒÔÓëÆäËûÊÖÒÕÍŽᣬÀýÈçWebRTC¡£
Nginx¿ÉÒÔ×÷ΪWebRTCýÌå·þÎñÆ÷µÄÐÅÁî·þÎñÆ÷£¬ÐÖú¿Í»§¶Ë½¨ÉèP2P»òSFU(SelectiveForwardingUnit)ÅþÁ¬£¬ÊµÏÖµÍÑÓ³ÙµÄÊÓÆµ´«Êä¡£
3.WebRTCµÄ¸³ÄÜ£ºNginx×÷ΪÐÅÁî·þÎñÆ÷ÓëýÌåת·¢
WebRTC(WebReal-TimeCommunication)ÊÇÒ»Ïî¸ïÃüÐÔµÄÊÖÒÕ£¬ËüÔÊÐíä¯ÀÀÆ÷Ö®¼äÖ±½Ó¾ÙÐÐʵʱÒôÊÓÆµÍ¨Ñ¶£¬¶øÎÞÐè²å¼þ¡£NginxÔÚWebRTC¼Ü¹¹ÖÐͬÑù¿ÉÒÔʩչÖ÷Òª×÷Óãº
ÐÅÁî·þÎñÆ÷£ºWebRTCµÄÅþÁ¬½¨ÉèÀú³ÌÐèÒªÒ»¸öÐÅÁî·þÎñÆ÷À´½»Á÷ÅþÁ¬ÐÅÏ¢£¨ÈçIPµØÖ·¡¢¶Ë¿Ú¡¢Ã½ÌåÄÜÁ¦µÈ£©£¬ÒÔ±ãË«·½Äܹ»Ï໥·¢Ã÷²¢½¨ÉèýÌåͨµÀ¡£Nginx¿ÉÒÔͨ¹ý±àд×Ô½ç˵ģ¿é»òʹÓÃÏÖÓеÄWebSocket/HTTP´úÀí¹¦Ð§£¬ÇáËɴ¸ß²¢·¢µÄWebRTCÐÅÁî·þÎñÆ÷¡£
ËüÄܹ»¸ßЧµØ´¦Öóͷ£´ó×Ú¿Í»§¶ËµÄÐÅÁîÇëÇó£¬ÎªWebRTCÓ¦ÓÃÌṩÎȹ̿ɿ¿µÄÐÅÁî½»»¥¡£Ã½Ìåת·¢£¨SFU£©£ºÔÚ¶à·½¾Û»á³¡¾°Ï£¬ÈôÊÇÿ¸ö¼ÓÈëÕß¶¼Ö±½ÓÓëÆäËûËùÓмÓÈëÕß½¨ÉèP2PÅþÁ¬£¬½«ÏûºÄÖØ´óµÄ´ø¿íºÍÅÌËã×ÊÔ´¡£´Ëʱ£¬SFU¼Ü¹¹¾ÍÏÔµÃÓÈΪÖ÷Òª¡£
SFU·þÎñÆ÷ÎüÊÕÿ¸ö¼ÓÈëÕßµÄýÌåÁ÷£¬È»ºóƾ֤ÐèҪת·¢¸øÆäËû¼ÓÈëÕß¡£ËäÈ»Nginx×Ô¼º²»ÊÇÒ»¸öÍêÕûµÄSFU·þÎñÆ÷£¬µ«¿ÉÒÔͨ¹ý¼¯³É»òÅäºÏµÚÈý·½Ã½Ìå·þÎñÆ÷£¨Èçmediasoup,Janus,KurentoµÈ£©£¬²¢Ê¹ÓÃNginxµÄ·´Ïò´ú?ÀíºÍ¸ºÔØÆ½ºâÄÜÁ¦£¬¹¹½¨Ç¿Ê¢µÄ?SFU¼¯Èº£¬ÊµÏÖ´ó¹æÄ£µÄµÍÑÓ³Ù¶à·½ÊÓÆµÍ¨Ñ¶¡£
TCP/IP²ÎÊýµ÷ÓÅ£ºÕë¶ÔÊÓÆµ´«ÊäµÄÌØµã£¬ÐèÒª¶Ô·þÎñÆ÷µÄTCP/IP²ÎÊý¾ÙÐÐÓÅ»¯£¬ÀýÈçÔöÌíTCPÅþÁ¬ÐÐÁоÞϸ¡¢µ÷½âTCPÖØ´«³¬Ê±Ê±¼ä¡¢ÆôÓÃTCPFastOpenµÈ£¬ÒÔÌá¸ßÔڸ߶ª°üÂÊ»ò¸ßÑÓ³ÙÍøÂçÇéÐÎϵĴ«ÊäЧÂÊ¡£Îļþ¾ä±úÏÞÖÆ£ºNginx´¦Öóͷ£´ó×Ú²¢·¢ÅþÁ¬ÐèÒª×ã¹»µÄÎļþ¾ä±ú¡£
È·±£²Ù×÷ϵͳµÄÎļþ¾ä±úÏÞÖÆ(ulimit-n)×ã¹»¸ß£¬ÒÔ×èÖ¹Òò¾ä±úºÄ¾¡¶øµ¼ÖÂÅþÁ¬Ê§°Ü¡£SSL/TLSÐÔÄÜÓÅ»¯£º¹ØÓÚHTTPSÁ÷Á¿£¬ÐèÒªÓÅ»¯SSL/TLSµÄÎÕÊÖÀú³ÌºÍ¼ÓÃÜËã·¨¡£¿ÉÒÔʹÓÃssl_session_cacheºÍssl_session_timeoutÀ´¼ÓËÙ»á»°ÖØÓ㬲¢Ñ¡Ôñ¸ßЧµÄ¼ÓÃÜÌ×¼þ¡£
Keep-AliveÅþÁ¬µÄʹÓãºÆôÓÃHTTPKeep-AliveÅþÁ¬£¬¿ÉÒÔïÔ̿ͻ§¶ËÓë·þÎñÆ÷Ö®¼ä½¨ÉèTCPÅþÁ¬µÄ¿ªÏú£¬¹ØÓÚÒ»Á¬²¥·ÅÊÓÆµ»òÖ±²¥µÄÓû§ÌåÑéÖÁ¹ØÖ÷Òª¡£¼à¿ØÓëÈÕÖ¾ÆÊÎö£º½¨ÉèÍêÉÆµÄNginxÐÔÄÜ¼à¿ØÏµÍ³£¬ÊµÊ±¹Ø×¢CPU¡¢ÄÚ´æ¡¢ÍøÂçÁ÷Á¿¡¢ÅþÁ¬ÊýµÈÖ¸±ê¡£
¶ÔNginxµÄ»á¼ûÈÕÖ¾¾ÙÐÐÉîÈëÆÊÎö£¬ÕÒ³öÐÔÄÜÆ¿¾±£¬²¢¾Ý´Ëµ÷½âÉèÖá£
NginxÒÔÆä׿ԽµÄÐÔÄÜ¡¢ÎÞаµÄ¼Ü¹¹ºÍǿʢµÄ¹¦Ð§£¬ÒѾ³ÉΪʵÏÖ¡°Nginx100%ÊÓÆµÐÔÄÜ¡±µÄ»ùʯ¡£´ÓCDNµÄÈ«Çò¼ÓËÙ£¬µ½ÊµÊ±Ö±²¥µÄÁ÷ͨ·Ö·¢£¬ÔÙµ½WebRTCµÄµÍÑÓ³ÙͨѶ£¬Nginx¶¼ÔÚÆäÖÐÊÎÑÝ×ÅÒªº¦½ÇÉ«¡£Í¨¹ýÉîÈëÃ÷È·Æä½¹µãÓÅÊÆ£¬ÕÆÎÕÒªº¦ÊÖÒÕÓ¦Ó㬲¢¾ÙÐÐϸÄ廯µÄÉèÖÃÓÅ»¯£¬Äú¿ÉÒÔΪÄúµÄÓû§´òÔìÕæÕý¸ßÇå¡¢Á÷ͨ¡¢ÎÞ¿¨¶ÙµÄÊÓÆµÌåÑ飬ÈÃÄúµÄÊÓÆµÄÚÈÝÔÚ¾ºÕùÇ¿ÁÒµÄÊý×ÖÌìÏÂÖÐÍÑÓ±¶ø³ö¡£
Nginx²¢?·ÇÒ»¸ö¼òÆÓµÄWeb·þÎñÆ÷£¬ËüÊÇÅþÁ¬ÄÚÈÝÓëÓû§µÄ?ÇÅÁº£¬¸üÊÇÊÍ·ÅÊÓÆµ¼«ÖÂÐÔÄܵÄÉñÃØÎäÆ÷¡£