Nginx£º¸ßÇåÊÓÆµ»úÄܵĻùʯ£¬²»Ö¹ÓÚ¾²Ì¬Îļþ·þÎñ
ÔÚÊý×ÖÄÚÈݱ¬Õ¨µÄʱÆÚ£¬ÊÓÆµÒÑÈ»³ÉΪÐÅÏ¢´«²¼?ºÍÓéÀÖÏû·ÑµÄÖ÷Á÷¡£°éËæ¶øÀ´µÄ?ÊǶÔÊÓÆµ´«Êä»úÄܵÄÑϸñÌôÕ½£º¿¨¶Ù¡¢»º³å?¡¢¼ÓÔØ»ºÂý£¬ÕâЩ¶¼ÊÇÓû§ÂÄÀúµÄ¡°É±ÊÖ¡±¡£ÏëҪΪÓû§ÌṩÈçË¿°ã˳»¬µÄ¸ßÇåÊÓÆµÂÄÀú£¬Ñ¡ÔñÒ»¸ö׳´óµÄ·þÎñÆ÷Èí¼þÖÁ¹Ø³ÁÒª¡£ÔÚ¶à¶àÑ¡ÔñÖУ¬NginxÒÔÆäÇáÁ¿¼¶¡¢¸ß²¢·¢¡¢µÍ×ÊÔ´µÄ¸öÐÔ£¬ÍÑÓ±¶ø³ö£¬³ÉΪ¶à¶àÊÓÆµ·þÎñÌṩÉ̺ÍÄÚÈÝ·Ö·¢ÍøÂçµÄ¡°Ê×Ñ¡¡±¡£
1.NginxµÄÖ÷ÌâÓÅÊÆ£ºÎªºÎËüÊÇÊÓÆµ»úÄܵÄÍõÕߣ¿
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµÁìÓò´ó·ÅÒì²Ê£¬²¢·ÇÎÞÒâ¡£ËüËù¾ß±¸µÄ¼¸´óÖ÷ÌâÓÅÊÆ£¬×é³ÉÁËÆä׳´ó?µÄ»úÄÜ»ùʯ£º
ÊÂÎñÇý¶¯¡¢Òì²½·Ç×èÈûÄ£ÐÍ£ºÕâÊÇNginx×îΪÈ˳ÆÂ·µÄ¸öÐÔÖ®Ò»¡£Ó봫ͳµÄ¶à¹ý³Ì»ò¶àÏß³ÌÄ£ÐÍ·ÖÆç£¬NginxѡȡÊÂÎñÇý¶¯ºÍÒì²½·Ç×èÈûI/OÄ£ÐÍ¡£ÕâÒâζ×Å£¬ÔÚÒ»¸öÖ÷¹ý³ÌºÍ¶à¸ö¹¤×÷¹ý³ÌÖУ¬NginxÄܹ»Í¨¹ýÉÙÁ¿µÄÏ̴߳¦ÖôóÁ¿µÄ²¢·¢Ïνӡ£
µ±Ò»¸öÏνÓÔÚÆÚ´ýI/O²Ù×÷£¨Èç¶ÁÈ¡Îļþ»òÍøÂç´«Ê䣩ʱ£¬Ëü²»»á×èÈûÕû¸ö¹ý³Ì£¬¶øÊǽ«½ÚÔìȨ½»»¹¸øÊÂÎñÑ»·£¬È¥ÏòÀíÆäËû¾ÍÐ÷µÄÊÂÎñ¡£ÕâÖÖÉè¼Æ¼«´óµØÌá¸ßÁËNginxµÄ²¢·¢´¦ÖÃÄÜÁ¦ºÍ×ÊÔ´ÀûÓÃÂÊ£¬¶ÔÓÚ±ØÒªÍ¬Ê±´¦ÖôóÁ¿ÊÓÆµÁ÷µÄ³¡¾°À´Ëµ£¬ÓÅÊÆÓÈΪÏÔÖø¡£
ÉèÏëһϣ¬Ò»¸öNginx¹¤×÷¹ý³Ì?¾ÍÏñÒ»¸ö¸ßЧµÄµ÷¶ÈÔ±£¬Í¬Ê±´¦ÖÃ×ųÉǧÉÏÍò¸öÊÓÆµ²¥·ÅÒªÇ󣬶ø²»»áÓÉÓÚÈκÎÒ»¸öÒªÇóµÄÉÔÂý¶ø¡°ÊÖæ½ÅÂÒ¡±¡£ÄÚ´æ¿÷ËðµÍ£¬Ð§ÄܸߣºÏà±Å×ÚApacheµÈ·þÎñÆ÷£¬NginxµÄÄÚ´æÕ¼ÓÃͨ³£ÒªµÍµÃ¶à¡£ÕâµÃÒæÓÚÆä¾«²ÊµÄ¼Ü¹¹Éè¼ÆºÍ¶ÔC˵»°µÄ¾«Õ¿Ê¹Óá£
µÍÄÚ´æ¿÷ËðÒâζ×ÅÔÚÒ»ÑùµÄÓ²¼þ×ÊÔ´Ï£¬NginxÄܹ»Ö§³Ö¸ü¶àµÄ²¢·¢Ïνӣ¬´Ó¶ø½µµÍ·þÎñÆ÷³É±¾?£¬Ìá¸ßÕûÌåµÄÐԼ۱ȡ£¶ÔÓÚ±ØÒª²¿Êð´óÁ¿·þÎñÆ÷ÒÔÖ§³ÖÖØ´óÓû§Á¿µÄÊÓÆµÆ½Ì¨¶øÑÔ£¬ÕâÒ»µãÖÁ¹Ø³ÁÒª¡£×³´óµÄ¾²Ì¬Îļþ´¦ÖÃÄÜÁ¦£º¾ø´óÎÞÊýÊÓÆµÄÚÈÝÔÚ´«Êäǰ³ÇÊб»·â×°³É¸÷ÀàÌåʽµÄÊÓÆµÎļþ£¨ÈçMP4,FLV,TSµÈ£©£¬ÕâЩ¶¼Äܹ»±»ÊÓΪ¾²Ì¬Îļþ¡£
NginxÔÚ´¦Öþ²Ì¬ÎļþµÄ¿ìÂÊÉÏÓÐמªÈ˵IJû·¢£¬ÆäÓÅ»¯µÄÎļþ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·þÎñÆ÷£¬ËüÊÇÏνÓÄÚÈÝÓëÓû§µÄÇÅÁº£¬¸üÊÇ¿ªÊÍÊÓÆµ¼«Ö»úÄܵİÂÃØ±øÆ÷¡£