ÔÚµ±½ñÕâ¸öÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÒѳÉΪÈËÃÇ»ñÈ¡ÐÅÏ¢¡¢ÓéÀÖÏûDz¡¢Éç½»»¥¶¯µÄÖ÷ÒªÔØÌå¡£´Ó¸ßÇåµçÓ°µÄµã²¥µ½ÊµÊ±Ö±²¥µÄ»ð±¬£¬ÊÓÆµÁ÷ýÌåµÄÐèÇó³Ê?ÏÖ³ö¼¸ºÎ¼¶Ôö³¤¡£¶øÔÚÕâ±³ºó£¬Ö§³ÅÆðº£Á¿ÊÓÆµÁ÷³©´«ÊäµÄ£¬ÍùÍùÊÇÄÇЩĬĬÎÞÎÅÈ´ÖÁ¹ØÖØÒªµÄ¼¼Êõ»ùʯ£¬Nginx±ãÊÇÆäÖÐÇ̳þ¡£
Ðí¶àÈË¿ÉÄܶÔNginxµÄÇ¿´óÐÔÄÜÔçÓжúÎÅ£¬ÓÈÆäÊÇÔÚ´¦Àí¸ß²¢·¢Á¬½ÓºÍ¾²Ì¬Îļþ´«Êä·½Ãæ£¬Ëü¼¸ºõÊÇÎÞ¿ÉÆ¥µÐµÄ´æÔÚ¡£µ±ÎÒÃǽ«Ä¿¹âͶÏòÊÓÆµÁ÷ýÌåÕâ¸ö¶ÔÐÔÄÜÒªÇó¼«ÎªÑÏ¿ÁµÄÁìÓòʱ£¬NginxÓÖ½«Õ¹ÏÖ³öÔõÑùµÄ¡°100%ÊÓÆµ100%ÐÔÄÜ¡±µÄʵÁ¦ÄØ£¿
Ò»¡¢NginxµÄºËÐÄÓÅÊÆ£ºÎªºÎËüÊÇÊÓÆµÁ÷ýÌåµÄÓÅÑ¡£¿
ÒªÀí½âNginxÈçºÎʵÏÖ¡°100%ÊÓÆµ100%ÐÔÄÜ¡±£¬ÎÒÃÇÊ×ÏÈÐèÒªÉîÈëÆäºËÐļܹ¹ºÍÉè¼ÆÀíÄî¡£Nginx²ÉÓõÄÊÇʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄI/OÄ£ÐÍ£¬ÕâÓ봫ͳµÄApache·þÎñÆ÷²ÉÓõĽø³Ì/Ïß³ÌÄ£ÐÍÓÐ×ű¾ÖʵÄÇø±ð¡£
ʼþÇý¶¯ÓëÒì²½·Ç×èÈû£º´«Í³µÄ?·þÎñÆ÷Ä£ÐÍ£¬ÀýÈçApache£¬Ã¿¸öÇëÇóͨ³£»á´´½¨Ò»¸öеÄ?½ø³Ì»òÏß³ÌÀ´´¦Àí¡£µ±²¢·¢ÇëÇóÁ¿Ôö´óʱ£¬´óÁ¿µÄ½ø³Ì/Ï̻߳áÏûºÄ´óÁ¿µÄϵͳ×ÊÔ´£¨CPUºÍÄڴ棩£¬µ¼ÖÂÉÏÏÂÎÄÇл»Æµ·±£¬ÐÔÄܼ±¾çϽµ£¬ÉõÖÁ³öÏÖ¡°¾ªÈºÐ§Ó¦¡±¡£¶øNginxÔò²ÉÓõ¥Ò»Ö÷½ø³Ì£¨masterprocess£©ºÍ¶à¸ö¹¤×÷½ø³Ì£¨workerprocesses£©µÄģʽ¡£
»ù×¼²âÊÔ£ºÊ¹Óù¤¾ß£¨Èçab¡¢wrk£©¶ÔNginx½øÐлù×¼²âÊÔ£¬Ä£Äâ¸ß²¢·¢³¡¾°£¬ÕÒ³öÐÔÄÜÆ¿¾±¡£²ÎÊýµ÷Õû£º¸ù¾Ý¼à¿ØÊý¾ÝºÍ²âÊÔ½á¹û£¬ÓÐÕë¶ÔÐԵص÷ÕûNginxµÄÅäÖòÎÊý£¬ÀýÈçworker_processes,worker_connections,buffer_size,keepalive_timeoutµÈ¡£
²Ù×÷ϵͳÄں˲ÎÊýÓÅ»¯£ºÅäºÏ²Ù?×÷ϵͳµÄTCP/IP²ÎÊýµ÷ÓÅ£¨Èçnet.core.somaxconn,net.ipv4.tcp_fin_timeoutµÈ£©£¬¿ÉÒÔ½øÒ»²½?ÌáÉýNginxµÄÕûÌåÐÔÄÜ¡£
ͨ¹ýÉîÈë½âÎöNginxÔÚ¾²Ì¬Îļþ·þÎñ¡¢HTTP/2ÐÒéÖ§³Ö¡¢TCPBBRÓÅ»¯¡¢HLS/DASHÐÒé´¦Àí¡¢CDN¹¹½¨¡¢ÖÇÄÜÁ÷Á¿µ÷¶È¡¢°²È«·À»¤ÒÔ¼°³ÖÐø¼à¿ØµÈ·½ÃæµÄÇ¿´óÄÜÁ¦£¬ÎÒÃÇ¿ÉÒÔÇåÎúµØ¿´µ½NginxÈçºÎ³ÉΪʵÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÄ¹Ø¼üÀûÆ÷¡£
Nginxƾ½èÆä¸ßÐÔÄÜ¡¢¸ß²¢·¢´¦ÀíÄÜÁ¦¡¢Áé»îµÄÅäÖÃÒÔ¼°·á¸»µÄÉú̬ϵͳ£¬Äܹ»ÓÐЧµØ?½â¾öÊÓÆµÁ÷ýÌå·þÎñÖеĸ÷ÖÖÍ´µã£¬´Ó¸ù±¾ÉÏÌáÉýÓû§¹Û¿´ÌåÑé¡£Ëü²»½ö½öÊÇÒ»¸ö·þÎñÆ÷£¬¸üÊǹ¹½¨Ò»¸öÇ¿´ó¡¢Îȶ¨¡¢µÍÑÓ³ÙÊÓÆµÁ÷ýÌåÆ½Ì¨µÄ¼áʵ»ùʯ¡£Óµ±§Nginx£¬½âËøÆäÊÓÆµÓÅ»¯Ç±Á¦£¬Ä㽫ÄÜΪÓû§´øÀ´Ç°ËùδÓеÄÁ÷³©ÊÓÌýÏíÊÜ£¬ÔÚÕâ¸ö¾ºÕù¼¤ÁÒµÄÊÓÆµÊ±´úÍÑÓ±¶ø³ö£¬µãȼÓû§µÄ?¹Û¿´ÈÈÇ飬ӮµÃÊг¡µÄÇàíù¡£
HLS(HTTPLiveStreaming)£ºÓÉAppleÍÆ³öµÄHLSÐÒ飬½«ÊÓÆµÁ÷·Ö¸î³É?һϵÁÐСµÄHTTPÎļþ£¬²¢Ìṩһ¸öM3U8²¥·ÅÁÐ±í¡£ÕâÖÖ»ùÓÚHTTPµÄ´«Ê䷽ʽ£¬Ê¹ÆäÄܹ»ÇáËÉ´©Ô½·À»ðǽ£¬²¢ÇÒÓëÏÖÓеÄCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩»ù´¡?ÉèÊ©¸ß¶È¼æÈÝ¡£
Nginx×÷Ϊ¸ßÐÔÄܵÄHTTP·þÎñÆ÷£¬Äܹ»ÒÔ¼«¸ßµÄЧÂÊ»º´æºÍ·Ö·¢HLSµÄýÌ寬¶Î£¨.tsÎļþ£©ºÍ²¥·ÅÁÐ±í£¨.m3u8Îļþ£©£¬È·±£È«ÇòÓû§¶¼ÄÜ»ñµÃµÍÑÓ³Ù?¡¢¸ßÖÊÁ¿µÄ¹Û¿´ÌåÑé¡£NginxµÄ»º´æ»úÖÆ£¬Èçproxy_cache£¬¶ÔÓÚHLSµÄÐÔÄÜÌáÉýÓÈΪ¹Ø¼ü£¬Äܹ»ÏÔÖø½µµÍÔ´Õ¾µÄѹÁ¦¡£
DASH(DynamicAdaptiveStreamingoverHTTP)£ºDASHÊÇÒ»ÖÖ¿ª·Å±ê×¼µÄ×ÔÊÊÓ¦±ÈÌØÂÊÁ÷ÐÒ飬ËüÓëHLSÀàËÆ£¬Ò²ÊÇ»ùÓÚHTTP½øÐд«?Ê䣬µ«?ÌṩÁ˸üÁé»îµÄ´ø¿íÊÊÓ¦ÐԺͱàÂë¸ñʽ֧³Ö¡£NginxͬÑùÄܹ»¸ßЧµØ´¦ÀíDASHµÄýÌå·Ö¶ÎÎļþ£¨.mpd£©ºÍÊÓÆµÆ¬¶Î£¬Í¨¹ýÆäÇ¿´óµÄ¾²Ì¬Îļþ·þÎñÄÜÁ¦ºÍ»º´æ?²ßÂÔ£¬ÎªDASHÁ÷ÌṩÎȶ¨¿É¿¿µÄ·Ö·¢¡£
2.3¶¯Ì¬ÄÚÈݼÓËÙÓëתÂëÓÅ»¯£¨½áºÏµÚÈý·½Ä£¿é»ò·þÎñ£©ËäÈ»NginxÖ÷ÒªÉ󤾲̬ÄÚÈÝ·Ö·¢£¬µ«Í¨¹ý¼¯³É?µÚÈý·½Ä£¿é»òÓëרҵµÄ?תÂë·þÎñÅäºÏ£¬NginxÒ²ÄÜÔÚ¶¯Ì¬ÄÚÈݵÄÉú³ÉºÍ¼ÓËÙ·½Ãæ·¢»Ó×÷Óá£
Lua½Å±¾¼¯³É(ngx_lua):ÀûÓÃngx_luaÄ£¿é£¬¿ÉÒÔÔÚNginxÄÚ²¿Ö´ÐÐLua½Å±¾£¬ÊµÏÖ¸ü¸´ÔÓµÄÒµÎñÂß¼£¬ÀýÈ綯̬Éú³É²¥·ÅÁÐ±í¡¢½øÐÐʵʱµÄÊý¾Ýͳ¼ÆºÍ·ÖÎö£¬ÉõÖÁ¿ÉÒÔ¼¯³ÉһЩ¼òµ¥µÄתÂëÂß¼¡£ÓëתÂë·þÎñ¼¯³É:Nginx¿ÉÒÔ×÷Ϊǰ¶Ë´úÀí£¬½«Óû§µÄתÂëÇëÇóת·¢¸øºó¶ËµÄתÂ뼯Ⱥ¡£
µ±×ªÂëÍê³Éºó£¬NginxÔÙ½«×ªÂëºóµÄÊÓÆµÎļþ¸ßЧµØ·Ö·¢¸øÓû§¡£ÕâÖÖ·½Ê½½«NginxµÄ¸ßÐÔÄÜI/OÄÜÁ¦ÓëרҵתÂë·þÎñµÄ¼ÆËãÄÜÁ¦½áºÏÆðÀ´£¬ÊµÏÖÁË×îÓÅ»¯µÄÊÓÆµ´¦ÀíÁ÷³Ì¡£video_streaming_module(µÚÈý·½):һЩµÚÈý·½NginxÄ£¿é£¬Èçngx_http_vhost_traffic_status_module¿ÉÒÔÌṩÁ÷Á¿¼à¿Ø£¬¶øngx_http_flv_module»ò¸üרҵµÄÁ÷ýÌåÄ£¿é£¬Ôò¿ÉÒÔÎªÌØ¶¨³¡¾°Ìṩ¸üµ×²ãµÄÖ§³Ö¡£
ÎÒÃÇÕýÉí´¦Ò»¸öÐÅÏ¢±¬Õ¨µÄÊÓÆµÊ±´ú¡£ÎÞÂÛÊÇÓéÀÖ¡¢½ÌÓý¡¢¹¤×÷»¹ÊÇÉç½»£¬ÊÓÆµÄÚÈÝÒÑÉøÍ¸µ½ÎÒÃÇÉú»îµÄ·½·½ÃæÃæ¡£¶ÌÊÓÆµµÄáÈÆð¡¢¸ßÇåÄÚÈÝµÄÆÕ¼°ÒÔ¼°Ö±²¥µÄÅ·¢Õ¹£¬¶¼ÔÚÒÔǰËùδÓеÄËÙ¶ÈÍÆ¶¯×ÅÊÓÆµ¼¼ÊõµÄ½ø²½¡£ÔÚÕâ¹ÉÀ˳±Ö®Ï£¬ÊÓÆµ·þÎñÌṩÉ̺ÍÄÚÈÝ´´×÷ÕßÃÇÒ²ÃæÁÙ×ÅÑϾþµÄÐÔÄÜÌôÕ½£ºÈçºÎÈ·±£º£Á¿Óû§Äܹ»Á÷³©¡¢Îȶ¨µØ¹Û¿´ÊÓÆµ£¿ÈçºÎÓ¦¶ÔÍ»ÈçÆäÀ´µÄ?Á÷Á¿¸ß·å£¿ÈçºÎ×îС»¯ÑÓ³Ù£¬Ìṩ¼´Ê±ÏìÓ¦µÄ¹Û¿´ÌåÑ飿
ÔÚÖÚ¶àµÄ½â¾ö·½°¸ÖУ¬Nginx×÷Ϊһ¿î¸ßÐÔÄܵÄWeb·þÎñÆ÷¡¢·´Ïò´úÀíºÍ¸ºÔؾùºâÆ÷£¬ÒÔÆä׿ԽµÄÐÔÄÜ¡¢Áé»îµÄÅäÖúÍÇ¿´óµÄ¹¦ÄÜ£¬³ÉΪÁ˹¹½¨¸ßЧÊÓÆµ´«ÊäϵͳµÄ?ºËÐÄÀûÆ÷¡£Ëü²»½öÄܹ»´¦Àí´óÁ¿µÄ²¢·¢Á¬½Ó£¬¸üÄÜÔÚÊÓÆµÁ÷ýÌåµÄ´«Êä¹ý³ÌÖз¢»ÓÖÁ¹ØÖØÒªµÄ×÷Óá£
±¾ÎĽ«ÉîÈë̽ÌÖNginxÈçºÎʵÏÖ¡°100%ÊÓÆµÐÔÄÜ¡±£¬´Ó»ù´¡ÅäÖõ½¸ß¼¶ÓÅ»¯£¬È«·½Î»½âÎöÆäÔÚÊÓÆµ·þÎñÖеÄ?¹Ø¼ü×÷Ó㬰ïÖúÄú½âËøÁ÷³©Êӽ磬³¹µ×¸æ±ð¿¨¶Ù·³ÄÕ¡£
ÊÓÆµÁ÷µÄÌØµãÊÇÁ¬½Óʱ¼ä³¤¡¢Êý¾Ý´«Êä³ÖÐø¡£Òò´Ë£¬ÈçºÎ¸ßЧµØ¹ÜÀíº£Á¿³¤Á¬½Ó£¬ÊÇNginxÐÔÄÜÓÅ»¯µÄºËÐÄ¡£
workerprocessesÓëworkerconnections£ºworker_processes:½¨ÒéÉèÖÃΪCPUºËÐÄÊý£¬»òÂÔ¶àÓÚCPUºËÐÄÊý£¬ÒÔ³ä·ÖÀûÓöàºËÓÅÊÆ£¬ÊµÏÖ²¢Ðд¦Àí¡£ÀýÈ磬Èç¹û·þÎñÆ÷ÓÐ8¸öCPUºËÐÄ£¬¿ÉÒÔÉèÖÃworker_processes8;¡£
worker_connections:Õâ¸ö²ÎÊý¾ö¶¨ÁËÿ¸öWorker½ø³ÌÄܹ»Í¬Ê±´¦ÀíµÄ×î´óÁ¬½ÓÊý¡£Æäֵͨ³£ÐèÒª¸ù¾Ý·þÎñÆ÷µÄÄÚ´æºÍ²¢·¢Á¬½ÓÐèÇóÀ´É趨¡£Ò»¸ö¾Ñ鹫ʽÊÇ£ºworker_connections*worker_processesÓ¦¸Ã´óÓÚÄãÔ¤ÆÚµÄ×î´ó²¢?·¢Á¬½ÓÊý¡£
¶ÔÓÚÊÓÆµ´«Ê䣬Õâ¸öÖµ¿ÉÄÜÐèÒªÉèÖõýϸߣ¬ÀýÈçworker_connections4096;»ò¸ü¸ß¡£keepalivetimeoutÓëkeepaliverequests£ºkeepalive_timeout:ÉèÖó¤Á¬½ÓµÄ³¬Ê±Ê±¼ä¡£
Nginx×÷ΪCDN±ßÔµ½Úµã£ºÔÚÕâÖּܹ¹Ï£¬Nginx·þÎñÆ÷²¿ÊðÔÚÈ«Çò¸÷µØ?µÄCDN½ÚµãÉÏ¡£µ±Óû§ÇëÇóÊÓÆµÊ±£¬ÇëÇó»á±»Â·Óɵ½×î½üµÄCDN½Úµã¡£NginxÔÚÕâЩ½ÚµãÉϽøÐлº´æ£¬Óû§¿ÉÒÔÖ±½Ó´ÓÀë×Ô¼º×î½üµÄ½Úµã»ñÈ¡ÊÓÆµ£¬´ó?´ó½µµÍÁËÑÓ³Ù¡£Nginx×÷ΪCDN»ØÔ´·þÎñÆ÷£ºÈç¹ûÄãÏ£ÍûÍêÈ«ÕÆ¿ØÊÓÆµÄÚÈݵÄ?·Ö·¢£¬¿ÉÒÔ½«Nginx²¿ÊðÔÚÔ´Õ¾£¬²¢?ÅäÖÃCDN´ÓÄãµÄNginx·þÎñÆ÷ÀÈ¡ÄÚÈÝ¡£
NginxµÄ¸ßÐÔÄÜ»º´æ»úÖÆÄܹ»ÓÐЧ»º½âԴվѹÁ¦£¬È·±£CDN½ÚµãÄܹ»¿ìËÙ»ñÈ¡µ½ÄÚÈÝ¡£
ÒýÑÔ£ºµ±Á÷³©³ÉΪÍõµÀ£¬NginxÈçºÎÁ¶³ÉÊÓÆµÓÅ»¯ÀûÆ÷£¿
ÔÚÈç½ñÕâ¸öÄÚÈÝΪÍõµÄʱ´ú£¬ÊÓÆµÒÑÈ»³ÉΪÐÅÏ¢´«²¥¡¢ÓéÀÖÏûDzºÍÉÌÒµÓªÏúµÄºËÐÄÔØÌå¡£´ÓÔÚÏ߿γ̵½¸ßÇåµçÓ°£¬´ÓÖ±²¥»¥¶¯µ½¶ÌÊÓÆµ·çÃÒ£¬Óû§¶ÔÓÚÊÓÆµ²¥·ÅµÄÁ÷³©?¶ÈºÍÏìÓ¦ËÙ¶ÈÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£Ò»µ©³öÏÖ¿¨¶Ù¡¢»º³å£¬ÉõÖÁÊDz¥·Åʧ°Ü£¬Óû§ÌåÑéµÄ?¶ÏÑÂʽϵø±ã²»¿É±ÜÃâ£¬ËæÖ®¶øÀ´µÄ?±ã?ÊÇÁ÷Á¿µÄÁ÷ʧ¡¢Óû§µÄ²»ÂúÒÔ¼°Æ·ÅÆÐÎÏóµÄÊÜËð¡£
ÔÚÊÓÆµÁ÷ýÌå·þÎñÈÕÒæ¸´ÔÓºÍÅÓ´óµÄ?±³¾°Ï£¬ÈçºÎÈ·±£Ã¿Ò»Ö¡»Ãæ¶¼Äܾ«×¼¡¢¸ßЧµØËÍ´ïÓû§ÖÕ¶Ë£¬³ÉΪÁ˰ÚÔÚÿһλ¼¼Êõ¿ª·¢ÕߺÍÔËάÈËÔ±ÃæÇ°µÄ¾Þ´óÌôÕ½¡£
ÔÚÕⳡ?×·Çó¼«ÖÂÁ÷³©µÄÕ½ÒÛÖУ¬Nginx£¬Õâ¿î¸ßÐÔÄܵÄWeb·þÎñÆ÷¡¢·´Ïò´úÀíºÍ¸ºÔؾùºâÆ÷£¬ÕýÒÔÆä׿ԽµÄÐÔÄܺÍÁé»îµÄÅäÖ㬰çÑÝ×ÅÔ½À´Ô½ÖØÒªµÄ½ÇÉ«¡£Ëü²»½ö½öÊÇÒ»¸ö¼òµ¥µÄÎļþ·þÎñÆ÷£¬¸üÊÇÄܹ»Éî¶È½éÈëÊÓÆµÁ÷ýÌå´«Êä¹ý³Ì£¬½øÐÐÈ«·½Î»¡¢¾«Ï¸»¯ÓÅ»¯µÄÇ¿´óÒýÇæ¡£
±¾ÎĽ«ÉîÈë̽ÌÖNginxÈçºÎʵÏÖ¡°100%ÊÓÆµÓÅ»¯¡±£¬½ÒʾÆä±³ºóµÄ¼¼ÊõÔÀíºÍʵ²Ù¼¼ÇÉ£¬°ïÖúÄã¹¹½¨Îȶ¨¡¢¸ßЧ¡¢¼«¾ß¾ºÕùÁ¦µÄÊÓÆµ·þÎñ¡£
Èç¹û´æÔÚ£¬ÔòÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬Ëٶȼ«¿ì¡£Èç¹û»º´æÖв»´æÔÚ£¬Nginx²Å»áÏòÔ´·þÎñÆ÷·¢ÆðÇëÇ󣬲¢½«ÏìÓ¦½á¹û»º´æÆðÀ´£¬È»ºóÔÙ·µ»Ø¸øÓû§¡£
ÅäÖÃÒªµã£ºproxy_cache_path£º¶¨Ò建´æµÄ»ù±¾Â·¾¶¡¢´óСºÍÎļþÊýÁ¿ÏÞÖÆ¡£proxy_cache_key£º¶¨Ò建´æµÄ¼ü£¬Í¨³£°üº¬ÇëÇóµÄURI¡¢Ö÷»úÃûµÈ£¬ÒÔÈ·±£»º´æµÄΨһÐÔ¡£proxy_cache_valid£ºÉèÖò»Í¬HTTP״̬ÂëµÄ»º´æÊ±¼ä£¬ÀýÈç¶Ô200OKµÄÏìÓ¦¿ÉÒÔ»º´æ¸ü³¤Ê±¼ä¡£
proxy_cache_methods£ºÖ¸¶¨ÄÄЩHTTP·½·¨£¨ÈçGET¡¢HEAD£©µÄÏìÓ¦¿ÉÒÔ±»»º´æ¡£proxy_cache_bypass£º¶¨ÒåÈÆ¹ý»º´æµÄÌõ¼þ£¬ÀýÈçµ±Óû§ÊÇÌØ¶¨IPʱ£¬²»Ê¹Óûº´æ¡£add_headerX-Cache-Status$upstream_cache_status;£ºÔÚÏìӦͷÖÐÌí¼Ó»º´æ×´Ì¬ÐÅÏ¢£¬·½±ãµ÷ÊÔ¡£
¾²Ì¬Îļþ»º´æ£º¶ÔÓÚÊÓÆµÁ÷ýÌåÖеÄһЩ¾²Ì¬×ÊÔ´£¬ÈçÊÓÆµ·âÃæ¡¢ÔªÊý¾ÝÎļþ¡¢HLSµÄm3u8Ë÷ÒýÎļþµÈ£¬Nginx¿ÉÒÔÖ±½Óͨ¹ýlocationÖ¸Áî½øÐиßЧµØ»º´æ¡£ÀýÈ磬¿ÉÒÔ½«Ìض¨Ä¿Â¼ÏµÄÎļþÅäÖÃΪ³¤ÆÚ»º´æ£¬µ±Óû§·ÃÎÊÕâЩÎļþʱ£¬Ö±½ÓÓÉNginx¿ìËÙÏìÓ¦£¬¼õÇáºó¶ËѹÁ¦¡£
sendfileon;£ºÆôÓÃsendfileϵͳµ÷Ó㬿ÉÒÔÖ±½Ó½«Îļþ´ÓÄں˻º´æ¸´ÖƵ½ÍøÂçÌ×½Ó×Ö£¬±ÜÃâÁËÓû§¿Õ¼äºÍÄں˿ռäÖ®¼äµÄÊý¾Ý¿½±´£¬ÏÔÖøÌá¸ßÁËÎļþ´«ÊäЧÂÊ¡£tcp_nopushon;ºÍtcp_nodelayon;£ºtcp_nopush¿ÉÒÔÔÚ·¢ËÍÏìӦͷºó£¬µÈ´ýÊý¾Ý°üÌîÂú£¬ÒÔ¼õÉÙTCP±¨ÎÄÊýÁ¿£»tcp_nodelayÔòÏà·´£¬ÔÊÐíÁ¢¼´·¢ËÍСÊý¾Ý°ü£¬¶ÔÓÚÑÓ³ÙÃô¸ÐµÄÓ¦Óã¨ÈçijЩֱ²¥³¡¾°£©¿ÉÄܸüÓÐÀû¡£
ÐèÒª¸ù¾Ý¾ßÌåÒµÎñ³¡?¾°½øÐвâÊÔºÍÑ¡Ôñ¡£keepalive_timeout£ºÉèÖÃHTTP³¤Á¬½ÓµÄ³¬Ê±Ê±¼ä¡£Êʵ±µÄ³¤Á¬½Ó¿ÉÒÔ¼õÉÙTCP½¨Á¢ºÍ¹Ø±ÕµÄ¿ªÏú£¬Ìá¸ßÐÔÄÜ£¬µ«¹ý³¤µÄ³¬Ê±Ê±¼ä¿ÉÄÜ»áÕ¼Óò»±ØÒªµÄÁ¬½Ó×ÊÔ´¡£
ÕâÒâζ׿´Ê¹ÔÚ´«ÊäÊÓÆµµÄ¸÷¸ö·ÖƬʱ£¬ÆäËû×ÊÔ´£¨ÈçͼƬ¡¢CSS¡¢JavaScript£©Ò²¿ÉÒÔͬʱ±»¼ÓÔØ£¬¼«´óµØ¼õÉÙÁËÁ¬½Ó½¨Á¢µÄ¿ªÏúºÍ¶ÓÍ·×èÈû£¨Head-of-LineBlocking£©ÎÊÌ⣬ÏÔÖøÌáÉýÁËÒ³Ãæ¼ÓÔØËٶȺÍÊÓÆµ²¥·ÅµÄÆðʼËÙ¶È¡£¶ø¼´½«ÆÕ¼°µÄHTTP/3£¬¸üÊÇ»ùÓÚQUICÐÒ飬½øÒ»²½½â¾öÁËTCPÔÚÍøÂç²»Îȶ¨Ê±µÄÓµÈû¿ØÖÆÎÊÌ⣬´øÀ´Á˸üµÍµÄÑӳٺ͸ü¸ßµÄÍÌÍÂÁ¿¡£
NginxÇ¿´óµÄGzipºÍBrotliѹËõ¹¦ÄÜ£¬Ò²ÄÜÔÚÊÓÆµ´«Êä¹ý³ÌÖз¢»ÓÖØÒª×÷Óá£ËäÈ»ÊÓÆµÎļþ±¾Éíͨ³£ÒѾÊǸ߶ÈѹËõµÄ?¸ñʽ£¨ÈçH.264,H.265,VP9µÈ£©£¬µ«ÊÓÆµ²¥·ÅÆ÷ÔÚÇëÇóÊÓÆµµÄÔªÊý¾ÝÎļþ£¨Èç.m3u8²¥·ÅÁÐ±í¡¢.mpdÇåµ¥Îļþ£©Ê±£¬ÕâЩÎı¾Îļþ¿ÉÒÔͨ¹ýGzip»òBrotli½øÐÐѹËõ£¬¼õÉÙ´«ÊäÁ÷Á¿£¬¼Ó¿ì½âÎöËÙ¶È¡£
¸üÖØÒªµÄÊÇ£¬¶ÔÓÚһЩ·ÇÊÓÆµÄÚÈݵĸ¨Öú×ÊÔ´£¬Èç×ÖÄ»Îļþ¡¢JavaScriptÎļþµÈ?£¬GzipºÍBrotliµÄѹËõЧ¹û½«¸üΪÃ÷ÏÔ£¬Ö±½ÓÌáÉýÁËÕûÌåµÄ¼ÓÔØÐ§ÂÊ¡£
»º´æÊÇÊÓÆµÓÅ»¯µÄÖØÖÐÖ®ÖØ£¬ËüÄܹ»ÏÔÖø¼õÉÙ·þÎñÆ÷Ö±½Ó´¦ÀíÇëÇóµÄ´ÎÊý£¬½µµÍ´ø¿íѹÁ¦£¬²¢¼«´óÌáÉýÏìÓ¦ËÙ¶È¡£NginxÌṩÁ˶àÖÖÇ¿´óµÄ»º´æ»úÖÆ£¬¿ÉÒÔ¸ù¾ÝÄãµÄÐèÇó½øÐÐÁé»îÅäÖá£
HTTP»º´æ?£¨ProxyCache£©£ºÕâÊÇNginx×î³£ÓõÄ?»º´æ·½Ê½Ö®Ò»¡£Í¨¹ýproxy_cache_pathÖ¸ÁÒ建´æÄ¿Â¼ºÍ²ÎÊý£¬È»ºóʹÓÃproxy_cacheÖ¸ÁîÆôÓûº´æ¡£Äã¿ÉÒÔÉèÖûº´æµÄÓÐЧÆÚ£¨proxy_cache_valid£©¡¢»º´æµÄ¼ü£¨proxy_cache_key£©£¬ÒÔ¼°ÔÚ»º´æÎ´ÃüÖеÄÇé¿öÏÂÈçºÎ´¦Àí£¨proxy_cache_use_stale£©¡£
¶ÔÓÚÊÓÆµÎļþ£¬ÕâÒâζ×ÅÓû§Æµ·±ÇëÇóµÄÊÓÆµÆ¬¶Î»á±»´æ´¢ÔÚNginx·þÎñÆ÷±¾µØ£¬ºóÐøÇëÇó¿ÉÒÔÖ±½Ó´Ó»º´æ?ÖжÁÈ¡£¬ËÙ¶È×ÔÈ»ÊÇ¡°Ã뿪¡±¡£
ʵ¼ù³¡?¾°£º¼ÙÉèÄãµÄÊÓÆµÆ½Ì¨ÉÏÓÐÐí¶àÈÈÃŵçÓ°»òµçÊӾ缯£¬Óû§»á·´¸´¹Û¿´¡£Í¨¹ýNginxµÄHTTP»º´æ£¬ÕâЩÈÈÃÅÊÓÆµµÄ³õʼÇëÇóÍê³É?ºó£¬»á½«ÊÓÆµÎļþ»òÆäÒ»²¿·Ö»º´æÏÂÀ´¡£µ±ÆäËûÓû§ÇëÇóͬһÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖÐÌṩ£¬±ÜÃâÁË´Óºó¶Ë´æ´¢£¨Èç¶ÔÏó´æ?´¢£©ÀÈ¡Êý¾ÝµÄÑÓ³Ù£¬Óû§¼¸ºõ¸ÐÊܲ»?µ½¼ÓÔØÊ±¼ä¡£
Õ¹ÍûδÀ´£¬HTTP/3»ùÓÚQUICÐÒ飬½øÒ»²½½â¾öÁËTCPµÄ¶ÓÍ·×èÈûÎÊÌ⣬ÌṩÁ˸üµÍµÄÁ¬½Ó½¨Á¢Ñӳٺ͸üÇ¿µÄ¿¹¶ª°üÄÜÁ¦£¬¶ÔÓÚ²»?Îȶ¨µÄ?ÍøÂç»·¾³ÏµÄÊÓÆµ´«Ê佫´øÀ´¸ü¼ÑµÄÌåÑé¡£NginxÒ²ÔÚ»ý¼«Óµ±§HTTP/3£¬Í¨¹ýÅäÖú͵ÚÈý·½Ä£¿é£¬¿ÉÒÔÖð²½¹ý¶Éµ½ÕâÒ»¸üÏȽøµÄÐÒé¡£
HLSºÍDASHµÄÉî¶ÈÓÅ»¯£ºNginxÔÚ´¦ÀíHLSºÍDASHÕâÁ½ÖÖÖ÷Á÷µÄ×ÔÊÊÓ¦Á÷ýÌåÐÒéʱ£¬ÐèÒªÌØ±ð¹Ø×¢Æä¶Ô´óÁ¿Ð¡ÎļþµÄ´¦ÀíÄÜÁ¦¡£
HLS(HTTPLiveStreaming)£ºHLSÐÒ齫ÊÓÆµ·Ö¸î³ÉһϵÁÐСµÄtsÎļþ£¬²¢Í¨¹ýÒ»¸öm3u8Ë÷ÒýÎļþÀ´ÃèÊöÕâЩƬ¶ÎµÄ²¥·Å˳Ðò¡£NginxÐèÒªÄܹ»¸ßЧµØ»º´æºÍÌṩÕâЩ´óÁ¿µÄtsÎļþ¡£
ÓÅ»¯²ßÂÔ£º´óÎļþ·ÖƬ´«Ê䣺ËäÈ»HLS±¾ÉíÊÇ·ÖÆ¬´«Ê䣬µ«Nginx¿ÉÒÔͨ¹ýsendfileon;ºÍtcp_nopushon;µÈÖ¸ÁîÓÅ»¯ÎļþµÄ¶ÁÈ¡ºÍ·¢ËÍЧÂÊ¡£Worker½ø³ÌÓëÎļþÃèÊö·û£ºÈ·±£NginxµÄworker_processesÊýÁ¿ºÍworker_connectionsÉèÖúÏÀí£¬ÒÔÓ¦¶Ôº£Á¿Ð¡ÎļþµÄ²¢·¢ÇëÇó¡£
NginxÖ®ËùÒÔÄܹ»ÊµÏÖ¡°100%ÊÓÆµÐÔÄÜ¡±£¬²¢·ÇÒ»¸ö¼òµ¥µÄ±êÇ©£¬¶øÊÇÆä±³ºóÇ¿´ó¼¼Êõ¼Ü¹¹¡¢Áé»îµÄÄ£¿é»¯Éè¼ÆÒÔ¼°¾«Ï¸»¯µ÷ÓŵĽá¹û¡£´Ó¸ßЧ´¦Àíº£Á¿²¢·¢Á¬½Ó£¬µ½ÖÇÄÜ»¯µÄ?»º´æ²ßÂÔ£¬ÔÙµ½¶ÔRTMP¡¢HLS¡¢DASHµÈ?Á÷ýÌåÐÒéµÄÓÐÁ¦Ö§³Ö£¬NginxΪÊÓÆµ·Ö·¢ÁìÓòÌṩÁ˼áʵµÄ»ù´¡¡£
ͨ¹ý½«Nginx²¿ÊðÔÚCDN±ßÔµ½Úµã£¬²¢½áºÏÆäÇ¿´óµÄÁ÷ýÌå´¦ÀíÄÜÁ¦ºÍ³ÖÐøµÄÐÔÄܵ÷ÓÅ£¬ÎÒÃÇ¿ÉÒÔ¹¹½¨³ö?ÕæÕý×öµ½µÍÑÓ³Ù¡¢¸ß¿ÉÓᢸßÍÌÍÂÁ¿µÄÊÓÆµ·Ö·¢ÏµÍ³¡£ÎÞÂÛÄúÊÇÐèÒª´î½¨Ò»¸öÃæÏòÈ«ÇòÓû§µÄÊÓÆµµã²¥Æ½Ì¨£¬»¹ÊÇÒ»¸öʵʱ»¥¶¯µÄÖ±²¥·þÎñ£¬Nginx¶¼½«ÊÇÄúʵÏÖÁ÷³©¡¢×¿Ô½ÊÓÆµÌåÑéµÄµÃÁ¦ÖúÊÖ£¬ÎªÄú½Òʾ²¢?ʵÏÖÊÓÆµÐÔÄܵÄÎÞÏÞ¿ÉÄÜ¡£
worker_connections£º¸ù¾Ý·þÎñÆ÷µÄÄÚ´æºÍCPU×ÊÔ´£¬ºÏÀíÉèÖÃworker_connections¡£Ò»°ãÀ´Ëµ£¬Ò»¸öworker½ø³Ì¿ÉÒÔ´¦ÀíÊýǧ¸öÁ¬½Ó¡£client_body_buffer_sizeÓëproxy_buffer_size£º¶ÔÓÚ´óÎļþ´«Ê䣬ÐèÒªÊʵ±Ôö´óÕâЩ»º³åÇø´óС£¬ÒÔ¼õÉÙ¶Ô´ÅÅÌµÄÆµ·±·ÃÎÊ¡£
sendfileÓëaio£ºÎñ±Ø¿ªÆôsendfileon;£¬²¢¿¼ÂÇÔÚÌØ¶¨³¡¾°ÏÂÆôÓÃaio(ÐèÒªNginx±àÒëʱ֧³Öngx_http_v2_module)£¬ÒÔ½øÒ»²½ÌáÉýI/OЧÂÊ¡£
ÓÅ»¯ÊÓÆµ²¥·Å£¬²¢·ÇÒ»õí¶ø¾Í£¬¶øÊÇÒ»¸öÑÐò½¥½øµÄ¹ý³Ì¡£ÎÒÃÇÏÈ´ÓNginxµÄ»ù´¡ÅäÖÃÈëÊÖ£¬´òºÃ¼áʵµÄ»ù´¡¡£
ÆôÓÃKeep-Alive£º±£³Ö¿Í»§¶ËÓë·þÎñÆ÷Ö®¼äµÄ³¤Á¬½Ó£¬¿ÉÒÔÏÔÖø¼õÉÙÿ´ÎÇëÇóµÄ½¨Á¢ºÍ¹Ø±ÕTCPÁ¬½ÓµÄ¿ªÏú£¬¶ÔÓÚ³Ö?ÐøµÄÊÓÆµÁ÷´«ÊäÖÁ¹ØÖØÒª¡£ÔÚhttp¿éÖÐÅäÖÃkeepalive_timeout60;(¿ÉÒÔ¸ù¾Ýʵ¼ÊÇé¿öµ÷ÕûÊýÖµ)£¬²¢?È·±£¿Í»§¶ËÒ²Ö§³ÖKeep-Alive¡£
µ÷ÕûWorker½ø³ÌºÍÁ¬½ÓÊý£ººÏÀíÅäÖÃworker_processesºÍworker_connectionsÊÇ·¢»ÓNginxÐÔÄܵĹؼü¡£
worker_processes£º½¨ÒéÉèÖÃΪCPUºËÐÄÊý£¬»òÕßÂÔ¸ßÓÚCPUºËÐÄÊý£¬ÒÔ³ä·ÖÀûÓöàºË´¦?ÀíÆ÷µÄÓÅÊÆ¡£worker_connections£º¸ÃÖµ¾ö¶¨ÁËÿ¸öworker½ø³Ì¿ÉÒÔͬʱ´¦ÀíµÄ×î´óÁ¬½ÓÊý¡£ÐèÒª¸ù¾Ý·þÎñÆ÷µÄÄÚ´æºÍʵ¼Ê²¢·¢ÐèÇóÀ´É趨£¬Í¨³£ÉèΪһ¸ö½Ï´óµÄÖµ£¬ÀýÈç4096»ò8192¡£
ÔÚǰһ²¿·Ö£¬ÎÒÃÇÏêϸ½âÎöÁËNginx×îа汾ÔÚÊÓÆµ´¦ÀíÄÜÁ¦ÉϵĺËÐÄÓÅÊÆ£¬°üÀ¨¼Ü¹¹¸ïС¢ÐÒéÖ§³Ö?¡¢Á÷ýÌåÄ£¿éÔöÇ¿ÒÔ¼°»º´æ»úÖÆµÄÉý¼¶¡£Ö½ÉÏ̸±øÖÕ¾õdz£¬¾øÖª´ËÊÂÒª¹ªÐС£ÒªÕæÕýʵÏÖ¡°100%ÊÓÆµÁ÷Á¿¡±µÄÁ÷³©ÌåÑ飬»¹ÐèÒªÔÚʵ¼Ê²¿ÊðÖÐÔËÓÃÇ¡µ±µÄÅäÖü¼ÇÉ£¬²¢¹Ø×¢ÆäδÀ´µÄ·¢Õ¹Ç÷ÊÆ¡£
±¾²¿·Ö½«ÎªÄúÌṩһÌ×ÏêʵµÄʵ¼ùÖ¸ÄÏ£¬²¢Õ¹ÍûNginxÔÚÊÓÆµÁìÓòµÄ¹âÃ÷δÀ´¡£
Èý¡¢ÊµÕ½ÅäÖãºNginx100%ÊÓÆµÁ÷Á¿µÄµ÷ÓÅÃØ¼®
1.¸ß²¢·¢Á¬½ÓµÄÓÅÑÅ´¦Àí£ºworkerprocesses,workerconnections
worker_processes£º´Ë²ÎÊý¾ö¶¨ÁËNginxÆô¶¯¶àÉÙ¸ö¹¤×÷½ø³Ì¡£Í¨³£ÉèÖÃΪCPUºËÐÄÊý£¬ÒÔ³ä·ÖÀûÓöàºË´¦ÀíÆ÷µÄÄÜÁ¦¡£¶ÔÓÚÊÓÆµ·þÎñ£¬¸ü¶àµÄ?worker½ø³ÌÒâζ×Å¿ÉÒÔͬʱ´¦Àí¸ü¶àµÄ²¢·¢Á¬½Ó£¬´Ó¶ø¸üÓÐЧµØÓ¦¶Ô¸ß·åÁ÷Á¿¡£worker_connections£ºÃ¿¸ö¹¤×÷½ø³ÌÄܹ»´¦ÀíµÄ×î´ó²¢·¢Á¬½ÓÊý¡£
RTMP£ºÈ·±£RTMPÄ£¿éÅäÖúÏÀí£¬ÀýÈçÉèÖÃÊʵ±µÄchunk_size¡¢bufferµÈ²ÎÊý£¬ÒÔÆ¥ÅäÍÆÁ÷¶ËºÍ²¥·Å¶ËµÄÍøÂç×´¿ö¡£HLS/DASH£ºNginx-rtmp-moduleÖ§³Ö½«RTMPÁ÷ת»»ÎªHLS/DASH£¬ÕâÁ½ÖÖÐÒéÀûÓÃHTTP½øÐд«Ê䣬¸üÒ×ÓÚ´©Í¸·À»ðǽ£¬ÇÒ¾ßÓÐÁ¼ºÃµÄ×ÔÊÊÓ¦ÂëÂÊÄÜÁ¦¡£
¹Ø¼üÔÚÓÚÅäÖúÃÇÐÆ¬Ê±³¤¡¢±àÂë²ÎÊýÒÔ¼°´ò°ü¼ä¸ô£¬ÒÔÆ½ºâ²¥·ÅµÄÁ÷³©ÐÔºÍʵʱÐÔ¡£HTTPµã²¥£º¶ÔÓÚMP4µÈ?Îļþ£¬Ö±½ÓʹÓÃNginxµÄHTTP·þÎñ£¬ÅäºÏsendfileon;¡¢tcp_nopushon;¡¢tcp_nodelayon;µÈÖ¸Á¿ÉÒÔÏÔÖøÌáÉý´«?ÊäЧÂÊ¡£
ÄÚ´æÓ뻺³å?ÇøµÄ¾«Ï¸µ÷ÓÅ£ºNginxµÄclient_body_buffer_size¡¢proxy_buffer_size¡¢proxy_buffersµÈ²ÎÊý£¬ÒÔ¼°RTMPÄ£¿éµÄbuffer¡¢max_chunk_sizeµÈ£¬¶¼ÐèÒª¸ù¾Ýʵ¼ÊÁ÷Á¿ºÍÊÓÆµÌØÐÔ½øÐе÷Õû¡£
¹ýСµÄ»º³åÇø¿ÉÄܵ¼ÖÂÆµ·±µÄI/O²Ù×÷£¬¹ý´óµÄ»º³åÇøÔò¿ÉÄÜÀË·ÑÄÚ´æ¡£
HLSºÍDASHµÄÓÅ»¯´¦Àí£º¶ÔÓÚHLSºÍDASH£¬NginxͬÑù¿ÉÒÔ½øÐиüÉî²ã´ÎµÄÓÅ»¯£º
¶¯Ì¬ÇÐÆ¬£ºËäÈ»Nginx±¾Éí²»ÊÇÒ»¸öÇÐÆ¬¹¤¾ß£¬µ«Ëü¿ÉÒÔÓëFFmpegµÈ¹¤¾ßÅäºÏ£¬ÊµÏÖÖ±²¥Á÷µÄʵʱÇÐÆ¬¡£Nginx½ÓÊÕRTMPÁ÷ºó£¬½«Æäͨ¹ýexecÖ¸Áî»òÆäËû·½Ê½´«µÝ¸øFFmpeg½øÐÐÇÐÆ¬£¬ÔÙÓÉNginx½«Éú³ÉµÄ.ts/.mp4ÎļþºÍ.m3u8/.mpdË÷ÒýÎļþÌṩ¸ø¿Í»§¶Ë¡£
»º´æ²ßÂԵľ«Ï¸»¯£º¶ÔÓÚHLS/DASH£¬ÎÒÃÇ¿ÉÒÔ¶ÔË÷ÒýÎļþºÍÊÓÆµÆ¬¶Î²ÉÈ¡²»Í¬µÄ»º´æ?²ßÂÔ¡£Ë÷ÒýÎļþ£¨.m3u8/.mpd£©¸üÐÂÆµÂʽϸߣ¬»º´æÊ±¼ä¿ÉÒԽ϶̣¬ÒÔÈ·±£Óû§»ñÈ¡µ½×îеIJ¥·ÅÐÅÏ¢¡£¶øÊÓÆµÆ¬¶Î£¨.ts/.mp4£©ÄÚÈÝÏà¶ÔÎȶ¨£¬¿ÉÒÔÉèÖøü³¤µÄ»º´æÊ±¼ä£¬×î´óÏ޶ȵØÀûÓûº´æ¡£
HTTPS¼ÓËÙ£ºÅäºÏSSL/TLSÖ¤Ê飬Nginx¿ÉÒÔÌṩHTTPSÐÒéµÄ?ÊÓÆµ·þÎñ£¬È·±£ÊÓÆµ´«ÊäµÄ°²È«ÐÔ¡£¶øNginx¸ßЧµÄSSL/TLSÎÕÊÖÄÜÁ¦£¬Ò²Äܹ»¾¡Á¿¼õÉÙHTTPS¶ÔÊÓÆµ´«ÊäÐÔÄܵÄÓ°Ïì¡£
Nginx100%ÊÓÆµÐÔÄÜ£º²»½ö½öÊÇWeb·þÎñÆ÷£¬¸üÊÇÁ÷ýÌåµÄÍõÕß
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪÐÅÏ¢´«²¥ºÍÓéÀÖÏû·ÑµÄÖ÷Á÷¡£´Ó¸ßÇåµçÓ°¡¢ÔÚÏ߿γÌ?µ½Ö±²¥»¥¶¯£¬Óû§¶ÔÊÓÆµµÄÁ÷³©¶ÈºÍ¼ÓÔØËÙ¶ÈÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£¶øÔÚÕⳡºäºäÁÒÁÒµÄÁ÷ýÌå¸ïÃüÖУ¬Nginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬Õýƾ½èÆäÇ¿´óµÄÄÜÁ¦£¬Öð½¥ÏÔ¶³öÆäÔÚÊÓÆµÁ÷ýÌåÁìÓò¡°ÍõÕß¡±µÄDZÖÊ¡£
Ðí¶àÈË¿ÉÄÜÖ»½«NginxÊÓΪ²¿ÊðÍøÕ¾µÄÀûÆ÷£¬Êâ²»Öª£¬Í¨¹ý¾«ÃîµÄÅäÖúÍÉîÈëµÄÀí½â£¬NginxÄܹ»½«ÊÓÆµ´«ÊäµÄÐÔÄÜÌáÉýÖÁ¼«Ö£¬ÊµÏÖ½Ó½ü¡°100%¡±µÄÐÔÄܱíÏÖ¡£Õâ²¢·Ç¿äÕŵÄÐû´«£¬¶øÊÇ»ùÓÚNginx¶ÀÌØ¼Ü¹¹ºÍ·á¸»Ä£¿éµÄÉî¶ÈÍÚ¾ò¡£
NginxÖ®ËùÒÔÔÚÊÓÆµÓÅ»¯ÁìÓòÍÑÓ±¶ø³ö£¬µÃÒæÓÚÆä¶ÀÌØµÄÉè¼ÆÀíÄîºÍÇ¿´óµÄ¹¦Äܼ¯¡£Ê¼þÇý¶¯¡¢Òì²½·Ç×èÈûµÄÍøÂçÄ£ÐÍÊÇNginxµÄºËÐÄÓÅÊÆ¡£ÕâÒâζ×ÅNginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄͬʱ´¦Àí³ÉǧÉÏÍòµÄ²¢·¢Á¬½Ó£¬Õâ¶ÔÓÚÐèÒª´¦Àí´óÁ¿Óû§Í¬Ê±¹Û¿´ÊÓÆµµÄÁ÷ýÌåÆ½Ì¨ÖÁ¹ØÖØÒª¡£
Ïà±ÈÓÚ´«Í³µÄÏß³ÌÄ£ÐÍ£¬NginxµÄÕâÖÖÄ£ÐÍÄÜÏÔÖø¼õÉÙCPUºÍÄÚ´æµÄ¿ªÏú£¬È÷þÎñÆ÷Äܹ»¸ü¸ßЧµØÏìÓ¦Óû§ÇëÇ󣬼õÉÙÑÓ³Ù¡£
Ç¿´óµÄ»º´æ»úÖÆÊÇNginxÔÚÊÓÆµÓÅ»¯ÖеÄÁíÒ»´óɱÆ÷¡£ÊÓÆµµÄ»º´æ¿ÉÒÔ¼«´ó?µØ?¼õÉÙÔ´·þÎñÆ÷µÄ¸ºÔØ£¬²¢¼Ó¿ìÓû§µÄ·ÃÎÊËÙ¶È¡£NginxÌṩÁËÁé»î¶àÑùµÄ»º´æÅäÖÃÑ¡Ï°üÀ¨Îļþ»º´æ¡¢Äڴ滺´æµÈ£¬¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇó½øÐо«Ï¸»¯¹ÜÀí¡£Í¨¹ýºÏÀíÅäÖûº´æ£¬¿ÉÒÔ½«ÈÈÃÅÊÓÆµÄÚÈÝ´æ´¢ÔÚÀëÓû§¸ü½üµÄ·þÎñÆ÷ÉÏ£¨»òCDN±ß??Ôµ½Úµã£©£¬µ±Óû§ÔÙ´ÎÇëÇóʱ£¬¿ÉÒÔÖ±½Ó´Ó»º´æÖпìËÙÏìÓ¦£¬ÊµÏÖÃ뿪¼ÓÔØ£¬Õâ¶ÔÓÚÌá¸ßÓû§ÂúÒâ¶ÈºÍÁô´æÂÊÓÐמö¶¨ÐÔµÄÓ°Ïì¡£
Ëæ×űßÔµ¼ÆËã¸ÅÄîµÄÐËÆð£¬NginxÒ²±»¸³ÓèÁ˸üÇ¿´óµÄÄÜÁ¦£¬Ëü²»ÔÙ½ö½öÊÇÄÚÈݵķַ¢Õߣ¬¸üÊÇÖÇÄܵġ°±ßÔµ¼ÆËã½Úµã¡±¡£
ʵʱÊÓÆµ·ÖÎö£ºÔÚ±ßÔµ½Úµã²¿ÊðNginx£¬¿ÉÒÔ¼¯³ÉAIÄ£ÐÍ£¬¶Ô´«ÊäµÄ?ÊÓÆµÁ÷½øÐÐʵʱ·ÖÎö£¬ÀýÈçÈËÁ³Ê¶±ð¡¢ÎïÌå¼ì²â¡¢ÐÐΪ·ÖÎöµÈ¡£ÕâЩ·ÖÎö½á¹û¿ÉÒÔÔÚ±ßÔµ¶Ë½øÐд¦Àí£¬¼õÉÙ¶ÔÖÐÐÄÔÆµÄ¼ÆËãѹÁ¦£¬²¢ÊµÏÖ¸üµÍÑÓ³ÙµÄÖÇÄÜÏìÓ¦¡£ÄÚÈÝÖÇÄÜÍÆ¼ö£ºÍ¨¹ý·ÖÎöÓû§µÄ¹Û¿´ÐÐΪºÍÐËȤ£¬Nginx¿ÉÒÔÔÚ±ßÔµ¶Ë½øÐгõ²½µÄÄÚÈÝÍÆ¼ö£¬²¢½«¸öÐÔ»¯µÄÍÆ¼öÁбí¿ìËÙÍÆË͸øÓû§¡£
¶¯Ì¬¹ã¸æ²åÈ룺ÔÚÊÓÆµÁ÷µÄºÏÊÊλÖã¬Nginx¿ÉÒÔ¶¯Ì¬µØ²åÈë¹ã¸æ£¬ÊµÏÖ¾«×¼µÄ¹ã¸æÍ¶·Å£¬²¢ÎªÄÚÈÝ´´×÷ÕßºÍÆ½Ì¨´øÀ´¸ü¶àÊÕÒæ¡£
¡°Nginx100ÊÓÆµ¡±ÔÚÕâÀïµÄº¬Ò壬¸üÊÇ´ú±íÁËNginxÔÚ±ßÔµÖÇÄÜʱ´úµÄ¾Þ´óDZÁ¦¡£Ëü½«¼ÆËãÄÜÁ¦ÑÓÉìµ½ÍøÂç±ßÔµ£¬Ê¹µÃÊÓÆµÓ¦ÓÃÄܹ»¸ü¼ÓÖÇÄÜ»¯¡¢ÊµÊ±»¯ºÍ¸öÐÔ»¯¡£´Ó¼òµ¥µÄÊÓÆµ²¥·Å£¬µ½¸´ÔÓµÄÖÇÄÜ·ÖÎöºÍ½»»¥£¬NginxÕýÔÚÇý¶¯×ÅÊÓÆµ¼¼ÊõµÄ±ß½ç²»¶ÏÀ©Õ¹¡£
2.2ÖÇÄÜÁ÷Á¿µ÷¶ÈÓë¸ºÔØ¾ùºâ£ºÓ¦¶Ô·åÖµ£¬±£ÕÏ¿ÉÓÃÐÔÊÓÆµ·þÎñµÄÁ÷Á¿ÍùÍù¾ßÓÐÍ»·¢ÐÔ£¬ÓÈÆäÊÇÔÚÈÈÃÅÈüÊÂÖ±²¥»òÖØÒªÊ¼þ·¢²¼Ê±¡£NginxµÄ¸ºÔؾùºâÄÜÁ¦Äܹ»ÓÐЧµØ½«Á÷Á¿·ÖÉ¢µ½¶à¸öºó¶Ë·þÎñÆ÷£¬±ÜÃâµ¥µã¹ýÔØ£¬È·±£·þÎñµÄÎȶ¨¿ÉÓá£
¶àÖÖ¸ºÔؾùºâËã·¨:NginxÖ§³Ö¶àÖÖ¸ºÔؾùºâËã·¨£¬ÈçÂÖѯ(round-robin)¡¢¼ÓȨÂÖѯ(weight)¡¢IP¹þÏ£(ip_hash)µÈ¡£upstreambackend_servers{server192.168.1.10;server192.168.1.11weight=3;}½¡¿µ¼ì²é:Nginx¿ÉÒÔÅäÖý¡¿µ¼ì²é»úÖÆ£¬×Ô¶¯ÌÞ³ý²»½¡¿µµÄºó¶Ë·þÎñÆ÷£¬²¢½«Á÷Á¿µ¼Ïò½¡¿µµÄ·þÎñÆ÷£¬Ìá¸ßÁËϵͳµÄ½¡×³ÐÔ¡£
health_checkinterval=5sfails=3passes=2uri=/health;(ÐèÒªngx_http_upstream_hc_module)»ùÓÚµØÀíλÖõĵ÷¶È:ͨ¹ýÅäºÏGeoIPÄ£¿é»òÍⲿ·þÎñ£¬Nginx¿ÉÒÔʵÏÖ»ùÓÚÓû§µØÀíλÖõÄÁ÷Á¿µ÷¶È£¬½«Óû§Òýµ¼ÖÁµØÀíλÖÃ×î½ü¡¢ÍøÂç×îÓŵķþÎñÆ÷¼¯Èº£¬½øÒ»²½½µµÍÑÓ³Ù¡£
ÔÚÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÒѾ³ÉΪÎÒÃÇÉú»îÖв»¿É»òȱµÄÒ»²¿·Ö¡£ÎÞÂÛÊǾ«²ÊµÄµçÓ°¡¢Éú¶¯µÄÖ±²¥£¬»¹ÊǸ»ÓнÌÓýÒâÒåµÄ½ÌѧÊÓÆµ£¬Á÷³©µÄ¹Û¿´ÌåÑé¶¼ÖÁ¹ØÖØÒª¡£ÊÓÆµÁ÷ýÌå·þÎñµÄ±³ºó£¬ÍùÍùÒþ²Ø×ž޴óµÄ¼¼ÊõÌôÕ½¡£ÈçºÎÔڸ߲¢·¢·ÃÎÊϱ£Ö¤ÊÓÆµµÄÁ÷³©²¥·Å£¿ÈçºÎÓÐЧ½µµÍ·þÎñÆ÷ѹÁ¦£¬½ÚÊ¡³É±¾£¿Nginx£¬×÷Ϊһ¿î¸ßÐÔÄܵÄWeb·þÎñÆ÷ºÍ·´Ïò´úÀí·þÎñÆ÷£¬Æ¾½èÆä׿ԽµÄÐÔÄܺÍÁé»îµÄÅäÖ㬳ÉΪÁ˽â¾öÕâЩÎÊÌâµÄÀûÆ÷£¬ÎªÊµÏÖ¡°Nginx100%ÊÓÆµ£¬100%ÐÔÄÜ¡±µÄÄ¿±êÌṩÁ˼áʵµÄ¼¼ÊõÖ§³Å¡£
Ò»¡¢NginxµÄºËÐÄÓÅÊÆ£ºÎªÊ²Ã´Ñ¡ÔñËüÀ´´¦ÀíÊÓÆµ£¿
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµÁ÷ýÌåÁìÓòÍÑÓ±¶ø³ö£¬Ô´ÓÚÆä¶ÀÌØµÄÉè¼ÆÀíÄîºÍÇ¿´óµÄ¹¦Äܼ¯¡£
ʼþÇý¶¯£¬Òì²½·Ç×èÈûI/OÄ£ÐÍ£ºÕâÊÇNginxÐÔÄÜ׿ԽµÄ»ùʯ¡£´«Í³µÄWeb·þÎñÆ÷£¨ÈçApache£©²ÉÓýø³Ì»òÏß³ÌÄ£ÐÍ£¬Ã¿¸öÇëÇó¶¼»áÏûºÄÒ»¸ö½ø³Ì»òỊ̈߳¬Ôڸ߲¢·¢³¡¾°ÏÂÈÝÒ×Ôì³É×ÊÔ´ºÄ¾¡£¬ÐÔÄÜÆ¿¾±Í¹ÏÔ¡£¶øNginx²ÉÓÃʼþÇý¶¯Ä£ÐÍ£¬ÀûÓÃepoll¡¢kqueueµÈ¸ßЧµÄI/O¶à·¸´Óü¼Êõ£¬Äܹ»Óü«ÉÙµÄ?½ø³ÌºÍÏ̴߳¦Àíº£Á¿²¢·¢Á¬½Ó¡£
»ØÔ´·þÎñÆ÷£º¸ºÔð´æ´¢ÔʼÊÓÆµÎļþ£¬²¢½«ÊÓÆµÄÚÈÝ·Ö·¢¸øCDN½Úµã¡£±ßÔµ½Úµã£¨Èç¹ûNginxÖ±½Ó²¿ÊðÔÚ±ß??Ôµ£©£º¸ºÔðÖ±½ÓÏòÓû§ÌṩÊÓÆµ·þÎñ£¬²¢¶ÔÊÓÆµÄÚÈݽøÐлº´æ¡£¸ºÔؾùºâ£ºNginx¿ÉÒÔ×÷Ϊ¸ºÔؾùºâÆ÷£¬½«CDN½ÚµãµÄ»ØÔ´ÇëÇó·Ö·¢µ½ºó¶ËµÄ¶à¸öÊÓÆµ´æ´¢·þÎñÆ÷¡£
Àí½â²¢ÅäÖÃÁ÷ýÌåÐÒ飺ÊÓÆµ´«Êä²»½ö½öÊǼòµ¥µÄÎļþÏÂÔØ£¬¸ü¶àʱºòÐèÒªÓõ½×¨ÃŵÄÁ÷ýÌåÐÒ飬ÈçHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)¡£ÕâЩÐÒéÄܹ»½«ÊÓÆµ·Ö¸î³ÉСƬ¶Î£¬²¢¸ù¾ÝÓû§µÄÍøÂç´ø¿í¶¯Ì¬µ÷Õû²¥·ÅµÄÊÓÆµÂëÂÊ£¬´Ó¶øÊµÏÖ¸üÁ÷³©µÄ²¥·ÅÌåÑé¡£
HLS£ºNginx¿ÉÒÔͨ¹ýngx_http_flv_moduleµÈÄ£¿é£¬ÅäºÏffmpegµÈ¹¤¾ß£¬½«ÔʼÊÓÆµ×ª»»ÎªHLS¸ñʽ£¨.m3u8²¥·ÅÁбíºÍ.tsÊÓÆµÆ¬¶Î£©¡£NginxÖ±½ÓÌṩÕâЩÎļþ£¬¿Í»§¶Ë¸ù¾Ý.m3u8Îļþ¶¯Ì¬ÇëÇó.tsƬ¶Î¡£
»º´æÊÇÌáÉýÊÓÆµ·þÎñÐÔÄܵĹؼüÊֶΡ£NginxÌṩÁ˶àÖÖÇ¿´óµÄ»º´æ»úÖÆ£º
ä¯ÀÀÆ÷»º´æ£ºÍ¨¹ýÉèÖÃExpires»òCache-ControlÏìӦͷ£¬¿ÉÒÔÖ¸µ¼ä¯ÀÀÆ÷»º´æÊÓÆµÎļþ¡£µ±Óû§ÔٴηÃÎÊͬһÊÓÆµÊ±£¬¿ÉÒÔÖ±½Ó´Óä¯ÀÀÆ÷»º´æ¼ÓÔØ£¬ÎÞÐè´Ó·þÎñÆ÷ÖØÐÂÏÂÔØ£¬¼«´óµØ½ÚÊ¡ÁË´ø¿íºÍ¼ÓÔØÊ±¼ä¡£
Nginx×ÔÉí»º´æ£¨ProxyCache£©£ºNginx¿ÉÒÔÅäÖÃΪ½«ºó¶Ë·þÎñÆ÷µÄÏìÓ¦»º´æµ½±¾µØ´Å?ÅÌ¡£µ±Óû§ÔÙ´ÎÇëÇóÏàͬµÄÊÓÆµÊ±£¬Nginx»áÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬¶øÎÞÐèÇëÇóºó¶Ë·þÎñÆ÷¡£Õâ¶ÔÓڵ㲥ÊÓÆµÓÈΪÓÐЧ¡£ÅäÖÃproxy_cache_pathÖ¸ÁÒ建´æÄ¿Â¼ºÍ²ÎÊý£¬proxy_cacheÖ¸ÁîÆôÓûº´æ?£¬proxy_cache_validÖ¸ÁîÉèÖò»Í¬ÀàÐÍÏìÓ¦µÄ»º´æÊ±¼ä¡£
ͨ¹ýºÏÀíµÄ»º´æ²ßÂÔ£¬¿ÉÒÔÏÔÖø½µµÍºó¶Ë·þÎñÆ÷µÄѹÁ¦£¬ÌáÉýÏìÓ¦ËÙ¶È¡£
CDN»º´æ£ºÈçǰËùÊö£¬½«Nginx×÷ΪCDN½Úµã£¬¿ÉÒÔÀûÓÃCDNµÄÈ«Çò·Ö²¼Ê½»º´æÄÜÁ¦¡£CDN½Úµã»á½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄ·þÎñÆ÷ÉÏ£¬Óû§·ÃÎÊʱ´Ó?×î½üµÄ½Úµã»ñÈ¡£¬ÊµÏÖ½üºõʵʱµÄ¼ÓÔØËÙ¶È¡£
²¢·¢Á¬½ÓµÄ¹ÜÀí£ºworker_processes¡¢worker_connectionsÊÇNginx´¦Àí¸ß²¢?·¢µÄ¹Ø¼ü²ÎÊý¡£ÐèÒª¸ù¾Ý·þÎñÆ÷CPUºËÐÄÊýºÍÄÚ´æ´óСÀ´ºÏÀíÉèÖá£keepalive_timeoutµÄÉèÖÃÒ²Ó°Ïì×ÅÁ¬½ÓµÄ¸´ÓÃÂÊ¡£
»º´æ²ßÂÔµÄÓÅ»¯£º¶ÔÓÚ¸ßÆµ·ÃÎʵÄÊÓÆµ£¬ÀûÓÃNginxµÄproxy_cache¹¦ÄÜ¿ÉÒÔ¼«´óµØ¼õÇáºó¶Ë·þÎñÆ÷µÄѹÁ¦¡£ÉèÖúÏÀíµÄ»º´æ¼ü¡¢»º´æ¹ýÆÚʱ¼äÒÔ¼°»º´æÄÚÈÝ£¬Äܹ»ÏÔÖøÌáÉýµã²¥µÄÏìÓ¦ËÙ¶È¡£
Ó²¼þÓëÍøÂçµÄÐͬ£ºNginxµÄÐÔÄÜ·¢»ÓÒ²Êܵ½µ×²ãÓ²¼þºÍÍøÂç»·¾³µÄÖÆÔ¼¡£SSDÓ²ÅÌ¡¢¸ß´ø¿íÍø¿¨¡¢µÍÑÓ³ÙµÄÍøÂçÁ¬½Ó£¬ÒÔ¼°ÓÅ»¯µÄÍøÂçÐÒéÕ»£¬¶¼ÊÇʵÏÖ¡°100%¡±ÊÓÆµÐÔÄܲ»¿É»òȱµÄ×é³É²¿·Ö¡£
Nginx100%ÊÓÆµÐÔÄÜ£º´Ó?»ù´¡ÅäÖõ½¸ß¼¶½ø½×µÄÈ«·½Î»½âÎö
ÔÚÉÏÒ»²¿·Ö£¬ÎÒÃÇÉîÈë̽ÌÖÁËNginxÔÚÊÓÆµÁ÷ýÌåÁìÓòµÄ?ºËÐÄÓÅÊÆ¼°ÆäʵÏÖ¡°100%¡±ÐÔÄܵÄÀíÂÛ»ù´¡¡£ÏÖÔÚ£¬ÎÒÃǽ«¾Û½¹ÓÚ¾ßÌåµÄʵ¼ù²ãÃæ£¬´Ó»ù´¡ÅäÖÃÈëÊÖ£¬Öð²½½ø½×µ½¸ü¸ß¼¶µÄÓÅ»¯¼¼ÇÉ£¬°ïÖúÄúÕæÕý½âËøNginxµÄÊÓÆµÁ÷ýÌåDZÁ¦¡£
Õâ¶ÔÓÚһЩ²¥·ÅÆ÷»á»º´æÊÓÆµÆ¬¶ÎµÄ³¡¾°·Ç³£ÓÐЧ£¬Äܹ»¼õÉÙÖØ¸´ÏÂÔØ£¬ÌáÉýÓû§ÔÚ²»Í¬ÊÓÆµ¼äÇл»µÄÁ÷³©¶È¡£CDN¼¯³É£º¶ÔÓÚ´ó¹æÄ£µÄÊÓÆµ·þÎñ£¬Nginx³£³£ÓëCDNÐͬ¹¤×÷¡£Nginx¿ÉÒÔ×÷ΪCDNµÄ±ßÔµ½Úµã£¬»òÕß×÷ΪԴվµÄ¸ºÔؾùºâÆ÷£¬½«Á÷Á¿·Ö·¢µ½¶à¸öCDN½Úµã¡£
CDNµÄ?·Ö²¼?Ê½ÌØÐÔÄܹ»½«ÊÓÆµÄÚÈÝÍÆË͵½ÀëÓû§¸ü½üµÄµØÀíλÖ㬽øÒ»²½½µµÍÑÓ³Ù£¬ÊµÏÖÈ«Çò·¶Î§ÄڵĿìËÙ·ÃÎÊ¡£NginxÔڴ˹ý³ÌÖУ¬¸ºÔðÓëCDN½øÐиßЧµÄͨÐÅ£¬²¢¿ÉÄܰçÑÝÄÚÈÝÔ¤ÈÈ¡¢»º´æ?¹ÜÀíµÈ½ÇÉ«¡£
ÆôÓÃTCPNODELAYºÍTCPNOPUSH£ºtcp_nodelayon;²ÎÊý¿ÉÒÔ½ûÓÃNagleËã·¨£¬Ëü»á³¢ÊÔ½«Ð¡µÄÊý¾Ý°ü¾ÛºÏÆðÀ´Ò»Æð·¢ËÍ£¬ÕâÔÚÍøÂçÑӳٽϸßʱ¿ÉÄܵ¼ÖÂÏûÏ¢ÑÓ³Ù¡£¶ÔÓÚÊÓÆµÁ÷£¬¼´Ê¹ÊÇСµÄÊý¾Ý¿éÒ²ÐèÒª¾¡¿ì·¢ËÍ£¬ÒÔ±£Ö¤ÊµÊ±ÐÔ¡£
tcp_nopushon;ÔòÔÊÐíNginxÔÚ·¢ËÍÎļþÄÚÈÝ֮ǰ£¬¾¡¿ÉÄÜ¶àµØ½«ÏìӦͷһ´ÎÐÔ·¢ËͳöÈ¥£¬ÕâÒ²ÄÜÓÅ»¯ÐÔÄÜ¡£
¶þ¡¢ÊÓÆµÁ÷ýÌåרÏîÓÅ»¯£ºHLS/DASHÓëRTMPµÄÉî¶ÈÕûºÏ
¶ÔÓÚÊÓÆµÁ÷ýÌ壬NginxµÄÅäÖû¹ÐèÒªÕë¶ÔÐԵؿ¼ÂÇHLS/DASHºÍRTMPµÈÐÒéµÄÌØµã½øÐÐÓÅ»¯¡£
add_headerCache-Control"public,max-age=31536000";£º¶ÔÓÚ.m3u8²¥·ÅÁбíÎļþºÍÊÓÆµ·ÖƬ£¬ÉèÖýϳ¤µÄ»º´æÊ±¼ä£¬ÌáÉý²¥·ÅµÄÁ÷³©ÐÔ¡£types{application/vnd.apple.mpegurlm3u8;video/mp2tts;}£ºÈ·±£NginxÕýȷʶ±ðºÍ´«ÊäHLS/DASHÏà¹ØµÄÎļþÀàÐÍ¡£
µ÷ÓŽ¨Ò飺¿¼ÂÇʹÓÃNginxPlus»òµÚÈý·½Ä£¿é£¨Èçnginx-vod-module£©À´Ìṩ¸ü¸ß¼¶µÄÊÓÆµµã²¥£¨VOD£©¹¦ÄÜ£¬ÈçDRM¼ÓÃÜ¡¢ÄÚÈÝ´ò°üµÈ¡£
worker_processesÓëworker_connections£ººÏÀíÉèÖù¤×÷½ø³ÌÊýÁ¿£¨Í¨³£ÓëCPUºËÐÄÊýÏàµÈ£©ºÍÿ¸ö½ø³ÌµÄ×î´óÁ¬½ÓÊý¡£Keep-aliveÉèÖãºkeepalive_timeoutºÍkeepalive_requests²Î?ÊýµÄ?µ÷Õû£¬ÓÃÓÚ¿ØÖƿͻ§¶ËÁ¬½ÓµÄ¸´Ó㬼õÉÙTCPÎÕÊÖ¿ªÏú¡£
»º³åÇøÓ뻺´æ£ºclient_body_buffer_size¡¢proxy_buffer_size¡¢proxy_buffersµÈ²Î?ÊýµÄÉèÖ㬶ÔÓÚ´óÎļþ´«ÊäºÍ´ú?Àí³¡¾°ÖÁ¹ØÖØÒª¡£open_file_cacheÖ¸Áî¿ÉÒÔ»º´æ´ò¿ªµÄÎļþÃèÊö·ûºÍÔªÊý¾Ý£¬ÏÔÖøÌá¸ß¾²Ì¬Îļþ·þÎñµÄÐÔÄÜ¡£
SSL/TLSÓÅ»¯£ºÆôÓÃssl_session_cacheºÍssl_session_timeout£¬ÒÔ¼°Ñ¡Ôñ¸üÓŵÄSSLÃÜÂëÌ×¼þ£¬¿ÉÒÔ½µµÍSSL/TLSÎÕÊֵĿªÏú¡£HTTP/2ºÍHTTP/3£¨QUIC£©µÄÒýÈ룬¸üÊÇΪÊÓÆµ´«Êä´øÀ´ÁËȫеÄËٶȺÍЧÂÊÌáÉý¡£
NginxÒÔÆäÇ¿´óµÄÐÔÄÜ¡¢Áé»îµÄÅäÖÃÒÔ¼°·á¸»µÄÄ£¿éÉú̬£¬³ÉΪÁËÊÓÆµ·þÎñÁìÓò²»¿É»òȱµÄ¹Ø¼ü¼¼Êõ¡£Í¨¹ýÉîÈëÀí½âÆä¹¤×÷ÔÀí£¬²¢¾«Ï¸»¯µØÅäÖø÷Ïî²ÎÊý£¬Äú¿ÉÒÔÓÐЧµØÓ¦¶Ôº£Á¿²¢·¢ÇëÇ󣬴ó·ùÌáÉýÊÓÆµµÄ¼ÓÔØËٶȺͲ¥·ÅÁ÷³©¶È¡£´Ó»ù´¡µÄÁ¬½Ó¹ÜÀíµ½¸ß¼¶µÄÐÒéÓÅ»¯¡¢¸ºÔؾùºâºÍ°²È«²ßÂÔ£¬NginxÌṩÁËÈ«·½Î»µÄ½â¾ö·½°¸£¬ÖúÄú½âËøÁ÷³©Êӽ磬ΪÓû§´øÀ´ÎÞÓëÂױȵÄÊÓÆµ¹Û¿´ÌåÑé¡£
¡°100%ÊÓÆµÐÔÄÜ¡±²¢·ÇÒ£²»?¿É¼°µÄÀíÏ룬¶øÊÇͨ¹ý¶ÔNginxµÄÉîÈëʵ¼ùºÍ³ÖÐøÓÅ»¯£¬¿ÉÒÔÖð²½ÊµÏÖµÄ׿ԽĿ±ê¡£ÈÃÎÒÃÇÒ»ÆðÓµ±§Nginx£¬¼ÝÔ¦ÊÓÆµÊ±´úµÄÅìÅÈÀ˳±£¬ÈÃÿһ´Îµã²¥¡¢Ã¿Ò»´ÎÖ±²¥£¬¶¼³ÉΪһ´ÎË¿»¬¡¢ÓäÔõÄÊÓÌýÏíÊÜ¡£
¶ÔÓÚÊÓÆµµã²¥£¨VOD£©ºÍÖ±²¥£¬HLS£¨HTTPLiveStreaming£©ºÍDASH£¨DynamicAdaptiveStreamingoverHTTP£©ÊÇĿǰ×îÖ÷Á÷µÄÁ½ÖÖÁ÷ýÌåÐÒé¡£Nginxƾ½èÆä³öÉ«µÄHTTP·þÎñÄÜÁ¦£¬Äܹ»ºÜºÃµØÖ§³ÖÕâÁ½ÖÖÐÒé¡£
HLSÅäÖãºNginx¿ÉÒÔÇáËɵØ?×÷ΪHLSÁ÷ýÌå·þÎñÆ÷¡£Í¨¹ýÅäºÏngx_http_flv_module»òÆäËûµÚÈý·½Ä£¿é£¬Nginx¿ÉÒÔ½ÓÊÕRTMPÁ÷£¬²¢½«Æäת»»ÎªHLS¸ñʽ·Ö·¢¡£¹Ø¼üÅäÖðüÀ¨£º
mp4Ä£¿é£ºÓÃÓÚ´¦ÀíMP4Îļþ£¬ÊÇHLSƬ¶ÎµÄ?»ù´¡¡£hls_fragment_duration£ºÉèÖÃÿ¸öÊÓÆµÆ¬¶ÎµÄʱ³¤£¬Ó°Ïì²¥·ÅµÄÁ÷³©¶ÈºÍÑÓ³Ù¡£hls_playlist_length£ºÉèÖò¥·ÅÁбíÖеÄ?ÊÓÆµÆ¬¶ÎÊýÁ¿£¬Ó°ÏìÊÓÆµ»º³åºÍÁбí¸üС£
hls_base_url£ºÉèÖÃHLS²¥·ÅÁбíºÍƬ¶ÎµÄ»ù×¼URL¡£
DASHÅäÖãºNginxͬÑù¿ÉÒÔ¸ßЧµØÖ§³ÖDASH¡£DASHͨ¹ýMPD£¨MediaPresentationDescription£©ÎļþÀ´ÃèÊöýÌåÄÚÈÝ£¬Nginx¿ÉÒÔͨ¹ýÅäÖÃÀ´½âÎöºÍ·Ö·¢MPDÎļþÒÔ¼°¶ÔÓ¦µÄÊÓÆµÆ¬¶Î¡£
ÊÓÆµÄÚÈݵݲȫÐÔÈÕÒæÊܵ½?ÖØÊÓ£¬SSL/TLS¼ÓÃÜÊDZز»?¿ÉÉٵġ£µ«¼ÓÃܺͽâÃܹý³Ì»áÏûºÄÒ»¶¨µÄCPU×ÊÔ´£¬¿ÉÄܶÔÐÔÄܲúÉúÓ°Ïì¡£
TLSv1.3£ºÓÅÏÈʹÓÃTLSv1.3ÐÒé¡£ËüÏà±È֮ǰµÄ°æ±¾£¬ÎÕÊÖ¹ý³Ì¸ü¶Ì£¬Ö§³Ö¸ü¶àµÄ¼ÓÃÜÌ×¼þ£¬²¢ÇÒÔÚÐÔÄÜÉÏÓÐËùÌáÉý¡£OCSPStapling£ºÆôÓÃOCSPStapling¿ÉÒÔÈÃNginxÔÚÌṩ֤ÊéµÄ»º´æOCSPÏìÓ¦¡£
ÕâÑù£¬¿Í»§¶Ë¾Í²»?ÐèÒª¶ÀÁ¢½øÐÐOCSP¼ì²é£¬¼õÉÙÁË·þÎñÆ÷µÄ¸ºµ£ºÍ¿Í»§¶ËµÄÑÓ³Ù¡£SessionResumption£ºÅäÖÃTLSSessionResumptionÔÊÐí¿Í»§¶ËÔÚºóÐøÁ¬½ÓÊ±ÖØÓÃ֮ǰµÄ¼ÓÃܻỰ£¬±ÜÃâÁËÍêÕûµÄTLSÎÕÊÖ¹ý³Ì£¬ÏÔÖø½µµÍÁËÑÓ³Ù¡£
GzipѹËõÓëBrotliѹËõ£º½øÒ»²½¼õС´«ÊäÌå»ý
ËäÈ»ÊÓÆµÎļþ±¾ÉíÒѾÊǸ߶ÈѹËõµÄ¸ñʽ£¬µ«ÊÓÆµµÄÔªÊý¾Ý¡¢Ö±²¥µÄ¿ØÖÆÐÅÏ¢µÈ¿ÉÒÔͨ¹ýGzip»òBrotli½øÐнøÒ»²½Ñ¹Ëõ£¬¼õÉÙ´«Êä´ø¿í¡£
Gzip£ºNginxÄÚÖÃÁËGzipѹËõÄ£¿é£¬¿ÉÒÔͨ¹ýgzipon;¡¢gzip_typesµÈ?Ö¸Áî½øÐÐÅäÖá£Brotli£ºBrotliÊÇGoogle¿ª·¢µÄÒ»ÖÖ¸ü¸ßЧµÄѹËõËã·¨£¬ÓÈÆäÉó¤Ñ¹ËõÎı¾ÀàÊý¾Ý¡£ËäÈ»Nginx¶ÔBrotliµÄÔÉúÖ§³Ö²»ÏñGzipÄÇÑù³ÉÊ죬µ«¿ÉÒÔͨ¹ýµÚÈý·½Ä£¿éʵÏÖ¡£
ÔÚǰһ²¿·Ö£¬ÎÒÃÇÒѾΪNginxÊÓÆµÓÅ»¯´òÏÂÁ˼áʵµÄ»ù´¡£¬Á˽âÁËÆäºËÐÄÓÅÊÆºÍ»ù´¡ÅäÖü¼ÇÉ¡£ÒªÊµÏÖÕæÕýÒâÒåÉϵġ°100%ÊÓÆµÓÅ»¯¡±£¬½ö½öÍ£ÁôÔÚ»ù´¡²ãÃæÊÇÔ¶Ô¶²»¹»µÄ¡£ÊÓÆµÁ÷µÄ´«ÊäÉæ¼°µ½ÍøÂç¡¢·þÎñÆ÷¡¢¿Í»§¶ËµÈ¶à¸ö»·½Ú£¬ÈκÎÒ»¸ö»·½ÚµÄÆ¿¾±¶¼¿ÉÄܵ¼ÖÂÓû§ÌåÑéµÄϽµ¡£
Òò´Ë£¬ÎÒÃÇÐèÒª½øÒ»²½ÉîÈ룬̽Ë÷NginxÔÚCDN¼¯³É¡¢Á÷ýÌåÐÒéÓÅ»¯¡¢ÐÔÄÜ¼à¿ØÒÔ¼°°²È«·À»¤µÈ·½ÃæµÄ½ø½×Ó¦Óá£
¸ß²¢·¢´¦ÀíÄÜÁ¦£ºÊÓÆµÁ÷µÄ´«Êäͨ³£Éæ¼°´óÁ¿µÄÁ¬½Ó£¬NginxÄܹ»ÇáËÉÓ¦¶ÔÊýÒÔÍò¼ÆÉõÖÁÊýÊ®Íò¼ÆµÄ²¢·¢Á¬½Ó£¬±£Ö¤Ã¿¸öÓû§¶¼ÄÜ»ñµÃÎȶ¨Á÷³©µÄ²¥·Å·þÎñ¡£¸ßЧµÄ¾²Ì¬Îļþ·þÎñ£ºÊÓÆµÎļþ±¾Éí¾ÍÊǾ²Ì¬×ÊÔ´£¬NginxÔÚ¾²Ì¬Îļþ·þÎñ·½ÃæÓµÓÐÎ޿ɱÈÄâµÄ?ÓÅÊÆ£¬ÆäÓÅ»¯µÄÎļþI/OºÍÄÚ´æ¹ÜÀí£¬Äܹ»ÒÔ×î¿ìµÄËٶȽ«ÊÓÆµÊý¾ÝÍÆË͸ø¿Í»§¶Ë¡£
Áé»îµÄÄ£¿é»¯Éè¼Æ£ºNginxÓµÓзḻµÄÄ£¿é£¬¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇó½øÐмÓÔØºÍÅäÖã¬ÀýÈçngx_http_flv_module¡¢ngx_http_mp4_moduleµÈ£¬ÕâЩģ¿éרÃÅÕë¶ÔÊÓÆµÁ÷µÄ´«Êä½øÐÐÁËÓÅ»¯¡£·´Ïò´úÀíÓë¸ºÔØ¾ùºâ£º½áºÏCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩»òÄÚ²¿¸ºÔؾùºâ£¬Nginx¿ÉÒÔ½«ÊÓÆµÇëÇó·Ö·¢µ½¶ą̀·þÎñÆ÷£¬·ÖɢѹÁ¦£¬Ìá¸ßÕûÌåµÄ¿ÉÓÃÐÔºÍÐÔÄÜ¡£
CDN¼¯³É£º¶ÔÓÚÃæÏòÈ«ÇòÓû§µÄÊÓÆµ·þÎñ£¬½«Nginx²¿ÊðÔÚCDNµÄ±ßÔµ½ÚµãÉÏÊÇʵÏÖµÍÑÓ³Ù¡¢¸ß¿ÉÓÃÐԵĹؼü¡£Nginx¿ÉÒÔ×÷ΪCDN±ßÔµ½ÚµãµÄºËÐÄ£¬´¦ÀíÀ´×ÔÓû§µÄÇëÇ󣬲¢´Ó×î½üµÄ½ÚµãÌṩ»º´æÄÚÈÝ¡£Èç¹û±ßÔµ½Úµã»º´æÎ´ÃüÖУ¬Nginx»á»ØÔ´µ½?ÖÐÐÄ´æ´¢»òÔ´Õ¾»ñÈ¡ÄÚÈÝ£¬²¢½«Ê״ηÃÎʵÄ?ÄÚÈÝ»º´æµ½±ßÔµ½Úµã£¬¹©ºóÐøÓû§Ê¹Óá£
ÕâÖÖ·Ö²¼Ê½»º´æ²ßÂÔ¼«´óµØËõ¶ÌÁËÓû§·ÃÎʵÄÎïÀí¾àÀ룬ÏÔÖøÌáÉýÁ˼ÓÔØËÙ¶È¡£
ä¯ÀÀÆ÷»º´æ¿ØÖÆ£ºNginx»¹¿ÉÒÔͨ¹ýÉèÖÃExpiresºÍCache-ControlÏìӦͷ£¬Ö¸µ¼Óû§µÄä¯ÀÀÆ÷½øÐлº´æ¡£Õâ¶ÔÓÚһЩ²»¾³£±ä¶¯µÄÊÓÆµÔªÊý¾Ý»ò²¥·ÅÆ÷×ÊÔ´·Ç³£ÓÐЧ£¬Äܹ»½øÒ»²½¼õÉÙÍøÂçÇëÇó´ÎÊý¡£
ͨ¹ý¾«Ï¸»¯µÄ»º´æ²ßÂÔÅäÖã¬NginxÄܹ»ÓÐЧµØ½«´óÁ¿Öظ´µÄÊÓÆµÇëÇóÀ¹½ØÔÚ±ßÔµ£¬½«±¦¹óµÄ·þÎñÆ÷×ÊÔ´Áô¸ø´¦ÀíÕæÕýÐèÒª¶¯Ì¬Éú³ÉµÄÄÚÈÝ£¬´Ó¶øÎªÓû§Ìṩ½Ó½ü¡°Ã뿪¡±µÄ¹ÛÓ°ÌåÑé¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖNginxÔÚ´«ÊäÐÒéºÍʵʱÁ÷ýÌå·½ÃæµÄÓÅ»¯£¬½øÒ»²½½âËø100%Á÷³©ÊÓÆµµÄ°ÂÃØ¡£
NginxÊÓÆµÓÅ»¯ºËÐIJßÂÔ¶þ£ºÐÒéµÄÑݽøÓë´«ÊäµÄ¼«Ö¡ª¡ªÈÃÊÓÆµ¡°ÅÜ¡±µÃ¸ü¿ì
proxy_cache£º¶ÔÓÚCDN³¡?¾°£¬ÉèÖÃproxy_cache_key¡¢proxy_cache_valid¡¢proxy_cache_min_usesµÈ²ÎÊý£¬¾«Ï¸¿ØÖÆ»º´æµÄÄÚÈݺÍʱ³¤¡£open_file_cache£º»º´æ´ò¿ªµÄÎļþÃèÊö·ûºÍÔªÊý¾Ý£¬¼õÉÙopen()ºÍstat()µÈϵͳµ÷Óã¬Ìá¸ßÎļþ·ÃÎÊËÙ¶È¡£
open_file_cachemax=1000inactive=20s;open_file_cache_valid30s;open_file_cache_min_uses2;open_file_cache_errorsoff;
¸ºÔؾùºâÓë¸ß¿ÉÓ㺵±µ¥Ì¨·þÎñÆ÷ÎÞ·¨Âú×ãÐèÇóʱ£¬NginxµÄ¸ºÔؾùºâÄÜÁ¦¾ÍÏÔµÃÓÈÎªÖØÒª¡£Í¨¹ýupstreamÄ£¿é£¬¿ÉÒÔ½«Á÷Á¿·Ö·¢µ½¶ą̀ºó¶Ë·þÎñÆ÷£¬²¢ÅäºÏkeepaliveºÍhealth_checkÄ£¿é£¬ÊµÏָ߿ÉÓÃÐÔ¡£
upstreamvideo_backend{serverbackend1.example.com;serverbackend2.example.com;#...}server{#...location/{proxy_passhttp://video_backend;#...»º´æºÍÆäËû´úÀíÅäÖÃ...}}
Nginx²¢?·ÇÌìÉú¾ÍÊÇÊÓÆµÁ÷ýÌå·þÎñÆ÷£¬µ«ÆäÇ¿´óµÄÀ©Õ¹ÐÔÔÊÐíÎÒÃÇͨ¹ý¼ÓÔØÌØ¶¨µÄÄ£¿éÀ´¸³ÓèËüÇ¿´óµÄÊÓÆµ´¦ÀíÄÜÁ¦¡£
RTMPÄ£¿é£ºÖ±²¥µÄºËÐÄÒýÇæ¶ÔÓÚʵʱÊÓÆµÁ÷£¬RTMP(Real-TimeMessagingProtocol)ÊÇĿǰ×îÖ÷Á÷µÄÐÒéÖ®Ò»¡£Í¨¹ý°²×°nginx-rtmp-module£¬Nginx¿ÉÒÔÇáËÉתÐÍΪǿ´óµÄRTMP·þÎñÆ÷¡£
ËüÄܹ»½ÓÊÕÀ´×ÔOBS¡¢FFmpegµÈÍÆÁ÷¶ËµÄÊÓÆµÁ÷£¬²¢½«Æä·Ö·¢¸ø´óÁ¿¹ÛÖÚ¡£Õâ¸öÄ£¿é²»½öÖ§³ÖRTMPÍÆÁ÷ºÍ²¥·Å£¬»¹ÌṩÁËHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)µÄתÂëºÍ·Ö·¢ÄÜÁ¦£¬¼«´óµØ?À©Õ¹ÁËNginxµÄÊÓÆµ´¦Àí·¶Î§¡£
HTTPÄ£¿é£ºµã²¥µÄ¼áʵºó¶Ü¶ÔÓÚÊÓÆµµã²¥£¬NginxµÄÔÉúHTTPÄ£¿éÒѾ×㹻ǿ´ó¡£Í¨¹ýÅäÖÃsendfileÖ¸ÁNginx¿ÉÒÔʵÏÖÁ㿽±´µÄÎļþ´«Ê䣬½«ÊÓÆµÎļþÖ±½Ó´Ó´ÅÅÌ·¢Ë͵½ÍøÂç½Ó¿Ú£¬´ó´ó¼õÉÙCPUµÄ¿ªÏúºÍÄڴ濽±´µÄ´ÎÊý¡£
aio(AsynchronousI/O)µÄÖ§³Ö½øÒ»²½ÌáÉýÁËNginx´¦Àí´óÎļþI/OµÄЧÂÊ¡£
¼´Ê¹ÊÇĬÈÏÅäÖã¬NginxµÄÐÔÄÜÒ²ÒÑÏ൱³öÉ«£¬µ«Í¨¹ýһЩ»ù´¡µÄ²ÎÊýµ÷Õû£¬¿ÉÒÔÏÔÖøÌáÉýÆäÔÚÊÓÆµÁ÷ýÌ峡¾°ÏµıíÏÖ¡£
Worker½ø³ÌÓëCPUºËÐĵÄÓ³É䣺NginxµÄworker_processes²ÎÊý¾ö¶¨Á˹¤×÷½ø³ÌµÄÊýÁ¿¡£Í¨³£½¨Ò齫ÆäÉèÖÃΪÓë·þÎñÆ÷CPUºËÐÄÊýÒ»Ö£¬»òÕßÂÔÉÙÓÚCPUºËÐÄÊý¡£ÕâÑù¿ÉÒÔ³ä·ÖÀûÓöàºËCPUµÄ²¢Ðд¦?ÀíÄÜÁ¦£¬±ÜÃâÒò½ø³ÌÊý¹ý¶àµ¼ÖµÄÉÏÏÂÎÄÇл»¿ªÏú¡£
ÀýÈ磬Èç¹ûÄúµÄ·þÎñÆ÷ÓÐ8¸öCPUºËÐÄ£¬¿ÉÒÔÉèÖÃworker_processes8;¡£
WorkerÁ¬½ÓÊý£ºworker_connections²ÎÊý¶¨ÒåÁËÿ¸ö¹¤×÷½ø³ÌÄܹ»´¦ÀíµÄ×î´ó²¢·¢Á¬½ÓÊý¡£Õâ¸öÖµÐèÒª¸ù¾ÝÄúµÄ·þÎñÆ÷ÄÚ´æºÍʵ¼ÊµÄ?²¢·¢ÐèÇóÀ´É趨¡£Ò»¸ö½Ï¸ßµÄ?worker_connectionsÖµÒâζ×Åÿ¸ö¹¤×÷½ø³Ì¿ÉÒÔͬʱ¹ÜÀí¸ü¶àµÄÁ¬½Ó£¬µ«Ò²Òª×¢ÒâÄÚ´æÏûºÄ¡£
¶ÔÓÚÊÓÆµÁ÷ýÌ壬¿¼Âǵ½Ã¿¸öÁ¬½Ó¿ÉÄÜÐèÒª½Ï³¤Ê±¼äµÄ±£³Ö£¨ÓÈÆäÊÇÔÚÖ±²¥ÖУ©£¬ÉèÖÃÒ»¸öºÏÀíµÄÖµ·Ç³£ÖØÒª¡£¹«Ê½max_clients=worker_processes*worker_connections¿ÉÒÔ°ïÖúÄú¹ÀËãÕû¸ö·þÎñÆ÷Äܹ»Ö§³ÖµÄ×î´ó²¢·¢Á¬½ÓÊý¡£
ÀýÈ磬µ±Óû§ÇëÇóijÖÖÌØ¶¨·Ö±æÂÊ»ò¸ñʽµÄÊÓÆµÊ±£¬Nginx¿ÉÒÔ´¥·¢ºó¶Ë·þÎñ½øÐÐʵʱתÂ룬²¢½«×ªÂëºóµÄÊÓÆµÁ÷¿ìËÙÍÆË͸øÓû§¡£×îа汾ÔÚÓëÍⲿ½ø³ÌͨÐź͹ÜÀí·½ÃæÒ²½øÐÐÁËÓÅ»¯£¬Ê¹µÃÕâÖÖ¼¯³É¸ü¼ÓÁ÷³©¸ßЧ¡£µÍÑÓ³ÙÖ±²¥µÄ̽Ë÷£º¶ÔÓÚ¶ÔÑÓ³ÙÒªÇ󼫸ߵÄ?Ö±²¥³¡¾°£¬Nginx×îа汾?Ò²ÔÚ»ý¼«Ì½Ë÷ºÍÖ§³Ö¸üµÍÑӳٵĴ«ÊäÐÒ飬ÀýÈçWebRTCµÄ¼¯³É¡£
ËäÈ»WebRTCµÄʵÏÖÏà¶Ô¸´ÔÓ£¬µ«NginxµÄ¿ª·ÅÐÔºÍÁé»îÐÔΪÆäÌṩÁËÁ¼ºÃµÄ»ù´¡£¬Î´À´ÓÐÍûÔÚµÍÑÓ³ÙÖ±²¥ÁìÓò°çÑݸüÖØÒªµÄ?½ÇÉ«¡£
ÒªÕæÕýʵÏÖ¡°Nginx100ÊÓÆµ¡±µÄ¼«ÖÂÐÔÄÜ£¬¾«Ï¸µÄÅäÖÃÓÅ»¯ÊDZز»¿ÉÉٵġ£Õâ°ü?À¨£º
µ÷ÕûWorker½ø³ÌºÍÁ¬½ÓÊý£º¸ù¾Ý·þÎñÆ÷µÄCPUºËÐÄÊýºÍÄÚ´æ´óС£¬ºÏÀíÅäÖÃworker_processesºÍworker_connections£¬ÒÔ×î´ó»¯²¢·¢´¦ÀíÄÜÁ¦¡£TCP/IP²ÎÊýÓÅ»¯£ºµ÷ÕûLinuxÄں˵ÄTCP/IPÏà¹Ø²Î?Êý£¬Èçnet.core.somaxconn¡¢net.ipv4.tcp_tw_reuseµÈ£¬ÒÔÌá¸ßÍøÂçÍÌÍÂÁ¿ºÍÁ¬½ÓЧÂÊ¡£
ÆôÓÃKeep-alive£ººÏÀíÅäÖÃkeepalive_timeoutºÍkeepalive_requests£¬±£³Ö³¤Á¬½Ó£¬¼õÉÙ½¨Á¢ÐÂÁ¬½ÓµÄ¿ªÏú£¬¶ÔÓÚÊÓÆµÁ÷´«ÊäÓÈÎªÖØÒª¡£»º³åÇøÓÅ»¯£ºµ÷ÕûNginxµÄclient_body_buffer_size¡¢output_buffersµÈ²ÎÊý£¬ÓÅ»¯Êý¾Ý¶Áд»º³åÇø£¬ÌáÉý´¦ÀíЧÂÊ¡£
ÆôÓÃHTTP/2»òHTTP/3£ºÈ·±£NginxÅäÖÃÖ§³Ö×îеÄHTTPÐÒ飬ÒÔ»ñµÃ¸üºÃµÄ´«ÊäÐÔÄÜ¡£
ͨ¹ý¶ÔÕâЩ²ÎÊýµÄ¾«Ðĵ÷ÓÅ£¬NginxµÄÐÔÄÜ¿ÉÒԵõ½ÏÔÖøÌáÉý£¬´Ó¶ø¸ü½Ó½ü¡°Nginx100ÊÓÆµ¡±Ëù´ú?±íµÄÇ¿´ó´¦ÀíÄÜÁ¦¡£
tcp_nopushon;³¢ÊÔÔÚ·¢ËÍÏìӦͷÐÅÏ¢ºó£¬¾¡Á¿µÈ´ý¸ü¶àµÄÊý¾ÝÒ»Æð·¢ËÍ£¬ÒÔ¼õÉÙ´«ÊäµÄTCPÊý¾Ý°üÊýÁ¿£¬Ìá¸ß´«ÊäЧÂÊ¡£tcp_nodelayon;½ûÓÃNagleËã·¨£¬ÕâÒâζ×ÅNginx»á¾¡¿ÉÄÜ¿ìµØ·¢ËÍÿһ¸öTCPÊý¾Ý°ü£¬±ÜÃâÁËÊý¾Ý°üµÄÀÛ»ýµÈ´ý£¬¶ÔÓÚʵʱÐÔÒªÇó½Ï¸ßµÄÖ±²¥Á÷´«?Êä·Ç³£ÓÐÒæ¡£
keepalive_timeout£º³¤Á¬½Ó¿ÉÒÔ¼õÉÙ¿Í»§¶ËÓë·þÎñÆ÷½¨Á¢ÐÂÁ¬½ÓµÄ¿ªÏú¡£Êʵ±ÉèÖÃkeepalive_timeout£¬ÔÊÐí¿Í»§¶ËÔÚÒ»¶¨Ê±¼äÄÚ±£?³ÖÁ¬½Ó£¬Õâ¶ÔÓÚÐèÒª³ÖÐø´«ÊäÊý¾ÝµÄÊÓÆµÁ÷ýÌåÓÈÆäÖØÒª¡£µ«Ò²Òª×¢Ò⣬¹ý³¤µÄkeepalive_timeout¿ÉÄÜ»áÕ¼Óùý¶àµÄ·þÎñÆ÷×ÊÔ´£¬ÐèÒª¸ù¾Ýʵ¼ÊÇé¿ö½øÐÐȨºâ¡£
Îļþ¾ä±úÏÞÖÆ£ºNginx×÷Ϊһ¸ö¸ßÐÔÄܵķþÎñÆ÷£¬ÐèÒª´¦?Àí´óÁ¿µÄ²¢·¢Á¬½Ó£¬Ã¿¸öÁ¬½Ó¶¼ÐèÒªÒ»¸öÎļþ¾ä±ú¡£Òò´Ë£¬Îñ±Ø?ÔÚ²Ù×÷ϵͳ²ãÃæÌá¸ßÎļþ¾ä±úµÄ?ÏÞÖÆ¡£¿ÉÒÔͨ¹ýÐÞ¸Ä/etc/security/limits.confÎļþÀ´ÉèÖÃnofileµÄ×î´óÖµ£¬È·±£NginxÄܹ»´ò¿ª×ã¹»¶àµÄ?Îļþ¾ä±ú¡£
ÊÓÆµ¼ÓÔØËÙ¶ÈÊÇÓ°ÏìÓû§Áô´æÂʵĹؼüÒòËØ¡£Nginx×îа汾¶ÔHTTP/2ÉõÖÁ¸üÏȽøµÄHTTP/3ÐÒéÌṩÁ˳öÉ«µÄÔÉúÖ§³Ö£¬ÕâΪ¼ÓËÙÊÓÆµ¼ÓÔØ´øÀ´Á˸ïÃüÐÔµÄ?¸Ä±ä¡£HTTP/2ÒýÈëµÄ¶à·¸´Óü¼Êõ£¬ÔÊÐíÔÚÒ»¸öTCPÁ¬½ÓÉϲ¢Ðд«Êä¶à¸öÊÓÆµÎļþ»òÊý¾Ý¿é£¬ÏÔÖø¼õÉÙÁËÁ¬½Ó½¨Á¢µÄ¿ªÏúºÍÒ³Ãæ¼ÓÔØÊ±¼ä¡£
¶øHTTP/3Ôò½øÒ»²½»ùÓÚQUICÐÒ飬ͨ¹ý¸ü¿ìµÄÁ¬½Ó½¨Á¢ËÙ¶È¡¢Ïû³ý¶ÓÍ·×èÈûÒÔ¼°¸üÖÇÄܵÄÓµÈû¿ØÖÆ£¬ÔÚ²»Îȶ¨µÄÍøÂç»·¾³ÏÂÒ²ÄÜÌṩ¸ü¿É¿¿¡¢¸ü¿ìËÙµÄÊÓÆµ´«Êä¡£¶ÔÓÚÊÓÆµµã²¥·þÎñ¶øÑÔ£¬ÕâÒâζ×ÅÓû§¿ÉÒÔÔÚ¼«¶ÌµÄʱ¼äÄÚ¿ªÊ¼¹Û¿´£¬´ó´óÌáÉýÁËÓû§µÄÂúÒâ¶ÈºÍת»¯ÂÊ¡£
ÔÚNginxÖÐʵÏÖ100%µÄÊÓÆµÐÔÄÜ£¬²¢·ÇÒ»õí¶ø¾Í£¬¶øÊÇÐèҪϸÖÂÈë΢µÄÅäÖÃÓÅ»¯¡£´Ó»ù´¡µÄ·þÎñÆ÷ÅäÖÿªÊ¼£¬Ã¿Ò»²½¶¼ÖÁ¹ØÖØÒª¡£
WorkerprocessesºÍWorkerconnections£º
worker_processes£ºÕâ¸öÖ¸Áî¾ö¶¨ÁËNginx¹¤×÷½ø³ÌµÄÊýÁ¿¡£Í¨³£Çé¿öÏ£¬½¨Ò齫ÆäÉèÖÃΪCPUºËÐÄÊý£¬»òÕßCPUºËÐÄÊýµÄÁ½±¶¡£ÕâÑù¿ÉÒÔ³ä·ÖÀûÓöàºËCPUµÄ?¼ÆËãÄÜÁ¦£¬Ìá¸ß²¢·¢´¦ÀíÄÜÁ¦¡£worker_connections£ºÕâ¸öÖ¸ÁîÖ¸¶¨ÁËÿ¸ö¹¤×÷½ø³ÌÄܹ»´¦ÀíµÄ×î´ó²¢·¢Á¬½ÓÊý¡£
ÔÚÊÓÆµ·þÎñ³¡?¾°Ï£¬Óû§Í¬Ê±¹Û¿´ÊÓÆµ²úÉúµÄÁ¬½ÓÊý»á·Ç³£ÅÓ´ó£¬Òò´ËÐèÒª¸ù¾Ý·þÎñÆ÷µÄÄÚ´æºÍ´ø¿íÇé¿ö£¬½«worker_connectionsÉèÖõÃ×ã¹»¸ß¡£ÀýÈ磬¿ÉÒÔÉèÖÃΪ1024»ò¸ü¸ß¡£
¡°100%ÊÓÆµÐÔÄÜ¡±²»ÊÇÒ»õí¶ø¾ÍµÄ£¬ÐèÒª³ÖÐøµÄ¼à¿ØºÍµ÷ÓÅ¡£
NginxStatusÄ£¿é£ºÆôÓÃNginxµÄstub_statusÄ£¿é£¬¿ÉÒÔʵʱ²é¿´NginxµÄÁ¬½ÓÊý¡¢ÇëÇóÊýµÈ¹Ø¼üÖ¸±ê¡£µÚÈý·½¼à¿Ø¹¤¾ß£º¼¯³ÉPrometheus¡¢Grafana¡¢ELK(Elasticsearch,Logstash,Kibana)µÈ¹¤¾ß£¬¶ÔNginxµÄÐÔÄÜÖ¸±ê¡¢´íÎóÈÕÖ¾¡¢·ÃÎÊÈÕÖ¾½øÐÐÈ«ÃæµÄÊÕ¼¯¡¢·ÖÎöºÍ¿ÉÊÓ»¯£¬¼°Ê±·¢ÏÖÐÔÄÜÆ¿¾±¡£
ѹÁ¦²âÊÔ£º¶¨ÆÚ½øÐÐѹÁ¦²âÊÔ£¬Ä£ÄâÕæÊµÓû§³¡¾°£¬ÕÒ³ö?NginxÔڸ߸ºÔØÏµÄ?ÐÔÄܼ«ÏÞ£¬²¢¸ù¾Ý²âÊÔ½á¹û½øÐвÎÊýµ÷Õû¡£
µÚ¶þÕ£ºNginxµÄÊÓÆµÓÅ»¯½ø½×£º´ÓCDNµ½?¶¯Ì¬ÏìÓ¦µÄÉî¶Èµñ×Á
ÔÚÕÆÎÕÁËNginxÔÚÊÓÆµÓÅ»¯·½ÃæµÄ»ù´¡ÄÜÁ¦Ö®ºó£¬ÎÒÃÇÐèÒª½øÒ»²½ÉîÈ룬½âËøÆä¸ü¸ß¼¶µÄÌØÐÔ£¬½«ÊÓÆµ²¥·ÅÌåÑéÍÆÏò¼«Ö¡£ÕâÉæ¼°µ½ÈçºÎÀûÓÃNginx¹¹½¨¸ßЧµÄCDN¼Ü¹¹£¬ÈçºÎ½øÐо«Ï¸»¯µÄÁ÷Á¿¹ÜÀíºÍ¶¯Ì¬ÏìÓ¦£¬ÒÔ¼°ÈçºÎÓ¦¶ÔÊÓÆµÁ÷ýÌå´«ÊäÖеĸ÷ÖÖÌôÕ½¡£
2.1¹¹½¨¸ßЧµÄCDN±ßÔµ½Úµã£º¾Í½ü·ÃÎÊ£¬½µµÍÑÓ³ÙÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©ÊÇÏÖ´úÊÓÆµÁ÷ýÌå·þÎñ²»¿É»òȱµÄ×é³É²¿·Ö¡£Nginx×÷ΪһÖÖ¸ßÐÔÄܵÄWeb·þÎñÆ÷£¬ÌìÈ»ÊʺÏ×÷ΪCDNµÄ±ßÔµ½Úµã¡£Í¨¹ýÔÚÈ«Çò·¶Î§ÄÚ²¿ÊðNginx·þÎñÆ÷£¬¿ÉÒÔ½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄ?µØ?ÀíλÖ㬴ӶøÏÔÖø½µµÍ·ÃÎÊÑÓ³Ù£¬Ìá¸ß²¥·ÅÁ÷³©¶È¡£
Nginx×÷Ϊ»ØÔ´´úÀí:CDN±ßÔµ½Úµã£¨Nginx£©¸ºÔðÏìÓ¦Óû§µÄÇëÇó¡£µ±Óû§ÇëÇóÊÓÆµÇÐÆ¬Ê±£¬Èç¹û±ßÔµ½Úµã»º´æÖв»´æÔÚ£¬Nginx»á×÷Ϊ´úÀí£¬ÏòÔ´Õ¾£¨»òÉÏÒ»¼¶»º´æ½Úµã£©·¢ÆðÇëÇ󣬻ñÈ¡ÄÚÈÝ£¬²¢½«ÄÚÈÝ·µ»Ø¸øÓû§£¬Í¬Ê±½«ÄÚÈÝ»º´æµ½±¾µØ£¬ÒÔ±¸ºóÐøÓû§·ÃÎÊ¡£
Õâ¶ÔÓÚÐèҪƵ·±½¨Á¢Á¬½ÓµÄÊÓÆµ²¥·Å³¡¾°£¨ÀýÈ磬²¥·Å¶ÌÊÓÆµ£©À´Ëµ£¬¿ÉÒÔÓÐЧ¼õÉÙÆô¶¯ÑÓ³Ù¡£Á¬½ÓÇ¨ÒÆ£ºQUICÖ§³ÖÁ¬½ÓÇ¨ÒÆ¡£µ±Óû§µÄIPµØÖ·»ò¶Ë¿Ú·¢Éú±ä»¯Ê±£¨ÀýÈ磬´ÓWi-FiÇл»µ½Òƶ¯ÍøÂ磩£¬QUICÁ¬½Ó¿ÉÒÔ±£³Ö²»±ä¡£Õâ¶ÔÓÚÒÆ¶¯É豸ÉϵÄ?ÊÓÆµ¹Û¿´ÖÁ¹ØÖØÒª£¬Äܹ»±£Ö¤²¥·ÅµÄÁ¬ÐøÐÔ£¬±ÜÃâÒòÍøÂçÇл»¶øÖжϡ£
ÔÚNginxÖÐÆôÓÃHTTP/3ºÍQUICÖ§³Ö£¬Í¨³£ÐèҪʹÓÃÌØ¶¨µÄÄ£¿é£¨ÀýÈ磬ͨ¹ýBoringSSLÖ§³ÖQUIC£©¡£ËäÈ»ÆäÅäÖÃÏà¶Ô¸´ÔÓ£¬µ«Ò»µ©ÊµÏÖ£¬½«ÎªÊÓÆµÁ÷ýÌå´øÀ´Ç°ËùδÓеÄÐÔÄÜÌáÉýºÍÓû§ÌåÑéÓÅ»¯¡£Õâ±êÖ¾×ÅNginxÔÚÓµ±§×îÐÂÍøÂç¼¼Êõ·½ÃæµÄ¾öÐĺÍÄÜÁ¦¡£
ÔÚÊÓÆµÁ÷ýÌåÕâÖÖ¶Ô´ø¿íºÍÑÓ³ÙÃô¸ÐµÄ³¡¾°Ï£¬BBRÄܹ»ÏÔÖøÌá¸ß´ø¿íÀûÓÃÂÊ£¬½µµÍ¶ª°üÂÊ£¬´Ó¶ø´øÀ´¸üÎȶ¨µÄ²¥·ÅÌåÑé¡£
ÆôÓÃBBR:Õâͨ³£ÐèÒªÔÚ²Ù×÷ϵͳ²ãÃæ½øÐÐÅäÖã¬È»ºóÔÚNginxµÄnginx.confÎļþÖУ¬¿ÉÒÔͨ¹ýtcp_nodelayon;ºÍtcp_nopushon;À´ÅäºÏBBRµÄ¹¤×÷¡£ËäÈ»Nginx±¾Éí²»Ö±½Ó¿ØÖÆBBR£¬µ«Æä¾«Ï¸µÄÍøÂç²ÎÊýµ÷ÕûÄܹ»ÓëBBRÐͬ×÷Ó㬷¢»Ó×î´óЧÄÜ¡£
1.4¹Ø¼üÁ÷ýÌåÐÒéµÄÖ§³Ö£ºHLSÓëDASHNginx¶ÔHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)ÕâÁ½ÖÖÖ÷Á÷µÄÁ÷ýÌåÐÒéÌṩÁËÁ¼ºÃµÄÖ§³Ö¡£
ÕâЩÐÒ齫ÊÓÆµ·Ö¸î³ÉСµÄýÌ寬¶Î£¬²¢?Ìṩһ¸ö²¥·ÅÁбíÎļþ£¬ÔÊÐí¿Í»§¶Ë¸ù¾ÝÍøÂç×´¿ö¶¯Ì¬µ÷Õû²¥·ÅµÄÂëÂÊ¡£
HLS(.m3u8&.ts):Nginx¿ÉÒÔ¸ßЧµØ»º´æºÍ·Ö·¢.m3u8²¥·ÅÁбíÎļþºÍ.tsýÌ寬¶Î¡£Í¨¹ýºÏÀíµÄ»º´æ?ÅäÖ㬿ÉÒÔ´ó·ù¼õÇáÔ´·þÎñÆ÷µÄѹÁ¦£¬²¢?¼Ó¿ìÈ«ÇòÓû§µÄ·ÃÎÊËÙ¶È¡£DASH(.mpd&.m4s/.mp4):ÀàËÆÓÚHLS£¬NginxͬÑùÄܹ»¸ßЧµØ´¦ÀíDASHµÄ.mpdmanifestÎļþºÍ¸÷ÖÖÂëÂʵÄýÌ寬¶Î¡£
±ßÔµ¼ÆËãµÄ¿ÉÄÜÐÔ£ºËæ×ÅWebAssembly£¨Wasm£©µÈ¼¼ÊõÔÚNginxÖеɣ¬NginxÕýÖ𽥾߱¸±ßÔµ¼ÆËãµÄÄÜÁ¦¡£ÕâÒâζ×Å¿ÉÒÔÔÚ±ßÔµ½ÚµãÉÏÖ´ÐÐһЩÇáÁ¿¼¶µÄÊÓÆµ´¦Àí¡¢ÄÚÈÝת»»£¬ÉõÖÁÊǸöÐÔ»¯ÍƼöµÄÂß¼£¬½øÒ»²½½µµÍÑÓ³Ù£¬ÌáÉýÓû§ÌåÑé¡£
WebRTCÓëµÍÑÓ³ÙʵʱͨÐÅ£º³¬Ô½´«Í³Á÷ýÌåµÄ±ß½ç
WebRTC£¨WebReal-TimeCommunication£©¼¼ÊõµÄÐËÆð£¬Ê¹µÃä¯ÀÀÆ÷Ö®¼äÄܹ»Ö±½Ó½øÐеÍÑÓ³ÙµÄÒôÊÓÆµÍ¨ÐÅ£¬ÕâΪʵʱ»¥¶¯Ó¦Óã¨ÈçÔÚÏß»áÒé¡¢ÔÆÓÎÏ·¡¢Ô¶³ÌÐ×÷£©´øÀ´Á˸ïÃüÐԵı仯¡£NginxͬÑùÔÚWebRTCÉú̬ÖаçÑÝ×ÅÖØÒª½ÇÉ«¡£
ÐÅÁî·þÎñÆ÷(SignalingServer)£ºWebRTCͨÐÅÐèÒªÒ»¸öÐÅÁî·þÎñÆ÷À´Ðµ÷¶Ëµ½¶ËÁ¬½ÓµÄ½¨Á¢¡£Nginx¿ÉÒÔͨ¹ýWebSocketÄ£¿é£¨Èçngx_http_vhost_traffic_status_moduleÅäºÏWebSocket´úÀí£©»òLua½Å±¾£¬¸ßЧµØ¹¹½¨Ò»¸ö¸ß²¢·¢µÄWebSocketÐÅÁî·þÎñÆ÷£¬´¦ÀíSDP£¨SessionDescriptionProtocol£©½»»»¡¢ICE£¨InteractiveConnectivityEstablishment£©ºòÑ¡ÐÉ̵ȹؼü²½Öè¡£
NginxµÄproxy_cacheÄ£¿éÊÇʵÏÖ¸ßЧ»º´æµÄ¹Ø¼ü¡£¶ÔÓÚÊÓÆµÎļþ£¬ÎÒÃÇͨ³£ÐèÒªÅäÖÃÒ»¸öרÃŵĻº´æÇøÓò£¬²¢ÉèÖúÏÀíµÄ¹ýÆÚʱ¼ä¡£
http{proxy_cache_path/var/cache/nginxlevels=1:2keys_zone=video_cache:100mmax_size=10ginactive=60muse_temp_path=off;server{listen80;server_nameyour_video_domain.com;location~*\.(mp4|mkv|avi|mov|flv|webm)${proxy_passhttp://your_backend_video_server;proxy_cachevideo_cache;proxy_cache_valid20030210m;#»º´æ200ºÍ302״̬ÂëµÄÏìÓ¦10·ÖÖÓproxy_cache_valid4041m;#»º´æ404״̬ÂëµÄ?ÏìÓ¦1·ÖÖÓproxy_cache_key"$scheme$request_method$host$request_uri";add_headerX-Cache-Status$upstream_cache_status;}#...ÆäËûÅäÖÃ...}}proxy_cache_path:¶¨ÒåÁË»º´æÎļþµÄ´æ´¢Â·¾¶¡¢²ã¼¶¡¢»º´æÇøÓòÃû³Æ£¨video_cache£©¡¢ÄÚ´æ¹²ÏíÇø´óС£¨100m£©¡¢×î´ó»º´æ¿Õ¼ä£¨10g£©¡¢»º´æÎļþ²»·ÃÎʵĹýÆÚʱ¼ä£¨60m£©¡£
»º´æÊÇNginx´¦Àí¸ßÁ÷Á¿µÄ¹Ø¼ü¡£×îа汾?ÔÚ»º´æ»úÖÆ·½Ãæ½øÐÐÁËÉý¼¶£¬ÓÈÆäÊÇÔÚ´¦ÀíÊÓÆµÎļþÕâÖÖ´óÌå»ýÊý¾Ýʱ£¬±íÏÖ¸ü¼Ó³öÉ«¡£
¾«Ï¸»¯µÄ»º´æ¿ØÖÆ£ºNginxÌṩÁ˷ḻµÄ»º´æÖ¸Á¿ÉÒÔ¸ù¾ÝURL¡¢ÇëÇóÍ·¡¢ÏìӦͷµÈ¶àÖÖÌõ¼þ£¬¶ÔÊÓÆµÄÚÈݽøÐо«Ï¸»¯µÄ»º´æ²ßÂÔÅäÖá£×îаæ?±¾ÔÚ»º´æµÄ²éÕÒ¡¢Ð´ÈëºÍʧЧ»úÖÆÉϽøÐÐÁËÓÅ»¯£¬¼õÉÙÁ˲»±ØÒªµÄ´ÅÅÌI/O£¬Ìá¸ßÁË»º´æµÄÀûÓÃÂÊ¡£Äڴ滺´æÓë´ÅÅÌ»º´æµÄÐͬ£º¶ÔÓÚÆµ·±·ÃÎʵÄСÐÍÊÓÆµÆ¬¶Î»òÔªÊý¾Ý£¬Nginx¿ÉÒÔÀûÓÃÄÚ´æ½øÐлº´æ£¬ÊµÏÖºÁÃë¼¶µÄÏìÓ¦¡£
¶ø¶ÔÓÚ´óÐÍÊÓÆµÎļþ£¬Ôò¿ÉÒÔÓÐЧµØÀûÓôÅÅÌ»º´æ¡£×îа汾ÔÚÄڴ滺´æºÍ´ÅÅÌ»º´æµÄÐͬ¹¤×÷Éϸü¼Ó¸ßЧ£¬Äܹ»¸ù¾Ý×ÊÔ´Çé¿öÖÇÄܵØÑ¡Ôñ»º´æ½éÖÊ£¬È·±£ÊÓÆµÄÚÈݵĿìËÙ·ÃÎÊ¡£CDN±ßÔµ½ÚµãµÄÓÅ»¯£ºÔÚCDN¼Ü¹¹ÖУ¬Nginx³£?³£×÷Ϊ±ßÔµ½Úµã£¬³Ðµ£?ן£Á¿ÊÓÆµÄÚÈݵĻº´æºÍ·Ö·¢ÈÎÎñ¡£
×îа汾ÔÚ±ßÔµ½ÚµãÉϵÄÐÔÄܱíÏÖ£¬Ö±½Ó¾ö¶¨ÁËÓû§·ÃÎʵÄÏìÓ¦ËÙ¶È¡£Í¨¹ý¸ü¿ìµÄ»º´æÃüÖÐÂʺ͸üµÍµÄ»ØÔ´Á÷Á¿£¬NginxÄܹ»ÏÔÖø½µµÍCDNÕûÌåµÄÔËÓª³É±¾£¬²¢ÎªÓû§Ìṩ½üºõÁãÑӳٵĹۿ´ÌåÑé¡£
Ëæ×ÅÁ÷ýÌå¼¼ÊõµÄ?·¢Õ¹£¬HLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)ÒѳÉΪÖ÷Á÷µÄ?ÊÓÆµ´«ÊäÐÒé¡£ËüÃÇͨ¹ý½«ÊÓÆµÇзֳÉСƬ¶Î£¬²¢Ìṩһ¸öË÷ÒýÎļþ£¨.m3u8»ò.mpd£©£¬ÔÊÐí²¥·ÅÆ÷¸ù¾ÝÍøÂç×´¿ö¶¯Ì¬µ÷ÕûÊÓÆµÂëÂÊ£¬´Ó¶øÌṩ¸ü¼ÓÁ÷³©µÄ¹Û¿´ÌåÑé¡£
NginxÔÚÖ§³ÖHLSºÍDASH·½Ãæ±íÏÖ³öÉ«¡£ËäÈ»Nginx±¾Éí²¢²»?Ö±½Ó¡°×ªÂ롱ÊÓÆµ£¬µ«Ëü¿ÉÒÔ×÷Ϊһ¸ö¸ßЧµÄWeb·þÎñÆ÷£¬½«ÕâЩÇÐÆ¬»¯µÄÊÓÆµÎļþºÍË÷ÒýÎļþ¿ìËٵطַ¢¸øÓû§¡£
M3U8/MPDÎļþ·Ö·¢£ºNginx¿ÉÒÔÇáËɵØÎªÕâЩË÷ÒýÎļþÌṩ·þÎñ¡£ÊÓÆµÆ¬¶Î£¨.ts/.mp4£©·Ö·¢£ºNginxµÄ¸ß²¢·¢´¦ÀíÄÜÁ¦£¬Ê¹ÆäÄܹ»¿ìËÙÏìÓ¦²¥·ÅÆ÷¶Ô´óÁ¿Ð¡ÊÓÆµÆ¬¶ÎµÄÇëÇó¡£RangeÇëÇó£ºNginx¶ÔHTTPRangeÇëÇóµÄÖ§³Ö£¬Ê¹µÃ²¥·ÅÆ÷¿ÉÒÔ½øÐжϵãÐø²¥¡¢¿ì½ø¿ìÍ˵ȲÙ×÷£¬¶øÎÞÐèÖØÐÂÏÂÔØÕû¸öÊÓÆµ¡£
µ±Êý¾Ýµ½´ïʱ£¬Nginx»áÁ¢¼´´¦Àí£¬¶ø²»ÊǵȴýÊý¾Ý´«ÊäÍê±Ï¡£ÕâʹµÃNginxÔÚ´¦Àí´óÁ¿Ð¡Îļþ´«Ê䣬»òÕßÏñÊÓÆµÁ÷ÕâÑù³ÖÐø²úÉúÊý¾ÝµÄ³¡¾°Ï£¬±íÏÖÓÈΪ³öÉ«£¬±ÜÃâÁËÒò×èÈûI/OÔì³ÉµÄ?ÐÔÄÜÆ¿¾±¡£Worker½ø³ÌÉè¼Æ£ºNginxµÄMaster½ø³Ì¸ºÔð¹ÜÀíWorker½ø³Ì£¬¶øWorker½ø³ÌÔò¸ºÔð´¦Àíʵ¼ÊµÄÍøÂçÇëÇó¡£
ÕâÖÖ·ÖÀëÉè¼ÆÊ¹µÃNginxÄܹ»³ä·ÖÀûÓöàºËCPUµÄÓÅÊÆ£¬Ã¿¸öWorker½ø³Ì¿ÉÒÔÔËÐÐÔÚÒ»¸öCPUºËÐÄÉÏ£¬ÊµÏÖÕæÕýµÄ?²¢Ðд¦Àí¡£¶ÔÓÚÊÓÆµ´«ÊäÕâÖÖÐèҪǿ´ó¼ÆËãÄÜÁ¦ºÍI/OÄÜÁ¦µÄÈÎÎñ£¬¶àWorker½ø³ÌµÄÐͬ¹¤×÷Äܹ»ÏÔÖøÌáÉýÕûÌåÍÌÍÂÁ¿¡£
¶þ¡¢ºËÐŦÄÜÓÅ»¯£ºNginxÈçºÎʵÏÖ¡°100%ÊÓÆµÐÔÄÜ¡±
NginxÄܹ»ÊµÏÖ½Ó½ü¡°100%ÊÓÆµÐÔÄÜ¡±²¢·ÇżȻ£¬¶øÊÇÆäÄÚÖõÄÇ¿´ó¹¦ÄÜÓ뾫ϸ»¯ÅäÖù²Í¬×÷ÓõĽá¹û¡£
¸ßЧµÄ¾²Ì¬Îļþ·þÎñ£ºÊÓÆµÎļþͨ³£ÊǾ²Ì¬ÄÚÈÝ£¬NginxÔÚ¾²Ì¬Îļþ·þÎñ·½ÃæÓµÓÐÎ޿ɱÈÄâµÄÓÅÊÆ¡£ËüÄܹ»ÒÔ¼«¿ìµÄËÙ¶ÈÖ±½Ó´Ó´ÅÅ̶ÁÈ¡Îļþ£¬²¢Í¨¹ýsendfileϵͳµ÷Ó㬽«ÎļþÊý¾ÝÖ±½Ó´ÓÄں˿ռ䴫Êäµ½ÍøÂçÌ×½Ó×Ö£¬ÈƹýÁËÓû§¿Õ¼ä£¬¼«´óµØ¼õÉÙÁËCPUºÍÄÚ´æµÄ¿½±´¿ªÏú£¬ÏÔÖøÌáÉýÁËÎļþ´«ÊäЧÂÊ¡£
ÓÅ»¯²ßÂÔ£ºRangeÇëÇó´¦Àí£ºDASHÐÒé¹ã·ºÊ¹ÓÃHTTPµÄRangeÇëÇóÀ´»ñȡýÌ寬¶ÎµÄÌØ¶¨²¿?·Ö¡£NginxÄܹ»¸ßЧµØ´¦ÀíRangeÇëÇó£¬È·±£Ö»´«ÊäÓû§ËùÐèµÄÊý¾Ý¡£Content-TypeÉèÖãºÕýÈ·ÉèÖÃContent-Type£¬È·±£ä¯ÀÀÆ÷Äܹ»ÕýÈ·½âÎö.mp4¡¢.webmµÈýÌåÎļþ¡£
MIMEÀàÐÍÅäÖãºÔÚmime.typesÎļþÖÐÈ·±£ËùÓÐýÌå¸ñʽ¶¼ÓÐÕýÈ·µÄMIMEÀàÐÍ¡£
Ö±²¥ÍÆÁ÷Óë·Ö·¢£º¶ÔÓÚʵʱֱ²¥³¡¾°£¬Nginxͨ³£×÷Ϊ½ÓÈë²ãºÍ·Ö·¢²ã¡£
RTMP/SRTÄ£¿é£ºNginx¿ÉÒÔͨ¹ýµÚÈý·½Ä£¿é£¨Èçnginx-rtmp-module»ònginx-srt-module£©Ö§³ÖRTMP»òSRTµÈÖ±²¥ÍÆÁ÷ÐÒ飬½ÓÊÕÀ´×ÔÖ±²¥Ô´µÄÊÓÆµÁ÷£¬È»ºó½«ÆäתÂëΪHLS»òDASH¸ñʽ£¬ÔÙͨ¹ýHTTPÐÒé·Ö·¢¸øÖÕ¶ËÓû§£¬ÊµÏÖ¡°ÍÆÁ÷-תÂë-·Ö·¢¡±µÄÒ»Ì廯Á÷³Ì¡£
µÍÑÓ³ÙÖ±²¥£º½áºÏHTTP/3µÄQUICÐÒé»òµÍÑÓ³ÙHLS£¨LL-HLS£©µÈ¼¼Êõ£¬Nginx¿ÉÒÔ½øÒ»²½½µµÍÖ±²¥µÄÑÓ³Ù£¬½Ó½üʵʱ»¥¶¯ÌåÑé¡£
ËäÈ»Nginx×î³õÊÇÒ»¿îWeb·þÎñÆ÷£¬µ«Í¨¹ýÆäÇ¿´óµÄÄ£¿é»¯Éè¼Æ£¬ËüÒ²Äܹ»Ê¤ÈÎÁ÷ýÌå·þÎñÆ÷µÄ½ÇÉ«£¬Ö§³ÖRTMP¡¢HLS¡¢DASHµÈÖ÷Á÷Á÷ýÌåÐÒ飬ʵÏÖÖ±²¥ÍÆÁ÷ºÍµã²¥·þÎñµÄ?¡°Ò»Õ¾Ê½¡±½â¾ö·½°¸¡£
RTMPÄ£¿é£º¼´Ê¹Nginx±¾Éí²»Ö±½ÓÄÚǶRTMP¹¦ÄÜ£¬µ«Í¨¹ýµÚÈý·½Ä£¿é£¬ÀýÈçnginx-rtmp-module£¬Nginx¿ÉÒÔÍêÃÀµØÖ§³ÖRTMPÐÒé¡£Õâ¸öÄ£¿éÔÊÐíNginx½ÓÊÕÀ´×ÔÍÆÁ÷¶ËµÄRTMPÐźţ¬²¢½«Ö±²¥Á÷ת·¢¸ø¹Û¿´¶Ë¡£
ÍÆÁ÷½ÓÊÕ£ºNginx¿ÉÒÔ¼àÌýRTMP¶Ë¿Ú£¨Í¨³£ÊÇ1935£©£¬½ÓÊÕÀ´×ÔOBS¡¢FFmpegµÈÍÆÁ÷Èí¼þµÄÖ±²¥Á÷¡£Á÷ת·¢£º½ÓÊÕµ½µÄRTMPÁ÷¿ÉÒÔ±»Ö±½Óת·¢¸øRTMP¿Í»§¶Ë£¬Ò²¿ÉÒÔת»»ÎªHLS»òDASH¸ñʽ£¬¹©HTTP¿Í»§¶Ë¹Û¿´¡£
ÕâÖÖ¡°RTMPתHLS/DASH¡±µÄÄÜÁ¦£¬ÊÇNginxÔÚÁ÷ýÌåÁìÓò¼«ÎªÖØÒªµÄ?Ó¦Óó¡¾°£¬ËüʹµÃ?Ö±²¥ÄÚÈÝÄܹ»Í¬Ê±±»RTMPºÍHTTP¿Í»§¶Ë·ÃÎÊ£¬¼«´óµØÀ©Õ¹Á˼æÈÝÐÔ¡£¸ºÔؾùºâ£ºnginx-rtmp-moduleÖ§³ÖRTMPÐÒéµÄ?¸ºÔؾùºâ£¬¿ÉÒÔ½«À´×Ô²»Í¬ÍÆÁ÷¶ËµÄÖ±²¥Á÷·ÖÅäµ½²»Í¬µÄºó¶Ë·þÎñÆ÷£¬»òÕß½«À´×Ô¶à¸ö¹Û¿´¶ËµÄÇëÇó·Ö·¢µ½²»?ͬµÄÁ÷ýÌå·þÎñÆ÷£¬È·±£·þÎñµÄÎȶ¨ÐԺ͸߿ÉÓÃÐÔ¡£
tcp_nodelayon;£º´ËÖ¸Áî»á½ûÓÃNagleËã·¨£¬ÔÊÐíNginxÁ¢¼´·¢ËÍСÊý¾Ý°ü£¬¶ÔÓÚÐèÒªµÍÑӳٵij¡¾°£¨ÈçijЩÊÓÆµÁ÷µÄʵʱ¸üУ©ÓÐÒæ¡£µ÷ÓŽ¨Ò飺ͨ³£½¨Ò齫sendfileon;£¬tcp_nopushon;ºÍtcp_nodelayon;һͬÆôÓã¬ÒÔ»ñµÃ×î¼ÑµÄ´«?ÊäÐÔÄÜ¡£
3.Ç¿´óµÄ»º´æÅäÖãºproxy_cache,location,expires
proxy_cache_path£º¶¨Ò建´æÎļþµÄ´æ´¢Â·¾¶¡¢²ã¼¶½á¹¹¡¢´óСÏÞÖÆµÈ¡£proxy_cache£ºÆôÓûº´æ£¬²¢Ö¸¶¨»º´æÇøÓò¡£proxy_cache_valid£ºÉèÖò»Í¬HTTPÏìÓ¦ÂëµÄ»º´æÊ±¼ä¡£location¿éÄÚµÄÅäÖ㺿ÉÒÔÕë¶ÔÌØ¶¨URL·¾¶£¨Èç/videos/£©ÉèÖò»Í¬µÄ»º´æ²ßÂÔ£¬È·±£ÊÓÆµÄÚÈݱ»ÓÐЧ»º´æ¡£
expires£ºÉèÖÃä¯ÀÀÆ÷»º´æ¹ýÆÚʱ¼ä£¬ÈÃä¯ÀÀÆ÷Ò²ÄÜ»º´æÊÓÆµ×ÊÔ´£¬¼õÉÙ·þÎñÆ÷µÄѹÁ¦¡£µ÷ÓŽ¨Ò飺ºÏÀí¹æ»®»º´æÄ¿Â¼ºÍ´óС£¬¸ù¾ÝÊÓÆµÄÚÈݵĸüÐÂÆµÂÊÉèÖò»Í¬µÄ»º´æÓÐЧÆÚ¡£¶ÔÓÚ²»¾³£¸üеÄÊÓÆµ£¬¿ÉÒÔÉèÖýϳ¤µÄ»º´æÊ±¼ä¡£
ÊÓÆµÁ÷ýÌåµÄºËÐÄÔÚÓÚ¿ìËÙ¡¢Îȶ¨µØ½«º£Á¿Êý¾Ý´«Êäµ½Óû§ÖÕ¶Ë¡£NginxµÄ?»º´æ»úÖÆÊÇʵÏÖÕâһĿ±êµÄ?¹Ø¼ü¡£Í¨¹ýºÏÀíÅäÖÃHTTP»º´æ£¬ÎÒÃÇ¿ÉÒÔ½«Æµ·±·ÃÎʵÄÊÓÆµÎļþ£¨ÈçÈÈÃŵçÓ°¡¢¶ÌÊÓÆµÆ¬¶Î£©»º´æÔÚNginx·þÎñÆ÷±¾µØ»òCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩½ÚµãÉÏ¡£
ProxyCache£ºµ±Nginx×÷Ϊ·´Ïò´úÀíʱ£¬¿ÉÒÔÅäÖÃproxy_cacheÖ¸Á½«ºó¶ËÊÓÆµ·þÎñÆ÷µÄÏìÓ¦ÄÚÈÝ»º´æ?µ½±¾µØ´ÅÅÌ¡£ÕâÒâζ×Å£¬µ±µÚÒ»¸öÓû§ÇëÇóij¸öÊÓÆµÊ±£¬Nginx»á½«ÊÓÆµÎļþÏÂÔØ²¢»º´æ¡£ºóÐøÓû§ÇëÇóͬһ¸öÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó?»º´æÖÐÌṩ·þÎñ£¬¼«´óµØ¼õÉÙÁ˺ó¶Ë·þÎñÆ÷µÄѹÁ¦£¬²¢ÏÔÖøËõ¶ÌÁËÓû§µÄÏìӦʱ¼ä¡£
proxy_cache_pathÖ¸ÁîÓÃÓÚÖ¸¶¨»º´æ?Ŀ¼ºÍÏà¹Ø²Î?Êý£¬¶øproxy_cacheÖ¸ÁîÔòÆôÓûº´æ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýproxy_cache_keyÖ¸Áî×Ô¶¨Ò建´æ¼ü£¬ÒÔÈ·±£?²»Í¬ÇëÇó¶ÔÓ¦µÄÄÚÈÝÄܹ»±»ÕýÈ·»º´æ?ºÍ¼ìË÷¡£BrowserCache£º³ýÁË·þÎñÆ÷¶Ë»º´æ£¬ÎÒÃÇ»¹¿ÉÒÔͨ¹ýexpiresºÍCache-ControlÏìӦͷÀ´Ö¸µ¼¿Í»§¶Ëä¯ÀÀÆ÷»º´æ?ÊÓÆµ×ÊÔ´¡£
Nginx100%ÊÓÆµÓÅ»¯£º²»Ö¹Óڿ죬¸üÔÚÓÚ¡°Ë¿»¬¡±µÄ½»»¥ÌåÑ飡
ÔÚÐÅÏ¢±¬Õ¨µÄÊý×Öʱ´ú£¬ÊÓÆµÄÚÈÝÔçÒѳÉΪÎÒÃÇÉú»îÖв»¿É»òȱµÄÒ»²¿·Ö¡£´ÓÔÚÏß½ÌÓýµ½ÓéÀÖÖ±²¥£¬´ÓÔ¶³Ì»áÒéµ½ÄÚÈÝ·ÖÏí£¬Á÷³©¡¢¸ßÇå¡¢µÍÑÓ³ÙµÄÊÓÆµÌåÑ飬ÊÇÓû§×î»ù±¾Ò²ÊÇ×îºËÐĵÄÐèÇó¡£¶øÖ§³ÅÕâÒ»Çеģ¬Àë²»¿ªÇ¿´óµÄ·þÎñÆ÷¼¼Êõ¡£Nginx£¬×÷Ϊһ¿î¸ßÐÔÄܵÄHTTPºÍ·´Ïò´úÀí·þÎñÆ÷£¬Æ¾½èÆä׿ԽµÄ²¢?·¢´¦ÀíÄÜÁ¦ºÍÎȶ¨ÐÔ£¬ÔçÒѳÉΪȫÇòÖÚ¶àÍøÕ¾ºÍÓ¦ÓõÄ?Ê×Ñ¡¡£
Èç½ñ£¬NginxµÄ×îа汾¸üÊǽ«ÊÓÆµÓÅ»¯ÍÆÏòÁËеĸ߶ȣ¬ÊµÏÖÁË¡°100%ÊÓÆµÓÅ»¯¡±µÄ¾ªÈËÄ¿±ê£¬ÎªÓû§´øÀ´Ç°ËùδÓеġ°Ë¿»¬¡±ÊÓÌýÏíÊÜ¡£
Ò»¡¢Nginx×îа汾?£ºÎªÊÓÆµ´«ÊäÁ¿Éí´òÔìµÄÐÔÄÜ¡°ºË¶¯Á¦¡±
ÎÒÃdz£Ëµ£¬Ò»¸öÓÅÐãµÄ·þÎñÆ÷£¬ÊDZ£Ö¤Óû§Á¼ºÃÌåÑéµÄ»ùʯ¡£¶øNginxÔÚÊÓÆµ´«?ÊäÁìÓò£¬¸üÊǰç?ÑÝ×Å¡°ºË¶¯Á¦¡±µÄ½ÇÉ«¡£×îа汾µÄNginx£¬Ôڼ̳ÐÁËÆäÒ»¹áµÄ¸ß²¢·¢¡¢µÍÄÚ´æÕ¼ÓõÄÓÅÊÆ»ù´¡ÉÏ£¬Õë¶ÔÊÓÆµÁ÷µÄÌØÐÔ½øÐÐÁËÉî¶ÈÓÅ»¯¡£Õâ²»½ö½öÊǼòµ¥µÄ¹¦Äܵþ¼Ó£¬¶øÊǴӵײã¼Ü¹¹µ½ºËÐÄËã·¨µÄÈ«·½Î»¸ïС£
1.epollÄ£Ð͵ļ«ÖÂÔËÓãºÓ¦¶Ôº£Á¿ÊÓÆµÇëÇóµÄ¡°¶¨º£ÉñÕ롱
·ÖƬ´óСºÍ¼ä¸ô£ºHLS/DASHµÄ?²¥·ÅÌåÑéºÜ´ó³Ì¶ÈÉÏÈ¡¾öÓÚýÌåÇÐÆ¬µÄ?Éú³É¡£ºÏÀíÉèÖÃÇÐÆ¬´óСºÍ¼ä¸ô£¬¿ÉÒÔÆ½ºâÆô¶¯ËٶȺͲ¥·ÅÁ÷³©¶È¡£GOP£¨GroupofPictures£©½á¹¹£ºÊÓÆµ±àÂëÖеÄGOP½á¹¹¶Ô¹Ø¼üÖ¡µÄ·Ö²¼ÓÐÓ°Ï죬ӰÏìHLS/DASHµÄÇÐÆ¬±ß??½ç£¬´Ó¶øÓ°Ïì¿ì½ø¿ìÍ˵ÄÌåÑé¡£
Adaptivity£¨×ÔÊÊÓ¦£©£ºNginx¿ÉÒÔÅäºÏFFmpegµÈ¹¤¾ß£¬Éú³É²»Í¬ÂëÂʺͷֱæÂʵÄýÌåÁ÷£¬¹©¿Í»§¶Ë½øÐÐ×ÔÊÊÓ¦Çл»£¬Ìṩ¸üºÃµÄ¹Û¿´ÌåÑé¡£
WebRTCµÄ¼¯³É£º¶ÔÓÚÐèÒªµÍÑÓ³Ùʵʱ½»»¥µÄÓ¦Óó¡¾°£¬WebRTCµÄ¼¯³É±äµÃ?Ô½À´Ô½ÖØÒª¡£ËäÈ»Nginx±¾Éí²»Ö±½ÓÖ§³ÖWebRTC£¬µ«¿ÉÒÔͨ¹ýµÚÈý·½Ä£¿é£¨Èçnginx-rtsp-to-webrtc£©»òÓëÆäËûWebRTC·þÎñÆ÷ÅäºÏʹÓã¬ÊµÏÖÊÓÆµÁ÷µÄWebRTC´«Êä¡£
ÊÓÆµÁ÷ýÌå¶Ô´ø¿íµÄÐèÇó¾Þ´ó£¬µ«Ò²ÐèÒª¾«Ï¸»¯µÄ¹ÜÀí£¬ÒÔ·ÀÖ¹µ¥¸öÓû§ºÄ¾¡´ø¿í£¬Ó°ÏìÕûÌå·þÎñÖÊÁ¿¡£NginxÌṩÁ˶àÖÖ¹¤¾ßÀ´¿ØÖÆÁ÷Á¿ºÍÁ¬½Ó¡£
limit_rateºÍlimit_rate_after£ºlimit_rateÖ¸Áî¿ÉÒÔÏÞÖÆµ¥¸öÁ¬½ÓµÄ×î´óÏÂÔØËÙ¶È£¬·ÀÖ¹¶ñÒâÓû§»òÒì³£?ÇëÇóÕ¼Óùý¶à´ø¿í¡£limit_rate_afterÔò¿ÉÒÔÔÚ´ïµ½Ò»¶¨´«ÊäÁ¿ºó²Å¿ªÊ¼ÏÞËÙ£¬±ÜÃâ¶ÔÕý³£´«ÊäÔì³É²»±ØÒªµÄ?¸ÉÈÅ¡£
ÀýÈ磬¶ÔÓÚÖ±²¥³¡¾°£¬ÎÒÃÇ¿ÉÒÔÉèÖÃÒ»¸öºÏÀíµÄ²¥·ÅËÙÂÊÏÞÖÆ£¬È·±£ËùÓйÛÖÚ¶¼ÄÜ»ñµÃÏà¶ÔÎȶ¨µÄ²¥·ÅÌåÑé¡£keepalive_timeoutºÍkeepalive_requests£º³¤Á¬½Ó£¨Keep-Alive£©Äܹ»¸´ÓÃTCPÁ¬½Ó£¬¼õÉÙTCPÈý´ÎÎÕÊֵĿªÏú£¬¶ÔÓÚÁ¬Ðø²¥·Å¶à¸öÊÓÆµÆ¬¶Î»òÖ±²¥Á÷À´Ëµ£¬Ð§ÂÊÌáÉýÏÔÖø¡£
ºÏÀíÅäÖÃkeepalive_timeout£¨Á¬½Ó±£³Ö³¬?ʱʱ¼ä£©ºÍkeepalive_requests£¨Ò»¸öÁ¬½ÓÔÊÐíµÄ×î´óÇëÇóÊý£©£¬¿ÉÒÔÔÚ¼õÉÙÁ¬½Ó½¨Á¢³É±¾ºÍ±ÜÃâ×ÊÔ´ÀÄÓÃÖ®¼äÈ¡µÃƽºâ¡£worker_connections£ºNginxµÄworker_processesºÍworker_connections²ÎÊýÊÇÆä¸ß²¢·¢ÄÜÁ¦µÄ»ùʯ¡£
ͨ¹ýÒÔÉÏһϵÁеÄÓÅ»¯²ßÂÔ£¬NginxÄܹ»´Ó»º´æ¡¢´«ÊäÐÒé¡¢HTTPÅäÖõȶà¸öά¶È£¬È«ÃæÌáÉýÊÓÆµÁ÷ýÌåµÄ´«ÊäЧÂʺÍÓû§ÌåÑé¡£´Ó¼õÉÙ¼ÓÔØÊ±¼äµ½¶Å¾ø²¥·Å¿¨¶Ù£¬´ÓÓÅ»¯´ø¿íÀûÓõ½Ö§³Ö×îÐÂÁ÷ýÌåÐÒ飬Nginx¶¼Õ¹ÏÖ³öÁËÆäÇ¿´óµÄÄÜÁ¦¡£
¡°Nginx100%ÊÓÆµÓÅ»¯¡±²¢·ÇÒ»¾ä¿Õ¶´µÄ¿ÚºÅ£¬¶øÊÇͨ¹ý¶ÔNginxºËÐŦÄܵÄÉîÈëÀí½âºÍ¾«Ï¸ÅäÖ㬽«NginxµÄÐÔÄÜ·¢»Óµ½¼«Ö£¬´Ó¶øÎªÄãµÄÁ÷ýÌåÒµÎñÌṩ¼áʵµÄ¼¼ÊõÖ§³Å¡£ÎÞÂÛÊǸöÈ˲©¿ÍµÄÊÓÆµ·ÖÏí£¬»¹ÊÇ´óÐÍÊÓÆµÆ½Ì¨µÄÄÚÈÝ·Ö·¢£¬Òà»òÊÇʵʱֱ²¥·þÎñ£¬Nginx¶¼ÄܳÉΪÄã×î¿É¿¿µÄ¼ÓËÙÆ÷£¬°ïÖúÄãץסÁ÷ýÌåʱ´úµÄ¾Þ´ó»úÓö£¬Ó®µÃÓû§µÄÇàíù¡£
¼Çס£¬³ÖÐøµÄ¼à¿ØºÍµ÷ÓÅÊDZ£³Ö×î¼ÑÐÔÄܵĹؼü¡£ÀûÓÃNginxÌṩµÄ¼à¿Ø¹¤¾ßºÍµÚ?Èý·½²å¼þ£¬²»¶Ï·ÖÎö·þÎñÆ÷ÈÕÖ¾ºÍÐÔÄÜÖ¸±ê£¬¼°Ê±µ÷ÕûÅäÖ㬲ÅÄÜÈÃÄãµÄÊÓÆµÁ÷ýÌå·þÎñʼÖÕ±£³ÖÔÚ×î¼Ñ״̬£¬ÎªÓû§´øÀ´×ˬµÄ?¹Û¿´ÌåÑ飡
Nginx100%ÊÓÆµ´«Ê䣬²¢·ÇÒ»¸öÖյ㣬¶øÊÇÒ»¸ö³ÖÐø½ø»¯µÄ¹ý³Ì¡£Ëæ×Å5G¡¢Wi-Fi6µÈÐÂÒ»´úÍøÂçµÄÆÕ¼°£¬ÒÔ¼°8K·Ö±æÂÊ¡¢VR/ARµÈÐÂÐÎ̬ÄÚÈݵijöÏÖ£¬¶ÔÊÓÆµ´«ÊäµÄÒªÇ󽫲»¶ÏÌáÉý¡£Nginxƾ½èÆä¿ª·Å¡¢Áé»î¡¢¸ßÐÔÄܵÄÌØµã£¬±Ø½«¼ÌÐøÔÚÕâÒ»ÁìÓò°çÑݹؼü½ÇÉ«¡£
´Ó¸üÖÇÄܵÄÁ÷ýÌåÐÒéÖ§³Ö£¬µ½¸üÉî¶ÈµÄ±ßÔµ¼ÆË㼯³É£¬ÔÙµ½ÓëÐÂÐËÄÚÈݸñʽµÄÍêÃÀÆõºÏ£¬Nginx½«³ÖÐø½âËøÊÓÆµ´«ÊäµÄ¼«ÖÂÌåÑ飬ÒýÁìÎÒÃÇ×ßÏòÒ»¸ö¸ü¼ÓÁ÷³©?¡¢³Á½þµÄÊý×ÖÊÀ½ç¡£
¶à·¸´ÓÃʹµÃ¿Í»§¶Ë¿ÉÒÔÔÚÒ»¸öTCPÁ¬½ÓÉϲ¢ÐÐÇëÇó¶à¸öÊÓÆµ×ÊÔ´£¬±ÜÃâÁË´«?ͳHTTP/1.1ÖжàÁ¬½Ó´øÀ´µÄ¿ªÏú£»Í·²¿Ñ¹ËõÔò´ó´ó¼õÉÙÁË´«ÊäµÄ´ø¿íÕ¼Ó㬶ÔÓÚ±£ÕÏÊÓÆµ²¥·ÅµÄÁ¬ÐøÐÔÖÁ¹ØÖØÒª¡£Ç°Õ°ÐÔ²¼¾Ö£ºHTTP/3µÄÎȶ¨Ö§³Ö£ºNginx»ý¼«Óµ±§Î´À´£¬¶Ô»ùÓÚQUICÐÒéµÄHTTP/3ÌṩÁËÎȶ¨ÇÒ¸ßЧµÄÖ§³Ö?¡£
HTTP/3½â¾öÁËTCPÔÚÍøÂçÓµ¶ÂʱÈÝÒ׳öÏֵġ°¶ÓÍ·×èÈû¡±ÎÊÌ⣬¼´Ê¹ÔÚ¶ª°üÂʽϸߵÄÍøÂç»·¾³Ï£¬Ò²Äܱ£?Ö¤ÊÓÆµÁ÷µÄ´«Êä²»Öжϣ¬ÊµÏÖÕæÕýµÄ¡°100%²¥·Å¡±¡£QUICÐÒéµÄÒýÈ룬ͨ¹ýUDP³ÐÔØ£¬ÊµÏÖÁ˸ü¿ìµÄÁ¬½Ó½¨Á¢ËٶȺ͸üÓŵÄÓµÈû¿ØÖÆ»úÖÆ£¬¶ÔÓÚ×·Çó¼«ÖµÍÑÓ³ÙµÄÖ±²¥³¡¾°£¬ÒÔ¼°ÔÚÒÆ¶¯ÍøÂç»·¾³Ï²¥·ÅÊÓÆµ£¬¶¼½«´øÀ´µß¸²ÐÔµÄÌåÑéÌáÉý¡£
ÎÒÃÇ¿ÉÒÔÔ¤¼û£¬Ëæ×ÅHTTP/3µÄÆÕ¼°£¬Nginx½«½øÒ»²½¹®¹ÌÆäÔÚÁ÷ýÌå´«ÊäÁìÓòµÄÁìÏȵØÎ»¡£
ÏêϸµÄ·ÃÎÊÈÕÖ¾¶ÔÓÚ¼à¿ØºÍ¹ÊÕÏÅŲé·Ç³£ÖØÒª£¬µ«¹ý¶àµÄÈÕÖ¾¼Ç¼»áÔö¼Ó´ÅÅÌI/O¸ºµ£¡£
Òì²½ÈÕÖ¾£ºNginxĬÈÏÊÇÒ첽дÈÕÖ¾µÄ£¬ÕâÒѾºÜ´ó³Ì¶ÈÉϼõÉÙÁ˶ÔÖ÷½ø³ÌµÄ?Ó°Ïì¡£¾«¼òÈÕÖ¾¸ñʽ£º¸ù¾Ýʵ¼ÊÐèÇ󣬿ÉÒÔ¾«¼òlog_formatÖеÄ×ֶΣ¬Ö»¼Ç¼±ØÒªµÄÐÅÏ¢£¬¼õÉÙÈÕÖ¾ÎļþµÄ´óС¡£ÈÕÖ¾ÂÖת£ºÊ¹ÓÃlogrotateµÈ¹¤¾ß¶¨ÆÚ¶ÔÈÕÖ¾Îļþ½øÐÐÇиîºÍ¹éµµ?£¬±ÜÃâµ¥¸öÈÕÖ¾Îļþ¹ý´ó£¬Ó°Ïì¶ÁдÐÔÄÜ¡£
HTTP/2ÐÒéÏà½ÏÓÚHTTP/1.1£¬ÔÚÐÔÄÜÉÏÓÐÁËÖʵķÉÔ¾£¬ÌرðÊʺϴ¦?Àí°üº¬´óÁ¿Ð¡×ÊÔ´µÄWebÒ³Ãæ£¬¶øÊÓÆµÁ÷ýÌåÒ²³£³£Éæ¼°¶à¸öС·ÖƬ£¨ÈçHLS¡¢DASH£©¡£
¶à·¸´ÓÃ(Multiplexing)£ºHTTP/2ÔÊÐíÔÚÒ»¸öTCPÁ¬½ÓÉϲ¢Ðд«Êä¶à¸öÇëÇóºÍÏìÓ¦£¬ÎÞÐèÏñHTTP/1.1ÄÇÑùÅŶӵȴý¡£ÕâÒâζ×Å£¬µ±Óû§²¥·ÅÒ»¸öÊÓÆµÊ±£¬¿ÉÒÔͬʱÏÂÔØÊÓÆµÁ÷µÄ²»Í¬ÇÐÆ¬¡¢×ÖÄ»¡¢ÔªÊý¾ÝµÈ?£¬¶øÎÞÐ轨Á¢¶à¸öÁ¬½Ó£¬´ó´ó¼õÉÙÁËÑÓ³Ù¡£
Í·²¿Ñ¹Ëõ(HeaderCompression)£ºHTTP/2ʹÓÃHPACKË㷨ѹËõÇëÇóºÍÏìÓ¦µÄÍ·²¿ÐÅÏ¢£¬ÏÔÖø¼õСÁË´«ÊäµÄÊý¾ÝÁ¿£¬ÓÈÆäÊÇÔڵʹø¿í»·¾³Ï£¬Ð§¹û¸ü¼ÓÃ÷ÏÔ¡£·þÎñÆ÷ÍÆËÍ(ServerPush)£ºHTTP/2»¹Ö§³Ö·þÎñÆ÷ÍÆËÍ£¬¼´ÔÚ¿Í»§¶ËÇëÇó֮ǰ£¬·þÎñÆ÷¾Í¿ÉÒÔÖ÷¶¯½«Ïà¹Ø×ÊÔ´ÍÆË͵½¿Í»§¶Ë¡£
ËäÈ»ÔÚÊÓÆµÁ÷ýÌåµÄ¾ßÌåÓ¦Óó¡¾°ÖÐÐèÒª½÷É÷ʹÓ㬵«ÀíÂÛÉÏ¿ÉÒÔÓÃÓÚÔ¤¼ÓÔØÊÓÆµ²¥·ÅËùÐèµÄ¹Ø¼üÔªÊý¾Ý»ò·âÃæ¡£
Nginx100ÊÓÆµ£ºµãȼÊÓÆµÁ÷´«ÊäµÄÒýÇæ£¬ÊÍ·ÅÎÞÏÞDZÄÜ
ÔÚÕâ¸öÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÔçÒÑÉøÍ¸µ½ÎÒÃÇÉú»îµÄ·½·½ÃæÃæ¡£´Óʵʱֱ²¥µÄ¾«²Ê˲¼ä£¬µ½µã²¥ÄÚÈݵijÁ?½þÌåÑ飬ÊÓÆµÁ÷µÄÖÊÁ¿ºÍÎȶ¨ÐÔÖ±½Ó¹ØÏµµ½Óû§µÄÇé¸ÐÁ¬½ÓºÍÉÌÒµ¼ÛÖµ¡£Òª¹¹½¨Ò»¸öÄܹ»³ÐÔØº£Á¿ÊÓÆµÁ÷Á¿£¬²¢±£Ö¤µÍÑÓ³Ù¡¢¸ß²¢·¢¡¢¼«ÖÂÁ÷³©µÄÁ÷ýÌåÆ½Ì¨£¬¾ø·ÇÒ×Ê¡£
´«?ͳµÄWeb·þÎñÆ÷ÔÚÃæ¶ÔÊÓÆµÁ÷µÄÑϾþÌôսʱ£¬ÍùÍùÏÔµÃÁ¦²»´ÓÐÄ¡£Õâʱ£¬Nginx£¬Õâ¸öÒÔÆä¸ßÐÔÄÜ¡¢¸ß²¢·¢ºÍÁé»îÐÔÖø³ÆµÄWeb·þÎñÆ÷£¬±ã³ÉΪÁËÁ÷ýÌåÁìÓòµÄ¡°³¬¼¶Ó¢ÐÛ¡±¡£¶ø¡°Nginx100ÊÓÆµ¡±Õâ¸ö¸ÅÄ¸üÊǽ«NginxÔÚÊÓÆµÁ÷´«ÊäÉϵÄÄÜÁ¦ÍÆÏòÁËÒ»¸öеĸ߶ȣ¬·Â·ðΪÆä×¢ÈëÁ˰ٱ¶µÄÄÜÁ¿£¬µãȼÁËÊÓÆµ´«ÊäµÄÒýÇæ£¬ÊͷųöÎÞÏÞµÄDZÄÜ¡£
Nginx¾¿¾¹ÊÇÈçºÎ³ÉΪÊÓÆµÁ÷´«ÊäµÄÍõÕߣ¿ÕâÆäÖÐÔ̺¬×ÅÔõÑùµÄ¼¼Êõ°ÂÃØ£¿ÈÃÎÒÃÇÒ»ÆðÉîÈëNginxµÄºËÐÄ£¬½Ò¿ªËüÔÚÊÓÆµÁ÷´«ÊäÁìÓòµÄÉñÆæÁ¶½ðÊõ¡£
Ò»¡¢¸æ±ð¿¨¶Ù£ºNginxÈçºÎ³ÉΪÊÓÆµÓÅ»¯µÄ¡°Ëٶȵ£µ±¡±
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÒѾ³É?Ϊ×îÊÜ»¶ÓµÄÄÚÈÝÏû·ÑÐÎʽ֮һ¡£ÎÞÂÛÊǾ«²ÊµÄÈüÊÂÖ±²¥¡¢ÒýÈËÈëʤµÄÓ°ÊӾ缯£¬»¹ÊÇÉú¶¯ÓÐȤµÄ½Ìѧ¶ÌƬ£¬Á÷³©µÄ?¹Û¿´ÌåÑéÊÇÓû§×î»ù±¾Ò²ÊÇ×îÖØÒªµÄÐèÇó¡£·þÎñÆ÷´ø¿í²»×ã¡¢ÍøÂçÑÓ³Ù¡¢²¢·¢Óû§¹ý¶àµÈÎÊÌ⣬³£³£ÈÃÓû§ÔÚ¹Û¿´ÊÓÆµÊ±±¥ÊÜ¿¨¶Ù¡¢¼ÓÔØ»ºÂýÖ®¿à¡£
ÐÒÔ˵ÄÊÇ£¬Nginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬Æ¾½èÆäÇ¿´óµÄ¹¦ÄܺÍÁé»îµÄÅäÖã¬Äܹ»³ÉΪ½â¾öÊÓÆµÓÅ»¯ÄÑÌâµÄ¡°Ëٶȵ£µ±¡±¡£
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµÓÅ»¯ÁìÓò´ó·ÅÒì²Ê£¬Àë²»¿ªÆä¾«ÃîµÄ¼Ü¹¹Éè¼ÆºÍһϵÁиßЧµÄÄ£¿é¡£Nginx²ÉÓÃʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄ¹¤×÷ģʽ£¬ÕâÒâζ×ÅËü¿ÉÒÔͬʱ´¦Àí³ÉǧÉÏÍò¸ö²¢·¢Á¬½Ó£¬¶ø²»»áÏñ´«Í³µÄApache·þÎñÆ÷ÄÇÑùΪÿ¸öÁ¬½Ó´´½¨Ò»¸ö¶ÀÁ¢µÄ½ø³Ì»òÏß³Ì?£¬´Ó¶ø¼«´óµØ½µµÍÁË·þÎñÆ÷µÄ×ÊÔ´ÏûºÄ£¬ÌáÉýÁË´¦ÀíÄÜÁ¦¡£
¶ÔÓÚÊÓÆµÕâÖÖÐèÒª³ÖÐø¡¢´óÁ¿Êý¾Ý´«ÊäµÄÓ¦Óó¡¾°¶øÑÔ£¬ÕâÖÖ¸ßЧµÄ²¢·¢´¦ÀíÄÜÁ¦ÊÇÖÁ¹ØÖØÒªµÄ¡£
SSL/TLS¼ÓÃÜ£ºÎªÊÓÆµ´«ÊäÆôÓÃSSL/TLS¼ÓÃÜ£¬±£»¤Óû§Êý¾Ý°²È«£¬½¨Á¢ÐÅÈΡ£·ÃÎÊ¿ØÖÆ£ºÉèÖÃIP·ÃÎÊÏÞÖÆ¡¢Referer¼ì²éµÈ£¬·Àֹδ¾ÊÚȨµÄ·ÃÎʺ͵ÁÁ´¡£¼à¿ØÓëÈÕÖ¾£ºÀûÓÃNginxµÄ·ÃÎÊÈÕÖ¾ºÍ´íÎóÈÕÖ¾£¬½áºÏµÚÈý·½¼à¿Ø¹¤¾ß(ÈçPrometheus,Grafana)£¬ÊµÊ±¼à¿Ø·þÎñÆ÷ÐÔÄÜ¡¢Á¬½ÓÊý¡¢Á÷Á¿µÈ¹Ø¼üÖ¸±ê£¬¼°Ê±·¢Ïֺͽâ¾öDZÔÚÎÊÌâ¡£
ngx_http_vhost_traffic_status_moduleÄ£¿é¿ÉÒÔÌṩÏêϸµÄÁ÷Á¿Í³¼ÆÐÅÏ¢¡£
ͨ¹ýÒÔÉÏ¶à·½ÃæµÄ¾«Ï¸»¯ÅäÖúÍÓÅ»¯£¬NginxÄܹ»ÕæÕýÊÍ·ÅÆäÔÚÊÓÆµ´«ÊäÁìÓòµÄÈ«²¿Ç±Á¦£¬ÊµÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µÄÄ¿±ê¡£´Ó»ù´¡¼Ü¹¹µ½ºËÐŦÄÜ£¬ÔÙµ½¸ß¼¶ÓÅ»¯²ßÂÔ£¬NginxΪ¹¹½¨¸ßÐÔÄÜ¡¢¸ß¿ÉÓᢿÉÀ©Õ¹µÄÁ÷ýÌåÆ½Ì¨ÌṩÁËÇ¿´óµÄ¼¼ÊõÖ§³Å£¬ÈÃÓû§¾¡ÏíË¿»¬Á÷³©µÄ?³¬?·²ÊÓÆµÌåÑé¡£
Õâ²»½ö½öÊǼ¼ÊõµÄʤÀû£¬¸üÊǶÔÓû§ÌåÑ鼫ÖÂ×·ÇóµÄÌåÏÖ¡£
Nginx100%ÊÓÆµÓÅ»¯£º¶´Ï¤Á÷ýÌåʱ´úµÄÐÔÄÜÒýÇæ
ÔÚÐÅÏ¢±¬Õ¨µÄÊý×ÖÀ˳±ÖУ¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪ¹µÍ¨¡¢ÓéÀÖºÍѧϰµÄºËÐÄÔØÌå¡£ÎÞÂÛÊǸßÇåµçÓ°µÄµã²¥£¬»¹ÊÇʵʱ¾«²Ê?µÄÖ±²¥£¬Óû§¶ÔÁ÷³©¡¢ÎÞ¿¨¶ÙµÄ¹Û¿´ÌåÑéÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£Ãæ¶ÔÈÕÒæÔö³¤µÄÊÓÆµÁ÷Á¿ºÍÓû§ÆÚÍû£¬·þÎñÆ÷µÄÐÔÄÜÆ¿¾±¡¢´ø¿íµÄÏÞÖÆÒÔ¼°ÍøÂç´«ÊäµÄÑÓ³Ù£¬³£³£ÈÃÃÀºÃµÄ¹ÛӰ˲¼ä»¯ÎªÅÝÓ°¡£
´Ëʱ£¬Ò»¿îÇ¿´ó¶øÁé»îµÄ·þÎñÆ÷Èí¼þ¾ÍÏÔµÃÓÈÎªÖØÒª¡£Nginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÔçÒѲ»½ö½öÊǾ²Ì¬ÎļþµÄ°áÔ˹¤£¬Ëü¸üÊÇÁ÷ýÌåÁìÓòµÄÒþÐÎÍõÕߣ¬Í¨¹ýһϵÁо«ÃîµÄÅäÖÃÓëÓÅ»¯£¬Äܹ»½«ÊÓÆµ²¥·ÅµÄÌåÑéÌáÉýÖÁǰËùδÓеĸ߶ȣ¬ÊµÏÖ¡°Nginx100%ÊÓÆµÓÅ»¯¡±µÄÖÕ¼«Ä¿±ê¡£
²¿ÊðNginx±ßÔµ½Úµã£ºÔÚijЩÇé¿öÏ£¬Ò²¿ÉÒÔ½«NginxÖ±½Ó²¿ÊðÔÚCDNµÄ±ßÔµ½ÚµãÉÏ£¬¸ºÔ𻺴æºÍ·Ö·¢ÊÓÆµÄÚÈÝ¡£ÕâÖÖ·½Ê½Äܹ»½øÒ»²½Ëõ¶ÌÓû§·ÃÎÊ·¾¶£¬½µµÍÑÓ³Ù¡£ÅäÖÃlocation¿é£ºÕë¶ÔÊÓÆµÎļþ£¨Èç.mp4,.ts,.m3u8µÈ£©µÄlocation¿é£¬ÐèÒª½øÐÐϸÖµÄÅäÖ㬰üÀ¨»º´æ¹æÔò¡¢¹ýÆÚʱ¼ä¡¢ÒÔ¼°±ØÒªµÄ·ÃÎÊ¿ØÖÆ¡£
HTTPSµÄ?ÓÅ»¯£ºËæ×ÅÍøÂ簲ȫÒâʶµÄÌáÉý£¬HTTPSÒѾ³ÉΪ±êÅä¡£ËäÈ»HTTPS»á´øÀ´Ò»¶¨µÄÐÔÄÜ¿ªÏú£¬µ«NginxÌṩÁ˶àÖÖÓÅ»¯ÊֶΣº
SSLSessionRe-use£º¿ªÆôssl_session_cacheºÍssl_session_timeout£¬ÔÊÐí¿Í»§¶ËÖØÓÃ֮ǰµÄSSL»á»°£¬¼õÉÙÎÕÊÖ¿ªÏú¡£TLSv1.3ÓÅ»¯£ºÓÅÏÈʹÓÃTLSv1.3ÐÒ飬¸ÃÐÒéÔÚÎÕÊÖËٶȺͰ²È«ÐÔÉ϶¼ÓÐÏÔÖøÌáÉý¡£
HTTP/2/HTTP/3£ºÅäºÏHTTP/2»òHTTP/3ÐÒ飬¿ÉÒÔʵÏÖ¶à·¸´Óá¢Í·²¿Ñ¹ËõµÈÌØÐÔ£¬½øÒ»²½ÌáÉý´«ÊäЧÂÊ¡£
ΪÁËÓ¦¶ÔÍ»·¢Á÷Á¿ºÍDZÔڵĹ¥»÷£¬ÅäÖÃÁ÷Á¿¿ØÖÆÊDZØÒªµÄ¡£
http{#¶¨ÒåÒ»¸öÇøÓò£¬Ã¿ÃëÔÊÐí100¸öÇëÇó£¬ÁîÅÆÍ°ÈÝÁ¿Îª100limit_req_zone$binary_remote_addrzone=mylimit:10mrate=100r/s;server{#...location~*\.(mp4|mkv|avi|mov|flv|webm)${proxy_passhttp://your_backend_video_server;proxy_cachevideo_cache;proxy_cache_valid20030210m;proxy_cache_valid4041m;proxy_cache_key"$scheme$request_method$host$request_uri";add_headerX-Cache-Status$upstream_cache_status;limit_reqzone=mylimitburst=100nodelay;#Ó¦ÓÃÁ÷Á¿ÏÞÖÆ}#...}}limit_req_zone:¶¨ÒåÒ»¸öÃûΪmylimitµÄÇøÓò£¬ÒÔ¿Í»§¶ËIP($binary_remote_addr)×÷Ϊ±êʶ£¬ÔÊÐíÿÃë100¸öÇëÇó£¬ÁîÅÆÍ°ÈÝÁ¿Îª100¡£
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµÁìÓò´ó?·ÅÒì²Ê£¬ÓëÆä¸ßЧµÄʼþÇý¶¯¡¢Òì²½·Ç×èÈûI/OÄ£ÐÍÃܲ»¿É·Ö¡£´«Í³µÄ·þÎñÆ÷Ä£ÐÍÍùÍù²ÉÓýø³Ì/Ïß³Ì?Ä£ÐÍ£¬Ã¿¸öÁ¬½Ó¶¼ÐèÒªÏûºÄÒ»¸ö½ø³Ì?»òỊ̈߳¬Ôڸ߲¢·¢³¡¾°Ï£¬×ÊÔ´ÏûºÄ¾Þ´ó£¬ÐÔÄÜÆ¿¾±ËæÖ®¶øÀ´¡£¶øNginxÔòͨ¹ýʼþÇý¶¯»úÖÆ£¬Äܹ»Óü«ÉٵĽø³Ì?/Ï̴߳¦Àí³ÉǧÉÏÍòµÄ²¢·¢Á¬½Ó¡£
¶ÔÓÚÊÓÆµÁ÷ýÌå¶øÑÔ£¬ÕâÒâζ×ÅNginx¿ÉÒÔ¸ßЧµØ´¦Àí´óÁ¿¿Í»§¶ËͬʱÇëÇóÊÓÆµ×ÊÔ´£¬¶ø²»»áÒòΪÁ¬½ÓÊý¼¤Ôö¶øµ¼ÖÂÐÔÄÜÖè½µ¡£
¸üÖØÒªµÄÊÇ£¬NginxµÄÄÚ´æ¹ÜÀíºÍ»º³åÇø»úÖÆÒ²ÎªÆäÊÓÆµÐÔÄܵÄ?׿Խ±í?Ïֵ춨ÁË»ù´¡¡£ËüÄܹ»ÓÐЧµØ¹ÜÀíÄڴ棬¼õÉÙ²»±ØÒªµÄÄڴ濽±´£¬²¢Í¨¹ý¾«Ï¸µÄ»º³åÇø¿ØÖÆ£¬ÓÅ»¯Êý¾ÝÔÚÍøÂç´«ÊäÖеÄÁ÷¶¯£¬´Ó¶ø½µµÍÑÓ³Ù£¬Ìá¸ßÍÌÍÂÁ¿¡£
µ±Ä³Ì¨ºó¶Ë·þÎñÆ÷·¢Éú¹ÊÕÏʱ£¬NginxÄܹ»ÖÇÄܵؽ«Á÷Á¿Çл»µ½ÆäËû½¡¿µ·þÎñÆ÷£¬±£Ö¤·þÎñµÄÁ¬ÐøÐÔ£¬ÈÃÓû§¼¸ºõ¸ÐÊܲ»µ½ÈκÎÖжϡ£
ÓÅÐãµÄ¾²Ì¬Îļþ´¦ÀíÄÜÁ¦£ºÊÓÆµÎļþ±¾ÖÊÉÏÊǾ²Ì¬×ÊÔ´¡£NginxÔÚ´¦?Àí¾²Ì¬Îļþ·½ÃæÓÐ×ÅÎÞÓëÂ×±È?µÄЧÂÊ£¬ËüÄܹ»Ö±½Ó´ÓÎļþϵͳÖжÁÈ¡Îļþ²¢·¢Ë͸ø¿Í»§¶Ë£¬ÎÞÐè¾¹ý¸´ÔÓµÄÓ¦Óò㴦Àí£¬´ó´óÌá¸ßÁË´«ÊäËÙ¶È¡£¶ÔÓڵ㲥ÊÓÆµ£¬Nginx¿ÉÒÔÖ±½Ó×÷ΪÎļþ·þÎñÆ÷£¬ÎªÓû§Ìṩ¸ßËÙµÄÏÂÔØºÍ²¥?·Å·þÎñ¡£
Áé»îµÄÄ£¿é»¯Éè¼ÆÓë·á¸»µÄµÚ?Èý·½Ä£¿é£ºNginxÓµÓÐÇ¿´óµÄÄ£¿é»¯¼Ü¹¹£¬¿ÉÒÔ¸ù¾ÝÐèÇó¼ÓÔØ»òÒÆ³ý²»Í¬µÄ¹¦ÄÜÄ£¿é¡£ÕâʹµÃNginx¼«¾ß¿ÉÀ©Õ¹ÐÔ¡£ÀýÈ磬ngx_http_flv_module¡¢ngx_http_mp4_moduleµÈÄ£¿éÄܹ»°ïÖúNginx¸ü¸ßЧµØ´¦ÀíÌØ¶¨µÄÊÓÆµ¸ñʽ£»¶øngx_http_vhost_traffic_status_moduleÔò¿ÉÒÔÌṩʵʱµÄÁ÷Á¿¼à¿ØÐÅÏ¢£¬°ïÖú¹ÜÀíÔ±¼°Ê±·¢Ïֺͽâ¾öÎÊÌâ¡£
ÉçÇø»¹¿ª·¢ÁËÐí¶àÓÅÐãµÄ?µÚÈý·½Ä£¿é£¬ÎªNginxÔöÌíÁ˸ü¶àÇ¿´óµÄ¹¦ÄÜ£¬ÈçÊÓÆµ×ªÂ롢ˮӡÌí¼ÓµÈ£¬½øÒ»²½·á¸»ÁËÆäÔÚÊÓÆµÁìÓòµÄÓ¦Óó¡¾°¡£
ҪʵÏÖ¡°100%¡±µÄÊÓÆµÐÔÄÜ£¬Àë²»¿ªÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©µÄÐ×÷¡£Nginx×÷ΪCDN±ßÔµ½ÚµãµÄºËÐÄ×é¼þ£¬°çÑÝ×ÅÖÁ¹ØÖØÒªµÄ½ÇÉ«¡£
CDNµÄºËÐÄ˼ÏëÊǽ«Ô´Õ¾µÄÄÚÈݸ´ÖƵ½È«Çò¸÷µØµÄ¶à¸ö·þÎñÆ÷ÉÏ£¬µ±Óû§ÇëÇóÊÓÆµÊ±£¬CDN»á½«ÇëÇóµ¼ÏòÀëÓû§×î½üµÄ±ßÔµ½Úµã¡£NginxÔÚÕâЩ±ßÔµ½ÚµãÉÏ£¬Í¨¹ýÇ°ÃæÌáµ½µÄ»º´æ»úÖÆ£¬Äܹ»¿ìËÙµØÏòÓû§ÌṩÊÓÆµ¡£
¼õÇáԴվѹÁ¦£º´ó²¿·ÖÁ÷Á¿ÓɱßÔµ½Úµã³Ðµ££¬Ô´Õ¾Ö»Ð踺ÔðÄÚÈݵĸüкÍÉÙÁ¿Î´ÃüÖлº´æµÄÇëÇó¡£½µµÍÑÓ³Ù£ºÓû§·ÃÎÊ×î½üµÄ½Úµã£¬´ó´óËõ¶ÌÁËÍøÂç´«Êä¾àÀ룬ÏÔÖø½µµÍÁËÊÓÆµ¼ÓÔØºÍ²¥·ÅµÄÑÓ³Ù¡£Ìá¸ß¿ÉÓÃÐÔ£º¼´Ê¹Ä³¸ö±ßÔµ½Úµã³öÏÖ¹ÊÕÏ£¬Óû§µÄÇëÇóÒ²¿ÉÒÔ±»µ¼ÏòÆäËû¿ÉÓýڵ㣬ȷ±£·þÎñµÄÁ¬ÐøÐÔ¡£
ÔÚCDN¼Ü¹¹ÖУ¬Nginxͨ³£×÷Ϊ·´Ïò´úÀí²¿ÊðÔÚ±ßÔµ½Úµã£¬½ÓÊÕÀ´×ÔÓû§µÄÇëÇó£¬È»ºó¸ù¾Ý»º´æ²ßÂÔ½øÐд¦Àí¡£Èç¹û»º´æÃüÖУ¬ÔòÖ±½ÓÏìÓ¦£»Èç¹û»º´æÎ´ÃüÖУ¬Ôò½«ÇëÇóת·¢¸øÉÏÒ»¼¶µÄ»º´æ·þÎñÆ÷»òÔ´Õ¾£¬²¢½«»ñÈ¡µ½µÄÄÚÈÝ»º´æÆðÀ´£¬ÒÔ±¸ºóÐøÊ¹Óá£
http{#...otherhttpconfigurations...client_body_buffer_size128k;client_header_buffer_size4k;large_client_header_buffers3128k;output_buffers2128k;#Adjustbasedonyourneedsaio_writeon;#IfsupportedbyyourOS#...otherconfigurations...}
ͨ¹ýÒÔÉÏ»ù´¡ÅäÖõÄÓÅ»¯£¬NginxÒѾΪ¸ßЧµÄÊÓÆµ´«Êäµì¶¨Á˼áʵµÄ»ù´¡¡£ÒªÕæÕýʵÏÖ100%µÄÊÓÆµÐÔÄÜ£¬ÎÒÃÇ»¹ÐèÒªÉîÈëµ½¸ü¸ß¼¶µÄÓÅ»¯²ßÂÔ£¬Õ⽫ÔÚÏÂÒ»²¿·ÖÏêϸչ¿ª¡£
Nginx100%ÊÓÆµÐÔÄÜ£º´Ó¸ß¼¶ÓÅ»¯µ½Á÷ýÌåÐÒéµÄÉî¶ÈÕûºÏ
ÔÚ´òºÃÁ˼áʵµÄ»ù´¡Ö®ºó£¬ÎÒÃÇÏÖÔÚÒª½øÒ»²½ÍÚ¾òNginxÔÚÊÓÆµÐÔÄÜÉϵÄDZÁ¦£¬Í¨¹ý¸ß¼¶ÅäÖúͶÔÁ÷ýÌåÐÒéµÄÉî¶ÈÕûºÏ£¬½«ÊÓÆµ´«ÊäµÄЧÂÊÍÆÏò¼«Ö¡£Õâ²»½ö½öÊǼòµ¥µÄ²ÎÊýµ÷Õû£¬¸üÊǶÔNginxÄÜÁ¦µÄÈ«ÃæÊÍ·Å¡£
http{#...otherhttpconfigurations...open_file_cachemax=2000inactive=20s;open_file_cache_valid30s;open_file_cache_min_uses2;open_file_cache_errorson;}max£º»º´æÖпÉÒÔ´æ´¢µÄ×î´óÎļþÃèÊö·ûÊýÁ¿¡£
inactive£ºÈç¹ûÒ»¸öÎļþÃèÊö·ûÔÚÖ¸¶¨Ê±¼äÄÚûÓб»·ÃÎÊ£¬½«±»´Ó»º´æÖÐɾ³ý¡£open_file_cache_valid£º¼ì²é»º´æÖÐÎļþÃèÊö·ûµÄÓÐЧÐÔ¼ä¸ô¡£open_file_cache_min_uses£ºÎļþÃèÊö·ûÖÁÉÙÐèÒª±»·ÃÎʶàÉٴβÅÄܱ»»º´æ¡£
SendfileºÍtcpnopush/tcpnodelay£º
sendfileon;£ºÆôÓÃÄÚ´æÁ㿽±´¡£ÈçǰËùÊö£¬ÕâÄܼ«´óµØ?ÌáÉýÎļþ´«ÊäЧÂÊ¡£tcp_nopushon;£ºÔÚNginx·¢ËÍÏìӦͷ֮ºó£¬²»Á¢¼´·¢ËÍÊ£ÓàµÄÊý¾Ý£¬¶øÊǵȴýÎļþÊý¾Ý×¼±¸ºÃºó£¬Ò»´ÎÐÔ·¢ËÍ¡£Õâ¿ÉÒÔ¼õÉÙTCP±¨ÎĵÄÊýÁ¿£¬Ìá¸ß´«ÊäЧÂÊ¡£
ÎļþÃèÊö·ûÏÞÖÆ£ºÔö¼Óϵͳ¼¶ºÍÓû§¼¶µÄÎļþÃèÊö·ûÏÞÖÆ£¨ulimit-n£©£¬ÒÔÓ¦¶Ôº£Á¿²¢·¢Á¬½Ó¡£ÍøÂ绺³åÇøµ÷ÓÅ£ºµ÷ÕûTCP½ÓÊÕ»º³åÇø£¨net.core.rmem_max,net.ipv4.tcp_rmem£©ºÍ·¢ËÍ»º³åÇø£¨net.core.wmem_max,net.ipv4.tcp_wmem£©£¬ÒÔ¸üºÃµØÊÊÓ¦´ó´ø¿í¡¢µÍÑÓ³ÙµÄÍøÂç»·¾³¡£
TCPÁ¬½Ó²ÎÊý£ºÓÅ»¯net.ipv4.tcp_tw_reuse¡¢net.ipv4.tcp_fin_timeoutµÈ²ÎÊý£¬ÒÔ¸üÓÐЧµØ¹ÜÀíTCPÁ¬½ÓµÄÉúÃüÖÜÆÚ£¬¼õÉÙTIME_WAIT״̬µÄ×ÊÔ´Õ¼Óá£CPUÇ׺ÍÐÔÓëNUMA£º¶ÔÓÚ¶àºËCPU·þÎñÆ÷£¬½«NginxµÄ¹¤×÷½ø³Ì°ó¶¨µ½Ìض¨µÄCPUºËÐÄ£¬²¢?¿¼ÂÇNUMA¼Ü¹¹µÄÓÅ»¯£¬¿ÉÒÔ¼õÉÙCPU»º´æÊ§Ð§ºÍ¿ç½Úµã·ÃÎÊ£¬Ìá¸ßÐÔÄÜ¡£
¶ÔÓÚÁ÷ýÌåÊÓÆµ£¬ÓÈÆäÊǵ㲥ºÍÖ±²¥£¬Í¨³£²ÉÓÃHTTPLiveStreaming(HLS)»òMPEG-DASHµÈÁ÷ýÌåÐÒ飬½«ÊÓÆµ·Ö¸î³ÉСµÄ?ýÌ寬¶Î£¨segments£©¡£NginxÔڴ˹ý³ÌÖаçÑÝ×ÅÖÁ¹ØÖØÒªµÄ½ÇÉ«¡£
¸ßЧµÄÇÐÆ¬·þÎñ£ºNginxÐèÒªÄܹ»¿ìËÙ¡¢Îȶ¨µØÏìÓ¦¶ÔÕâЩýÌ寬¶ÎµÄÇëÇó¡£Í¨¹ýÇ°ÃæÌáµ½µÄ»º´æ¡¢´ø¿í¿ØÖÆÒÔ¼°HTTP/2/3ÓÅ»¯£¬NginxÄܹ»¸ßЧµØÌṩÕâЩСÎļþ¡£M3U8/MPDÎļþ¹ÜÀí£ºHLSÐÒéʹÓÃ.m3u8Îļþ×÷Ϊ²¥·ÅÁÐ±í£¬DASHʹÓÃ.mpdÎļþ¡£
NginxÐèÒªÄܹ»ÕýÈ·µØÌṩÕâЩÎļþ£¬²¢È·±£ÆäʱЧÐÔ¡£¿ÉÒÔͨ¹ýNginxµÄalias»òrewriteÖ¸ÁîÀ´ÓÅ»¯ÕâЩÎļþµÄ·ÃÎÊ·¾¶¡£¶¯Ì¬ÄÚÈÝÉú³É£ºÔÚijЩ¸ß¼¶³¡¾°Ï£¬.m3u8»ò.mpdÎļþ¿ÉÄÜÐèÒª¶¯Ì¬Éú³É£¬ÒÔ·´Ó³ÊµÊ±µÄ²¥·ÅÁбí±ä»¯£¨ÀýÈ磬ֱ²¥ÖÐÐÂÇÐÆ¬µÄÌí¼Ó£©¡£
Nginx¿ÉÒÔͨ¹ýÓëºó¶ËÓ¦Ó÷þÎñÆ÷£¨ÈçPHP¡¢Python¡¢Go£©¼¯³É£¬ÊµÏÖ¶¯Ì¬ÄÚÈݵÄÉú³ÉºÍ·Ö·¢¡£
nginx-rtmp-moduleµÄÓÅÊÆ£ºÕâ¸öÄ£¿é·Ç³£Ç¿´ó£¬ËüÔÊÐíNginx³äµ±RTMP·þÎñÆ÷£¬Ö§³ÖÖ±²¥ÍÆÁ÷¡¢Ö±²¥µã²¥£¬ÉõÖÁ»¹¿ÉÒÔÉú³ÉHLSºÍDASHÁ÷£¨Ò»ÖÖ¡°ÀÁ÷×ªÍÆ¡±µÄ»ìºÏģʽ£©£¬½øÒ»²½À©Õ¹ÁËNginxÔÚÁ÷ýÌåÁìÓòµÄ?Ó¦Óá£RTMPÓÅ»¯£ºµ÷Õû»º³åÇø£ºÍ¨¹ýrtmp_bufferºÍrtmp_max_bufferÖ¸Á¿ÉÒÔµ÷ÕûRTMPµÄ»º³åÇø´óС£¬ÒÔÓ¦¶ÔÍøÂ粨?¶¯¡£
ÍÆÁ÷Óë»ØÔ´£ºÈç¹ûNginx×÷ΪRTMP·þÎñÆ÷£¬ÐèÒª¹Ø×¢ÍÆÁ÷¶ËµÄ´ø¿íºÍÎȶ¨ÐÔ¡£Èç¹û×÷ΪRTMP»ØÔ´£¬ÔòÐèҪȷ±£Ô´Õ¾µÄRTMP·þÎñÎȶ¨¡£
ºËÐÄÓÅ»¯²ßÂÔËÄ£ºÏ¸ÖÂÈë΢µÄHTTPÅäÖ㬽õÉÏÌí»¨£¡
³ýÁËÉÏÊöºËÐIJßÂÔ£¬Ò»Ð©Ï¸ÖµÄHTTPÅäÖÃͬÑùÄÜΪÊÓÆµÓÅ»¯¹±Ï×Á¦Á¿¡£
Keep-AliveÁ¬½Ó£ºÆôÓÃHTTPKeep-Alive£¨keepalive_timeoutÖ¸Á¿ÉÒÔ¸´ÓÃTCPÁ¬½Ó£¬¼õÉÙTCPÈý´ÎÎÕÊֵĿªÏú£¬¶ÔÓÚÆµ·±µÄСÎļþ´«Ê䣨ÈçHLSµÄ.tsƬ¶Î£©Ð§Âʼ«¸ß¡£HTTP/2ÐÒ飺ÈçǰËùÊö£¬HTTP/2µÄÒýÈëÊÇÊÓÆµ´«ÊäµÄÒ»´ó·ÉÔ¾¡£
use_temp_path=off¿ÉÒÔ±Ü?Ãâ¶îÍâµÄ´ÅÅÌI/O¡£location~*\.(mp4|mkv|avi|mov|flv|webm)$:Æ¥Åä³£¼ûµÄÊÓÆµÎļþºó׺¡£proxy_passhttp://your_backend_video_server;:Ö¸¶¨ºó¶ËÊÓÆµÔ´·þÎñÆ÷¡£
proxy_cachevideo_cache;:ÆôÓÃÃûΪvideo_cacheµÄ»º´æÇøÓò¡£proxy_cache_valid20030210m;:ÉèÖöÔHTTP״̬ÂëΪ200ºÍ302µÄÏìÓ¦£¬»º´æ10·ÖÖÓ¡£Äú¿ÉÒÔ¸ù¾ÝÊÓÆµÄÚÈݵĸüÐÂÆµÂʵ÷ÕûÕâ¸öʱ¼ä¡£
proxy_cache_key"$scheme$request_method$host$request_uri";:¶¨Ò建´æµÄ¼ü£¬È·±£²»Í¬µÄÇëÇóÄܹ»ÕýÈ·Æ¥Åäµ½»º´æ¡£add_headerX-Cache-Status$upstream_cache_status;:Ìí¼ÓÒ»¸öÏìӦͷ£¬·½±ãÄú²é¿´»º´æÃüÖÐÇé¿ö£¨HIT¡¢MISS¡¢EXPIREDµÈ£©¡£
HTTPS£ºÎªÊÓÆµ²¥·ÅÆôÓÃHTTPS£¬È·±£Êý¾Ý´«ÊäµÄ°²È«ÐÔ¡£DDoS·À»¤£ºÍ¨¹ýNginxµÄÁ¬½ÓÏÞÖÆ(limit_conn)¡¢ÇëÇóƵÂÊÏÞÖÆ(limit_req)µÈÄ£¿é£¬µÖÓùDDoS¹¥»÷¡£HTTP/2&HTTP/3£ºÉý¼¶µ½HTTP/2»òHTTP/3ÐÒ飬ÀûÓöà·¸´Óá¢Í·²¿Ñ¹ËõµÈÌØÐÔ£¬½øÒ»²½ÌáÉý´«ÊäЧÂÊ£¬ÓÈÆäÊÇÔÚ¸ßÑÓ³ÙÍøÂç»·¾³Ï¡£
ÐÔÄÜ¼à¿ØÓëÕï¶Ï£ºÊ¹ÓÃngx_http_stub_status_moduleÄ£¿é²é¿´NginxµÄʵʱÁ¬½ÓÊý¡¢ÇëÇóÊýµÈÐÅÏ¢¡£½áºÏPrometheus,GrafanaµÈ¹¤¾ß½øÐиüÈ«ÃæµÄÐÔÄÜ¼à¿ØºÍÈÕÖ¾·ÖÎö£¬ÒԱ㼰ʱ·¢Ïֺͽâ¾öÐÔÄÜÆ¿¾±¡£
ʵʱ¼à¿Ø£ºÀûÓÃNginxÌṩµÄstub_statusÄ£¿é»òµÚ?Èý·½¼à¿Ø¹¤¾ß£¨ÈçPrometheus+Grafana£©£¬ÊµÊ±¼à¿ØNginxµÄÁ¬½ÓÊý¡¢ÇëÇóÊý¡¢´ø¿íʹÓÃÇé¿öµÈ¹Ø¼üÖ¸±ê¡£
ÈÕÖ¾·ÖÎö£ºNginxµÄ·ÃÎÊÈÕÖ¾¼Ç¼ÁËÏêϸµÄÇëÇóÐÅÏ¢£¬Í¨¹ý¶ÔÈÕÖ¾½øÐзÖÎö£¬¿ÉÒÔ·¢ÏÖDZÔÚµÄ?ÐÔÄÜÆ¿¾±¡¢Òì³£ÇëÇóºÍÓû§·ÃÎÊģʽ¡£Ê¹ÓÃÈÕÖ¾·ÖÎö¹¤¾ß£¨ÈçELKStack£©¿ÉÒÔ¸üÓÐЧµØ½øÐÐÈÕÖ¾¾ÛºÏ¡¢ËÑË÷ºÍ¿ÉÊÓ»¯£¬ÎªÐÔÄÜÓÅ»¯ÌṩÊý¾ÝÖ§³Ö¡£
ͨ¹ýÉÏÊöһϵÁеÄÓÅ»¯ÅäÖúͲßÂÔ£¬NginxÄܹ»³ä·Ö·¢»ÓÆä¸ßÐÔÄܵÄÓÅÊÆ£¬ÎªÊÓÆµÁ÷ýÌåÌṩÎȶ¨¡¢¸ßЧ¡¢µÍÑӳٵķþÎñ£¬ÕæÕýʵÏÖ¡°Nginx100%ÊÓÆµ£¬100%ÐÔÄÜ¡±µÄÄ¿±ê£¬ÈÃÓû§¾¡Ïí¼«ÖÂÁ÷³©µÄÊÓÌýÊ¢Ñç¡£
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµÓÅ»¯ÁìÓò´ó·ÅÒì²Ê£¬Àë²»?¿ªÆäµ×²ã¼Ü¹¹µÄ¾«ÃîÉè¼Æ¡£Óë´«?ͳµÄ×èÈûʽI/OÄ£ÐͲ»Í¬£¬Nginx²ÉÓÃÁË·Ç×èÈû¡¢Ê¼þÇý¶¯µÄI/O¶à·¸´Óü¼Êõ¡£ÕâÒâζ×Å£¬Nginx¿ÉÒÔͬʱ´¦Àí³ÉǧÉÏÍòµÄ²¢·¢Á¬½Ó£¬¶øÎÞÐèΪÿ¸öÁ¬½Ó´´½¨¶ÀÁ¢µÄ½ø³Ì»òÏ̡߳£
ÕâÖÖ¸ßЧµÄ×ÊÔ´ÀûÓ÷½Ê½£¬¼«´óµØÌáÉýÁË·þÎñÆ÷µÄ²¢·¢´¦ÀíÄÜÁ¦£¬¶ÔÓÚÐèҪͬʱÏò´óÁ¿Óû§·Ö·¢ÊÓÆµÊý¾ÝµÄÁ÷ýÌå·þÎñÆ÷¶øÑÔ£¬ÆäÓÅÊÆ²»ÑÔ¶øÓ÷¡£
¸üÖØÒªµÄÊÇ£¬NginxÔÚ¾²Ì¬Îļþ´«?Êä·½ÃæÓµÓм«¸ßµÄ?ЧÂÊ¡£ÊÓÆµÎļþ£¬ÓÈÆäÊǾ¹ýÓÅ»¯µÄýÌåÎļþ£¬±¾ÖÊÉÏÊÇ´óÐ͵ľ²Ì¬×ÊÔ´¡£Nginxͨ¹ýÆä¾«Ï¸µÄ»º´æ»úÖÆ¡¢¸ßЧµÄ·¢ËÍÎļþ£¨sendfile£©ÏµÍ³µ÷ÓÃÒÔ¼°¾«¼òµÄHTTPÍ·²¿´¦Àí£¬Äܹ»ÒÔ¼«¿ìµÄËٶȽ«ÊÓÆµÊý¾Ý´Ó´Å?ÅÌ·¢Ë͵½¿Í»§¶Ë¡£
ÕâÖ±½Óת»¯Îª¸ü¶ÌµÄ¼ÓÔØÊ±¼ä£¬¸üÉٵķþÎñÆ÷CPUÕ¼Óã¬ÒÔ¼°¸ü¸ßµÄÍÌÍÂÁ¿¡£
Nginx²ÉÓÃÁËʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄI/OÄ£ÐÍ£¬ÌرðÊÇ»ùÓÚepoll»úÖÆ£¬Äܹ»¸ßЧµØ´¦Àí´óÁ¿²¢·¢Á¬½Ó¡£¶ÔÓÚÊÓÆµ´«Êä¶øÑÔ£¬ÕâÒâζ×Åʲô£¿ÏëÏóһϣ¬µ±³ÉǧÉÏÍòµÄÓû§Í¬Ê±¹Û¿´Í¬Ò»³¡Ö±²¥£¬»òÕßÏÂÔØ¸ßÇåµçӰʱ£¬·þÎñÆ÷ÐèҪͬʱά³Ö´óÁ¿µÄÁ¬½Ó£¬²¢ÊµÊ±´«ÊäÊý¾Ý¡£
´«Í³µÄ×èÈûʽI/OÄ£ÐÍÔÚÕâÖÖ³¡?¾°Ï»᲻¿°Öظº£¬µ¼?ÖÂÁ¬½Ó³¬Ê±¡¢ÏìÓ¦»ºÂý£¬Óû§ÌåÑéÖ±ÏßϽµ¡£¶øNginxµÄepollÄ£ÐÍ£¬Äܹ»ÔÚÒ»¸öÏß³ÌÖйÜÀí³É°ÙÉÏǧµÄÁ¬½Ó£¬µ±Ä³¸öÁ¬½ÓÓÐÊý¾Ý¿É¶Á»ò¿Éдʱ£¬ÏµÍ³»á֪ͨ¸ÃỊ̈߳¬´Ó¶ø±ÜÃâÁË´óÁ¿µÄÏ̴߳´½¨ºÍÉÏÏÂÎÄÇл»¿ªÏú¡£
×îа汾µÄNginx£¬ÔÚepollµÄµ÷¶ÈËã·¨ºÍ×ÊÔ´·ÖÅäÉϽøÐÐÁ˽øÒ»²½µÄ¾«Ï¸µ÷ÓÅ£¬Ê¹µÃÔÚ´¦ÀíÊÓÆµÕâÀà³ÖÐø¡¢´óÊý¾ÝÁ¿µÄ?´«Êäʱ£¬Äܹ»¸ü¼ÓÓÎÈÐÓÐÓ࣬ȷ±£Ã¿¸öÓû§µÄÁ¬½Ó¶¼Äܵõ½¼°Ê±ÏìÓ¦£¬ÊµÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÄÎȶ¨»ùʯ¡£
2.HTTP/2ºÍHTTP/3µÄÈ«ÃæÓµ±§£ºÌáËÙÊÓÆµ¼ÓÔØµÄ¹Ø¼ü
HTTPÐÒéÊÇ»¥ÁªÍøÍ¨ÐŵĻù´¡£¬¶øHTTP/2ºÍHTTP/3µÄ³öÏÖ£¬¸üÊÇÎªÍøÂç´«Êä´øÀ´Á˸ïÃüÐÔµÄÌáÉý¡£Nginx×îа汾¶ÔÕâЩÐÂÐÒéµÄÖ§³Ö£¬ÊÇʵÏÖÊÓÆµÓÅ»¯µÄÁíÒ»ÏîÖØÒª¾Ù´ë¡£
ÔÚpart1ÖУ¬ÎÒÃÇÉîÈëÁ˽âÁËNginxµÄºËÐÄÓÅÊÆ£¬ÒÔ¼°ËüΪºÎÄܹ»³ÉΪÊÓÆµÁ÷´«?ÊäÁìÓòµÄٮٮÕß¡£ÏÖÔÚ£¬ÊÇʱºò½«ÀíÂÛ¸¶Öîʵ¼ù£¬¿´¿´Nginx100ÊÓÆµÊÇÈçºÎÔÚÕæÊµ³¡¾°Öдó·ÅÒì²ÊµÄ¡£´ÓÖ±²¥ÍÆÁ÷µ½µã²¥·þÎñ£¬´ÓCDN±ßÔµ½Úµãµ½±ßÔµ¼ÆË㣬Nginxƾ½èÆäÇ¿´óµÄ¹¦ÄܺÍÁé»îÐÔ£¬ÕýÔÚÖØËÜ×ÅÊÓÆµÄÚÈݵĴ«Ê䷽ʽ£¬ÎªÓû§´øÀ´Ç°ËùδÓеÄÁ÷³©¡¢Îȶ¨¡¢¸ßÖÊÁ¿µÄ¹Û¿´ÌåÑé¡£
Ö±²¥ÍÆÁ÷ÓëתÂ룺Nginx´î½¨RTMPÖ±²¥·þÎñÆ÷µÄ»Æ½ð´îµµ?
¶ÔÓÚÐí¶àÖ±²¥Æ½Ì¨¶øÑÔ£¬RTMPÐÒéÒÀÈ»ÊÇÖØÒªµÄÍÆÁ÷·½Ê½¡£NginxÅäºÏnginx-rtmp-module£¬¿ÉÒÔÇáËɴһ¸ö¸ßÐÔÄܵÄRTMP·þÎñÆ÷£¬½ÓÊÕÀ´×ÔÖ÷²¥µÄÍÆÁ÷¡£¸üÁîÈËÐ˷ܵÄÊÇ£¬Nginx»¹¿ÉÒÔÀûÓÃÆäÇ¿´óµÄ´¦ÀíÄÜÁ¦£¬ÊµÏÖÊÓÆµÁ÷µÄʵʱתÂë¡£
ÏëÏóһϣ¬Ö÷²¥?ʹÓÃÒ»Ì×±à?Âë²ÎÊýÍÆÁ÷£¬¶ø¹ÛÖÚÔò¿ÉÄÜʹÓø÷ÖÖ²»Í¬µÄÉ豸ºÍÍøÂç»·¾³¹Û¿´¡£ÎªÁËÂú×㲻ͬÓû§µÄÐèÇó£¬ÎÒÃÇÐèÒª½«ÔʼÊÓÆµÁ÷תÂë³É¶àÖÖÂëÂÊ¡¢·Ö±æÂʵÄHLS»òDASHÇÐÆ¬¡£Nginx½áºÏFFmpegµÈ¹¤¾ß£¬¿ÉÒÔʵÏÖÕâÒ»¹ý³Ì£º
Nginx100%ÊÓÆµ²¥·Å100%£º¼¼Êõ¸ïÐÂÇý¶¯µÄÁ÷³©ÌåÑé
ÔÚÕâ¸öÄÚÈÝΪÍõµÄʱ´ú£¬ÊÓÆµÒÑÈ»³ÉΪÐÅÏ¢´«²¥ºÍÓéÀÖÏû·ÑµÄÖ÷Á÷ÔØÌå¡£Óû§¶ÔÊÓÆµ²¥·ÅµÄ?Á÷³©¶È¡¢ÇåÎú¶ÈºÍÏìÓ¦ËÙ¶ÈÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£¶ø×÷Ϊ¸ßÐÔÄÜWeb·þÎñÆ÷ºÍ·´Ïò´úÀíµÄNginx£¬Ê¼ÖÕÕ¾ÔÚ¼¼ÊõÇ°ÑØ£¬²»¶ÏÍÆ³Â³öУ¬ÎªÊÓÆµÁ÷ýÌåÐÐÒµµÄ·¢Õ¹×¢ÈëÇ¿´óµÄ¶¯Á¦¡£
×îа汾µÄ?Nginx£¬¸üÊÇÒÔ¡°100%ÊÓÆµ²¥·Å100%¡±µÄ¿ÚºÅ£¬ÏòÒµ½çչʾÁËÆäÔÚÊÓÆµ´«ÊäÁìÓòµÄÉîºñʵÁ¦ÓëÎÞÏÞDZÁ¦¡£
Ò»¡¢º»Êµ»ù´¡£ºHTTP/2ÓëHTTP/3µÄÈ«ÃæÉý¼¶
ÊÓÆµÁ÷ýÌå´«ÊäµÄºËÐÄÔÚÓÚ¸ßЧµÄHTTPÐÒé¡£Nginx×îа汾ÔÚÐÒé²ãÃæµÄ¸ïУ¬ÎªÊµÏÖ100%Á÷³©²¥·Åµì¶¨Á˼áʵµÄ»ù´¡¡£
HTTP/2µÄÉî¶ÈÓÅ»¯£ºHTTP/2ÐÒéµÄ?ÒýÈ룬ÒÔÆä¶à·¸´Óá¢Í·²¿?ѹËõ¡¢·þÎñÆ÷ÍÆË͵ÈÌØÐÔ£¬¼«´óµØÌáÉýÁËWeb´«ÊäЧÂÊ¡£NginxÉî¶ÈÓÅ»¯Á˶ÔHTTP/2µÄÖ§³Ö£¬ÏÔÖø¼õÉÙÁËÊÓÆµ¼ÓÔØÊ±µÄÑÓ³Ù?£¬ÓÈÆäÊÇÔÚ´«?Êä´óÁ¿Ð¡ÊÓÆµÆ¬¶Î»òÐèÒª¿ìËÙÇл»ÊÓÆµÊ±£¬ÆäÓÅÊÆÓÈΪÃ÷ÏÔ¡£
ÕâÒâζ×ÅNginx¿ÉÒÔºÁ²»·ÑÁ¦µØ´¦Àíº£Á¿ÊÓÆµÎļþµÄ¿ìËÙ·Ö·¢¡£Ç¿´óµÄ»º´æ»úÖÆ£º¶ÔÓÚÆµ·±·ÃÎʵÄÈȵãÊÓÆµÄÚÈÝ£¬NginxµÄ»º´æ¹¦ÄÜÊÇÌáÉýÐÔÄܵĹؼü¡£Í¨¹ýÅäÖÃproxy_cache»òfastcgi_cacheµÈÄ£¿é£¬¿ÉÒÔ½«ÊÓÆµÎļþ»º´æÔÚÄÚ´æ»ò´ÅÅÌÉÏ¡£
µ±Óû§ÔÙ´ÎÇëÇóÏàͬµÄÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬ÎÞÐèÔٴδÓÔ´·þÎñÆ÷¶ÁÈ¡£¬´Ó¶ø´ó´ó½µµÍÁËÔ´·þÎñÆ÷µÄѹÁ¦£¬Ëõ¶ÌÁËÏìӦʱ¼ä£¬ÊµÏÖÁ˽üºõ˲ʱµÄ·ÃÎÊÌåÑé¡£¸ßЧµÄGzipѹËõ£ºËäÈ»ÊÓÆµÎļþ±¾?Éíͨ³£ÒѾ¾¹ý¸ß¶ÈѹËõ£¬µ«¶ÔÓÚһЩ¸¨ÖúÎļþ£¨ÈçÊÓÆµ²¥·ÅÆ÷ÅäÖÃÎļþ¡¢×ÖÄ»ÎļþµÈ£©£¬GzipѹËõÈÔÈ»ÄÜÆðµ½Ò»¶¨µÄ¼ÓËÙ×÷Óá£
NginxÄÚÖõÄGzipÄ£¿é¿ÉÒÔ¶ÔÕâЩÎı¾ÀàÊý¾Ý½øÐÐʵʱѹËõ£¬¼õÉÙ´«ÊäÁ÷Á¿£¬Ìá¸ß¼ÓÔØËÙ¶È¡£HTTP/2&HTTP/3Ö§³Ö£ºËæ×Å»¥ÁªÍø¼¼ÊõµÄ·¢Õ¹£¬HTTP/2ºÍHTTP/3ÐÒéµÄ³öÏÖΪÊÓÆµ´«Êä´øÀ´ÁËеÄÊï¹â¡£Nginx¶ÔÕâЩÐÂÐÒéÌṩÁËÁ¼ºÃµÄÖ§³Ö¡£
HTTP/2µÄ¶à·¸´ÓÃÌØÐÔ¿ÉÒÔÏÔÖø¼õÉÙÁ¬½ÓÊý£¬½µµÍÑÓ³Ù£»HTTP/3Ôò»ùÓÚQUICÐÒ飬½øÒ»²½ÓÅ»¯ÁËTCPÔÚ²»Îȶ¨ÍøÂçϵÄÐÔÄÜ£¬¼õÉÙÁ˶ª°üÖØ´«´øÀ´µÄÓ°Ï죬¶ÔÓÚÊÓÆµÁ÷µÄÎȶ¨ÐÔÖÁ¹ØÖØÒª¡£
WebRTCÄܹ»ÊµÏÖä¯ÀÀÆ÷µ½ä¯ÀÀÆ÷Ö®¼äµÄµã¶ÔµãʵʱÒôÊÓÆµÍ¨ÐÅ£¬¶øNginx¿ÉÒÔ×÷ΪÐÅÁî·þÎñÆ÷»òýÌå·þÎñÆ÷£¬ÔÚWebRTCÓ¦ÓÃÖаçÑݹؼü½ÇÉ«¡£ÕâΪ¹¹½¨µÍÑÓ³Ù¡¢»¥¶¯ÐÔÇ¿µÄÖ±²¥»¥¶¯¡¢ÔÚÏß»áÒé¡¢Ô¶³ÌÐ×÷µÈÓ¦ÓÃÌṩÁËÇ¿´óµÄ?¼¼ÊõÖ§³Å?¡£´ó¹æÄ£²¢·¢Ö±²¥Á÷´¦Àí£ºÃæ¶Ô´óÐÍÖ±²¥»î¶¯¿ÉÄÜ´øÀ´µÄº£Á¿Óû§²¢·¢ÇëÇó£¬NginxµÄ¸ß²¢?·¢´¦ÀíÄÜÁ¦µÃÒÔ³ä·Ö·¢»Ó¡£
ͨ¹ý¼¯Èº²¿Ê𡢸ºÔؾùºâÒÔ¼°¸ßЧµÄÁ¬½Ó¹ÜÀí£¬NginxÄܹ»Îȶ¨µØ´¦ÀíÀ´×ÔÊý°ÙÍòÓû§µÄÖ±²¥ÇëÇó£¬È·±£Ö±²¥Á÷µÄÎȶ¨Êä³ö£¬±£ÕÏÿһ´Î¡°100%ÊÓÆµ²¥?·Å¡±µÄÁ÷³©½øÐС£
¡°Nginx100ÊÓÆµ¡±²»½ö½öÊÇÒ»¸öÊý×Ö£¬Ëü´ú?±í×ÅNginxÔÚÊÓÆµÁ÷´«ÊäÁìÓòËùÄÜ´ïµ½µÄáÛ·å״̬¡ª¡ª¼«ÖµÄÐÔÄÜ¡¢ÎÞÏÞµÄÀ©Õ¹ÐÔ¡¢Ç¿´óµÄÁé»îÐÔÒÔ¼°ÖÇÄÜ»¯µÄÄÜÁ¦¡£´ÓÖ±²¥µ½µã²¥£¬´ÓCDNµ½±ßÔµ¼ÆË㣬NginxÕýÔÚÒÔÆäÎÞ¿ÉÆ¥µÐµÄÓÅÊÆ£¬Çý¶¯×ÅÊÓÆµÐÐÒµµÄÿһ´Î?¸ïС£
ÕÆÎÕNginxµÄÊÓÆµ´«Êä¼¼Êõ£¬¾ÍÈçÍ¬ÕÆÎÕÁË´ò¿ªÎ´À´ÊÓÆµÊÀ½ç´óÃŵÄÔ¿³×¡£Ëæ×ż¼ÊõµÄ²»¶Ï·¢Õ¹£¬ÎÒÃÇ¿ÉÒÔÔ¤¼û£¬Nginx½«ÔÚ¹¹½¨¸ü¼Ó³Á½þʽ¡¢ÖÇÄÜ»¯¡¢¸öÐÔ»¯µÄÊÓÆµÌåÑéÖУ¬°çÑÝÔ½À´Ô½ÖØÒªµÄ½ÇÉ«¡£Nginx100ÊÓÆµ£¬ÕýÊÇÕâ¹ÉÇ¿´óÁ¦Á¿µÄÉú¶¯Ð´ÕÕ£¬ËüµãȼÁËÊÓÆµÁ÷´«ÊäµÄÒýÇæ£¬ÕýÒýÁìÎÒÃÇÊ»ÏòÒ»¸ö¸ü¼Ó¾«²ÊµÄÊÓÆµÐÂʱ´ú¡£
»º´æ²ßÂÔ£ºHLS/DASH½«ÊÓÆµÇзֳÉСµÄýÌ寬¶Î£¨.ts»ò.mp4£©¡£Nginx¿ÉÒÔÓÐЧµØ»º´æÕâЩýÌ寬¶ÎÒÔ¼°²¥·ÅÁÐ±í£¨.m3u8»ò.mpd£©¡£Í¨¹ýexpiresÖ¸Áî»òproxy_cacheÖ¸Á¿ÉÒÔÅäÖúÏÀíµÄ»º´æ²ßÂÔ£¬ÈÃÓû§Äܹ»¿ìËÙ·ÃÎʵ½³£ÓõÄÊÓÆµÆ¬¶Î¡£
GzipѹËõ£ºËäȻýÌåÎļþ±¾Éíͨ³£ÒѾ½øÐÐÁ˱àÂëѹËõ£¬µ«²¥·ÅÁбíÎļþ£¨.m3u8/.mpd£©ºÍһЩԪÊý¾Ý¿ÉÒÔÆôÓÃGzipѹËõ£¬ÒÔ¼õС´«ÊäÌå»ý£¬Ìá¸ß¼ÓÔØËÙ¶È¡£¿ÉÒÔÔÚhttp»òserver¿éÖÐÉèÖÃgzipon;£¬²¢¸ù¾ÝÐèÒªµ÷Õûgzip_types¡£
HTTP/2Ö§³Ö£ºÆôÓÃHTTP/2ÐÒé¿ÉÒÔÏÔÖøÌáÉýHLS/DASHµÄÐÔÄÜ¡£HTTP/2Ö§³Ö¶à·¸´Óã¨Multiplexing£©£¬ÔÊÐíÔÚÒ»¸öTCPÁ¬½ÓÉÏͬʱ´«Êä¶à¸öÇëÇóºÍÏìÓ¦£¬¼õÉÙÁËÒò¶à¸öýÌ寬¶ÎÐèÒª½¨Á¢¶à¸öÁ¬½ÓµÄ¿ªÏú£¬´ó´óÌá¸ßÁ˲¥·ÅЧÂÊ¡£
2.5ÐÔÄÜ¼à¿ØÓëµ÷ÓÅ£º³ÖÐøÓÅ»¯£¬×·Çó¼«Ö¡°100%ÊÓÆµÓÅ»¯¡±²¢?·ÇÒ»õí¶ø¾Í£¬¶øÊÇÐèÒª³ÖÐøµÄ¼à¿ØºÍµ÷ÓÅ¡£
Nginx·ÃÎÊÈÕÖ¾Óë´íÎóÈÕÖ¾:·ÖÎöÈÕÖ¾¿ÉÒÔ·¢ÏÖDZÔÚµÄÎÊÌ⣬Èç¸ßÑÓ³ÙÇëÇó¡¢´íÎóÏìÓ¦µÈ¡£Nginx״̬¼à¿Ø:ʹÓÃngx_http_stub_status_module»òµÚÈý·½¼à¿Ø¹¤¾ß£¨ÈçPrometheus+Grafana£©À´ÊµÊ±¼à¿ØNginxµÄÁ¬½ÓÊý¡¢ÇëÇóÊý¡¢»º´æÃüÖÐÂʵȹؼüÖ¸±ê¡£
ϵͳ¼¶¼à¿Ø:½áºÏ·þÎñÆ÷µÄ?CPU¡¢ÄÚ´æ¡¢´ÅÅÌI/O¡¢ÍøÂçÁ÷Á¿µÈϵͳ¼¶Ö¸±ê?£¬È«ÃæÆÀ¹ÀNginxµÄÔËÐÐ״̬¡£²ÎÊýµ÷ÓÅ:¸ù¾Ý¼à¿ØÊý¾Ý£¬¶ÔNginxµÄworker½ø³ÌÊý¡¢Á¬½ÓÊý¡¢»º³å?Çø´óС¡¢»º´æÅäÖõȲÎÊý½øÐо«Ï¸»¯µ÷Õû£¬ÒÔ´ïµ½×î¼ÑÐÔÄÜ¡£
ÀýÈ磬µ÷Õûworker_connectionsÀ´Æ¥Åä·þÎñÆ÷µÄCPUºËÐÄÊýºÍʵ¼Ê¸ºÔØ¡£
Îļþ¾ä±úÏÞÖÆ£¨ulimit£©£ºNginxµÄ¹¤×÷½ø³ÌÐèÒª´ò¿ª´óÁ¿µÄ?Îļþ¾ä±úÀ´´¦ÀíÍøÂçÁ¬½ÓºÍÎļþ¶Áд¡£ÔÚLinuxϵͳÖУ¬ÐèҪͨ¹ýulimit-nÃüÁîÀ´Ìá¸ßÿ¸ö½ø³ÌÄܹ»´ò¿ªµÄ×î´óÎļþ¾ä±úÊý¡£Í¨³£½¨Ò齫ÆäÉèÖÃΪһ¸ö½Ï´óµÄÖµ£¬ÀýÈç65535»ò¸ü¸ß£¬ÒÔ±Ü?ÃâÒòÎļþ¾ä±úºÄ¾¡¶øµ¼ÖµÄ?Á¬½Óʧ°Ü¡£
Õâͨ³£ÐèÒªÔÚ/etc/security/limits.confÎļþÖнøÐÐÅäÖ㬲¢È·±£?NginxÆô¶¯Óû§Äܹ»¼Ì³ÐÕâЩÉèÖá£
ÆôÓÃkeepalive£ºkeepalive_timeoutºÍkeepalive_requests²ÎÊý¶ÔÓÚ¼õÉÙTCPÁ¬½ÓµÄ½¨Á¢ºÍ¹Ø±Õ¿ªÏúÖÁ¹ØÖØÒª¡£¶ÔÓÚÊÓÆµÁ÷ýÌ壬±£³ÖÁ¬½ÓµÄ»îÔ¾ÐÔ¿ÉÒÔÏÔÖøÌá¸ßЧÂÊ¡£keepalive_timeoutÉèÖÃÁ˿ͻ§¶ËÁ¬½ÓµÄ±£³Öʱ¼ä£¬¶økeepalive_requestsÔòÏÞÖÆÁËÒ»¸öÁ¬½ÓÔÚ±»?¹Ø±Õǰ¿ÉÒÔ´¦ÀíµÄ×î´óÇëÇóÊý¡£
ÔÚÊÓÆµ²¥·Å³¡¾°Ï£¬Êʵ±ÑÓ³¤keepalive_timeout¿ÉÒÔÓÐЧ¼õÉÙÖØ¸´Á¬½ÓµÄ¿ªÏú£¬ÌáÉýÕûÌåÍÌÍÂÁ¿¡£
Nginx»¹¿ÉÒÔÅäºÏHLS(HTTPLiveStreaming)»òDASH(DynamicAdaptiveStreamingoverHTTP)µÈ×ÔÊÊÓ¦ÂëÂÊÁ÷ýÌåÐÒ飬½«ÊÓÆµÇзֳÉС¶Î£¬²¢Éú³É²¥·ÅÁÐ±í¡£Nginx¿ÉÒÔ¸ßЧµØ·Ö·¢ÕâЩÊÓÆµÆ¬¶ÎºÍ²¥·ÅÁÐ±í£¬Ê¹²¥·ÅÆ÷Äܹ»¸ù¾ÝÓû§µÄÍøÂç×´¿ö¶¯Ì¬µ÷ÕûÊÓÆµÂëÂÊ£¬ÌṩÁ÷³©µÄ¹Û¿´ÌåÑ飬ÓÐЧ½â¾öÒòÍøÂ粨?¶¯µ¼ÖµĿ¨¶ÙÎÊÌâ¡£
CDNÄÚÈÝ·Ö·¢ÍøÂ磺ÔÚ¹¹½¨CDNʱ£¬Nginx°çÑÝ×ÅÖÁ¹ØÖØÒªµÄ½ÇÉ«¡£CDNµÄºËÐÄÔÚÓÚ½«ÄÚÈÝ·Ö·¢µ½ÀëÓû§×î½üµÄ±ßÔµ½Úµã£¬ÒÔËõ¶Ì·ÃÎÊÑÓ³Ù£¬Ìá¸ß·ÃÎÊËÙ¶È¡£Nginx¿ÉÒÔ²¿ÊðÔÚ¸÷¸öCDN±ßÔµ½ÚµãÉÏ£¬×÷ΪÄÚÈÝ»º´æ·þÎñÆ÷ºÍÁ÷Á¿½ÓÈëµã¡£µ±?Óû§ÇëÇóÊÓÆµÊ±£¬ÇëÇó»áÊ×Ïȵ½´ï?¾Í½üµÄCDN½Úµã£¬Èç¹ûÄÚÈÝÒÑ»º´æ£¬Nginx»áÖ±½ÓÌṩ·þÎñ£»Èç¹ûûÓлº´æ£¬Nginx»á»ØÔ´Õ¾»ñÈ¡£¬²¢ÔÚ±¾µØ»º´æ£¬¹©ºóÐøÓû§Ê¹Óá£
NginxµÄ¸ßÐÔÄܺ͵Í×ÊÔ´ÏûºÄ£¬Ê¹Æä³ÉΪ¹¹½¨´ó¹æÄ£¡¢¸ßЧÂÊCDNµÄÀíÏëÑ¡Ôñ£¬´Ó¶øÊµÏÖ¡°100%ÊÓÆµ¡±µÄ¿ìËÙ´¥´ï?¡£
ÿ¸ö¹¤×÷½ø³Ì¿ÉÒÔͬʱ´¦Àí³ÉǧÉÏÍò¸ö²¢?·¢Á¬½Ó£¬Ëüͨ¹ýʼþÑ»·£¨eventloop£©À´¸ßЧµØ¹ÜÀíÕâЩÁ¬½Ó¡£µ±Ò»¸öÁ¬½ÓÓÐI/Oʼþ·¢Éúʱ£¨ÈçÊý¾Ýµ½´ï»ò·¢ËÍÍê±Ï£©£¬Nginx»áÁ¢¼´¸ÐÖªµ½£¬²¢½«Æä½»¸øÏàÓ¦µÄ¹¤×÷½ø³Ì´¦Àí£¬¶øÎÞÐè×èÈûµÈ´ý¡£ÕâÖÖÄ£Ðͼ«´ó?µØ½µµÍÁË×ÊÔ´ÏûºÄ£¬Ê¹µÃNginxÄܹ»ÒÔ¼«µÍµÄ?ÄÚ´æÕ¼Óô¦Àí¼«¸ßµÄ²¢·¢Á¬½Ó¡£
¶ÔÓÚÊÓÆµÁ÷ýÌå¶øÑÔ£¬ÕâÒâζ׿´Ê¹ÔÚÊý°ÙÍòÓû§Í¬Ê±¹Û¿´Ö±²¥»òµã²¥µÄÇé¿öÏ£¬NginxÒ²Äܱ£³ÖÎȶ¨ºÍ¸ßЧ£¬±£Ö¤Ã¿Ò»Ö¡ÊÓÆµ¶¼Äܼ°Ê±ËÍ´ï¡£
¸ßЧµÄ¾²Ì¬Îļþ´¦Àí£ºÊÓÆµÎļþ£¬ÎÞÂÛÊǵ㲥µÄMP4¡¢FLV£¬»¹ÊÇÖ±²¥ÇÐÆ¬ºóµÄTSÎļþ£¬±¾ÖÊÉ϶¼ÊǾ²Ì¬Îļþ¡£NginxÔÚ´¦Àí¾²Ì¬Îļþ·½ÃæÓÐ×ÅÌìÉúµÄÓÅÊÆ¡£ËüÄܹ»Ö±½Ó´Ó²Ù×÷ϵͳÄں˻ñÈ¡ÎļþÊý¾Ý£¬²¢Í¨¹ýsendfile()ϵͳµ÷ÓøßЧµØ½«Êý¾Ý·¢Ë͵½ÍøÂç¡£
sendfile()µÄ¹Ø¼üÔÚÓÚËüÄܹ»ÈƹýÓû§¿Õ¼ä£¬Ö±½ÓÔÚÄÚºË¿Õ¼ä½øÐÐÎļþµ½socketµÄÊý¾Ý´«Ê䣬ʡȥÁËÓû§¿Õ¼äºÍÄں˿ռäµÄÁ½´ÎÊý¾Ý¿½±´£¬´ó´óÌá¸ßÁË´«ÊäЧÂÊ£¬½µµÍÁËCPU¸ºÔØ¡£¶ÔÓÚº£Á¿µÄÊÓÆµÎļþ·Ö·¢£¬NginxµÄÕâÒ»ÌØÐÔÖ±½Óת»¯Îª¸ü¿ìµÄ¼ÓÔØËٶȺ͸üµÍµÄ·þÎñÆ÷ѹÁ¦¡£
»º´æÄ¿Â¼½á¹¹£ººÏÀíµÄ»º´æÄ¿Â¼²ã¼¶¿ÉÒÔÌá¸ß´ÅÅÌI/OЧÂÊ£¬±ÜÃâĿ¼ÏµÄÎļþ¹ý¶àµ¼Ö²éÕÒ»ºÂý¡£proxy_cache_pathÖ¸ÁîÖеÄlevels²Î?Êý¿ÉÒÔ¿ØÖÆ»º´æÄ¿Â¼µÄ²ã¼¶¡£»º´æ´óСÓëÌÔ̲ßÂÔ£ºmax_size²Î?ÊýÓÃÓÚÏÞÖÆ»º´æµÄ×Ü´óС¡£
µ±»º´æ¿Õ¼ä²»×ãʱ£¬Nginx»á¸ù¾ÝLRU(LeastRecentlyUsed)Ëã·¨ÌÔ̾ɵĻº´æ?Îļþ¡£proxy_cache_keyµÄ?ºÏÀíÉè¼Æ£ºÈ·±£»º´æ¼üÄܹ»×¼È·µØ?±êʶ²»Í¬µÄÊÓÆµÄÚÈÝ£¬±ÜÃâ²»±Ø?ÒªµÄ»º´æÊ§Ð§»ò»º´æÈßÓà¡£proxy_cache_bypassºÍproxy_cache_ignore£º¿ÉÒÔÓÃÀ´Èƹý»òºöÂÔÄ³Ð©ÌØ¶¨ÇëÇóµÄ»º´æ£¬ÀýÈçÓû§µÇ¼ºóµÄ¸öÐÔ»¯ÄÚÈÝ¡£
NginxµÄÇ¿´ó¹¦ÄÜʹÆäÔÚÊÓÆµÁ÷ýÌåµÄ¸÷¸ö»·½Ú¶¼ÄÜ·¢»Ó¹Ø¼ü×÷Óá£
µã²¥ÊÓÆµ·þÎñ£º¶ÔÓÚÓû§ËæÊ±¿ÉÒÔ¹Û¿´µÄÊÓÆµÄÚÈÝ£¬Nginx¿ÉÒÔÖ±½Ó×÷Ϊ¸ßÐÔÄܵÄÎļþ·þÎñÆ÷¡£Í¨¹ý¾«Ï¸»¯µÄÅäÖã¬ÈçsendfileÖ¸ÁîµÄ¿ªÆô¡¢»º´æ²ßÂÔµÄ?ÓÅ»¯£¬NginxÄܹ»ÒÔ¼«¿ìµÄËٶȽ«ÊÓÆµÎļþ´«Ê䏸Óû§£¬´ó·ùËõ¶ÌÊÓÆµ¼ÓÔØÊ±¼ä£¬ÌáÉýÓû§ÂúÒâ¶È¡£
ÅäºÏCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩µÄ²¿Êð£¬NginxÄܹ»½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄ½Úµã£¬ÊµÏÖÈ«Çò·¶Î§ÄÚµÄÃë¼¶¼ÓÔØ¡£
Ö±²¥·þÎñ£ºÖ±²¥µÄºËÐÄÔÚÓÚʵʱÐÔÓëÎȶ¨ÐÔ¡£Nginx¿ÉÒÔͨ¹ýRTMPÄ£¿é£¨Èçnginx-rtmp-module£©À´½ÓÊպͷַ¢Ö±²¥Á÷¡£ËüÄܹ»×÷ΪRTMP·þÎñÆ÷£¬½«Ö÷²¥ÍÆË͵½?ƽ̨µÄÖ±²¥Á÷½øÐд¦Àí£¬²¢½«Æä·Ö·¢¸ø³ÉǧÉÏÍòµÄ?¹Û¿´Õß¡£NginxµÄ¸ß²¢·¢´¦ÀíÄÜÁ¦ÔÚÕâÀïµÃµ½³ä·ÖÌåÏÖ£¬Äܹ»ÇáËÉÓ¦¶Ô´ó¹æÄ£Ö±²¥»î¶¯µÄ¹ÛÖÚÓ¿Èë¡£
Nginx»¹¿ÉÒÔÅäºÏHLS£¨HTTPLiveStreaming£©»òDASH£¨DynamicAdaptiveStreamingoverHTTP£©ÐÒ飬½«Ö±²¥Á÷ת»»Îª±ê×¼µÄHTTPÁ÷£¬·½±ãÓû§ÔÚ¸÷ÖÖÉ豸ÉÏͨ¹ýä¯ÀÀÆ÷Ö±½Ó¹Û¿´£¬ÎÞÐè°²×°¶îÍâµÄ²¥·ÅÆ÷²å¼þ¡£
¶ÔÓÚ´óÐÍÊÓÆµÆ½Ì¨¶øÑÔ£¬µ¥Ì¨Nginx·þÎñÆ÷ÄÑÒÔ³ÐÊܾ޴óµÄÁ÷Á¿¡£´Ëʱ£¬NginxµÄ¸ºÔؾùºâ¹¦ÄܾÍÏÔµÃÓÈΪ¹Ø¼ü¡£
¸ºÔؾùºâ²ßÂÔ£ºNginxÖ§³Ö¶àÖÖ¸ºÔؾùºâËã·¨£¬ÈçÂÖѯ(round-robin)¡¢×îÉÙÁ¬½Ó(leastconn)¡¢IP¹þÏ£(iphash)µÈ¡£¶ÔÓÚÊÓÆµ·þÎñ£¬least_connͨ³£ÊǸüÓŵÄÑ¡Ôñ£¬ÒòΪËüÄܽ«ÇëÇó·ÖÅ䏸µ±Ç°Á¬½ÓÊý×îÉٵĺó¶Ë·þÎñÆ÷£¬¸ü¾ùÔȵطÖÉ¢¸ºÔØ¡£
½¡¿µ¼ì²é£ºNginx¿ÉÒÔÅäÖÃupstreamÄ£¿éµÄhealth_checkÖ¸Áͨ³£ÐèÒªµÚÈý·½Ä£¿éÖ§³Ö£¬Èçnginx-upstream-fair»ònginx-plus£©£¬¶¨ÆÚ¼ì²âºó¶ËÊÓÆµ·þÎñÆ÷µÄ½¡¿µ×´¿ö¡£µ±Ä³¸ö·þÎñÆ÷³öÏÖ¹ÊÕÏʱ£¬Nginx»á×Ô¶¯½«Æä´Ó¿ÉÓÃÁбíÖÐÒÆ³ý£¬±Ü?Ã⽫Á÷Á¿·¢Ë͵½¹ÊÕÏ·þÎñÆ÷£¬±£Ö¤ÁË·þÎñµÄ¿ÉÓÃÐÔ¡£
ÊÓÆµ¼¼ÊõºÍÓ¦Óó¡¾°ÔÚ²»¶Ï·¢Õ¹¡£NginxµÄÄ£¿é»¯Éè¼ÆºÍÇ¿´óµÄ¿ÉÀ©Õ¹ÐÔ£¬Ê¹ÆäÄܹ»ÇáËÉÊÊӦδÀ´µÄ±ä»¯¡£ÎÞÂÛÄúÐèÒª¼¯³ÉеÄÊÓÆµ±àÂë¸ñʽ¡¢ÐµļÓÃܼ¼Êõ£¬»¹Êǹ¹½¨¸ü¸´ÔÓµÄÊÓÆµ·Ö·¢¼Ü¹¹£¬Nginx¶¼ÄÜÌṩǿ´óµÄÖ§³Ö£¬È·±£ÄúµÄÊÓÆµ·þÎñʼÖÕ×ßÔÚÐÐÒµÇ°ÑØ¡£
Nginx×îа汾´øÀ´µÄ¡°100%ÊÓÆµÓÅ»¯¡±£¬²»?½ö½öÊÇÒ»¾ä¿ÚºÅ£¬¶øÊÇͨ¹ýһϵÁеײ㼼Êõ¸ïк;«Ï¸»¯ÅäÖòßÂÔ£¬ÔÚʵ¼ÊÓ¦ÓÃÖÐʵÏÖµÄÐÔÄÜ·ÉÔ¾¡£ËüΪÎÒÃÇÌṩÁËÒ»¸öÇ¿´ó¡¢¸ßЧ¡¢Áé»îµÄƽ̨£¬À´¹¹½¨ºÍÓÅ»¯¸÷ÖÖÊÓÆµ·þÎñ¡£ÎÞÂÛÊÇ×·Çó¼«ÖÂÁ÷³©µÄÖ±²¥ÌåÑ飬»¹ÊÇÏ£ÍûΪÓû§Ìṩº£Á¿¸ßÇåÊÓÆµÄÚÈݵĵ㲥·þÎñ£¬Nginx×îа汾¶¼½«ÊÇÄú²»¿É»òȱµÄµÃÁ¦ÖúÊÖ¡£
ÏÖÔÚ£¬¾ÍÓÃNginx×îа汾?£¬ÊÍ·ÅÄúÊÓÆµ·þÎñµÄÎÞÏÞDZÄÜ£¬ÎªÓû§´øÀ´Ç°ËùδÓеġ°Ë¿»¬¡±ÊÓÌýÊ¢Ñç°É£¡
¶ÔÓÚÊÓÆµÁ÷ýÌ壬×î³£¼ûµÄÁ½ÖÖ³¡¾°ÊÇÊÓÆµÖ±²¥ºÍÊÓÆµµã²¥?¡£
RTMPÖ±²¥·þÎñÆ÷´î½¨(ʹÓÃnginx-rtmp-module)
ÄúÐèÒª±àÒë°²×°Nginx²¢°üº¬nginx-rtmp-module¡£°²?×°Íê³Éºó£¬ÔÚNginxµÄÖ÷ÅäÖÃÎļþnginx.confÖÐÌí¼Órtmp¿é£º
worker_processesauto;events{worker_connections1024;#¸ù¾Ý·þÎñÆ÷ÄÜÁ¦µ÷Õû}http{#...ÄúµÄhttpÅäÖÃ...}rtmp{server{listen1935;#RTMPĬÈ϶˿Úchunk_size4096;#µ÷ÕûÒÔÊÊÓ¦²»Í¬ÍøÂç»·¾³applicationlive{liveon;recordoff;#¸ù¾ÝÐèÒª¿ªÆôÂ¼ÖÆ#HLS/DASHתÂëÓë·Ö·¢hlson;hls_path/tmp/hls;#HLSƬ¶Î´æ´¢Ä¿Â¼hls_fragment3s;#HLSÇÐÆ¬Ê±³¤hls_playlist_length60s;#HLS²¥·ÅÁÐ±í³¤¶Èdashon;dash_path/tmp/dash;#DASHƬ¶Î´æ´¢Ä¿Â¼dash_fragment2s;#DASHÇÐÆ¬Ê±³¤dash_playlist_length30s;#DASH²¥·ÅÁÐ±í³¤¶È}}}
NginxµÄÇ¿´óÄÜÁ¦Ê¹ÆäÔÚÊÓÆµÁ÷ýÌåµÄ¸÷¸ö»·½Ú¶¼ÄÜ·¢»ÓÖÁ¹ØÖØÒªµÄ×÷Ó㬴ÓÔ´Õ¾µÄÄÚÈÝ·Ö·¢£¬µ½CDNµÄ±ßÔµ½Úµã¼ÓËÙ£¬ÔÙµ½×îÖÕÓû§¶ËµÄÁ÷³©²¥·Å£¬Nginx¼¸ºõÎÞ´¦²»ÔÚ¡£
Ö±²¥£¨LiveStreaming£©¼ÓËÙ£ºÊµÊ±Ö±²¥¶ÔÑÓ³ÙµÄÒªÇ󼫸ߣ¬ÈκÎÒ»µã¿¨¶Ù¶¼¿ÉÄܵ¼ÖÂÓû§Á÷ʧ¡£Nginxͨ¹ýÆäRTMPÄ£¿é£¬¿ÉÒÔ¸ßЧµØ´¦ÀíRTMPÐÒ飬×÷Ϊֱ²¥Á÷µÄ½ÓÈëµã£¬½«Ö±²¥ÐźÅת·¢¸øºó¶ËÍÆÁ÷·þÎñÆ÷»òÖ±½Ó½øÐзַ¢¡£½áºÏÆä¸ß²¢·¢´¦ÀíÄÜÁ¦£¬Nginx¿ÉÒÔÇáËÉÓ¦¶ÔÊý°ÙÍòÉõÖÁÉÏǧÍòÓû§Í¬Ê±¹Û¿´Ò»³¡?Ö±²¥µÄ³¡¾°¡£
ͨ¹ýÓëÆäËûÁ÷ýÌå·þÎñÆ÷£¨ÈçFFmpeg¡¢SRSµÈ£©ÅäºÏ£¬Nginx¿ÉÒÔ¹¹½¨³öÎȶ¨¡¢µÍÑÓ³ÙµÄÖ±²¥·Ö·¢ÏµÍ³¡£
µã²¥£¨VideoonDemand£©·þÎñ£º¶ÔÓڵ㲥ÄÚÈÝ£¬Nginx¿ÉÒÔ×÷Ϊ¸ßÐÔÄܵľ²Ì¬Îļþ·þÎñÆ÷£¬Ö±½ÓÌṩMP4¡¢FLVµÈ¸ñʽµÄÊÓÆµÎļþ¡£ÅäºÏÆä¸ßЧµÄ»º´æ»úÖÆ£¬Nginx¿ÉÒÔ½«ÈÈÃÅÊÓÆµ»º´æÔÚÄÚ´æ»ò´ÅÅÌÖУ¬µ±Óû§ÔÙ´ÎÇëÇóʱ£¬¿ÉÒÔÖ±½Ó´Ó»º´æÌṩ·þÎñ£¬¼«´óµØÌáÉýÁ˼ÓÔØËÙ¶È£¬½µµÍÁ˺ó¶Ë´æ´¢µÄѹÁ¦¡£
ʼþÇý¶¯¡¢Òì²½·Ç×èÈûÄ£ÐÍ£ºÕâÊÇNginx×îΪÈ˳ƵÀ?µÄÌØÐÔ¡£Ó봫ͳµÄ½ø³Ì/Ïß³Ì?Ä£ÐͲ»Í¬£¬Nginx²ÉÓÃÒ»¸öÖ÷½ø³ÌºÍ¶à¸ö¹¤×÷½ø³ÌµÄģʽ¡£Ö÷½ø³Ì¸ºÔð¶ÁÈ¡ÅäÖÃÎļþ¡¢¹ÜÀí¹¤×÷½ø³Ì£¬¶ø¹¤×÷½ø³ÌÔòͨ¹ýʼþÇý¶¯µÄ»úÖÆ£¬¸ßЧµØ´¦Àí´óÁ¿µÄ²¢·¢Á¬½Ó¡£µ±Ò»¸öÁ¬½ÓÓÐI/O²Ù×÷ʱ£¬Nginx²»»á×èÈû£¬¶øÊǽ«¸ÃÁ¬½ÓµÄʼþ½»¸ø²Ù×÷ϵͳ£¬È¥´¦ÀíÆäËûÁ¬½Ó£¬µÈµ½I/O²Ù×÷Íê³Éºó£¬ÔÙ»ØÀ´´¦Àí¡£
ÕâÖÖÄ£Ðͼ«´óµØ¼õÉÙÁËCPUºÍÄÚ´æµÄÏûºÄ£¬Ê¹µÃNginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´Õ¼Óã¬Ö§³ÅÆðº£Á¿µÄ²¢·¢Á¬½Ó£¬Õâ¶ÔÓÚÐèҪͬʱ´¦Àí³ÉǧÉÏÍò¸öÊÓÆµÁ÷ÇëÇóµÄ³¡?¾°ÖÁ¹ØÖØÒª¡£
ÄÚ´æÁ㿽±´£¨Zero-copy£©£ºÔÚÎļþ´«Êä¹ý³ÌÖУ¬´«Í³·½Ê½ÍùÍùÐèÒª¶à´ÎÊý¾Ý¸´ÖÆ£¬´Ó´ÅÅ̵½Äں˻º³åÇø£¬ÔÙµ½Óû§»º³åÇø£¬×îºóµ½ÍøÂ绺³åÇø¡£Nginxͨ¹ýsendfile()ϵͳµ÷Óã¬ÊµÏÖÁËÄÚ´æÁ㿽±´¡£ÕâÒâζ×ÅÊý¾Ý¿ÉÒÔÖ±½Ó´Ó´ÅÅ̵ÄÒ³»º´æ?¸´ÖƵ½?ÍøÂçÕ»µÄÌ×½Ó×Ö»º³åÇø£¬ÎÞÐè¾¹ýÓû§¿Õ¼äµÄ¸´ÖÆ£¬´ó´óÌá¸ßÁËÊý¾Ý´«ÊäµÄЧÂÊ£¬½µµÍÁËCPU¸ºÔØ¡£
¶ÔÓÚ´«Êä´óÁ¿ÊÓÆµÊý¾ÝµÄ³¡¾°£¬ÕâÄÜ´øÀ´ÏÔÖøµÄÐÔÄÜÌáÉý¡£
NginxµÄºËÐÄÓÅÊÆÔÚÓÚÆäʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄÍøÂçÄ£ÐÍ¡£Ó봫ͳµÄ×èÈûʽI/OÄ£ÐͲ»Í¬£¬NginxÄܹ»ÔÚÒ»¸ö»òÉÙÊý¼¸¸ö½ø³ÌÖд¦Àí³ÉǧÉÏÍòµÄ²¢·¢Á¬½Ó£¬¶øÎÞÐèÏûºÄ´óÁ¿µÄϵͳ×ÊÔ´¡£Õâ¶ÔÓÚÐèÒª´¦Àí´óÁ¿²¢·¢ÊÓÆµÁ÷µÄ³¡¾°À´Ëµ£¬ÎÞÒÉÊǾ޴ó?µÄÓÅÊÆ¡£
¸ßЧµÄÁ¬½Ó¹ÜÀí£ºNginx²ÉÓÃepoll(Linux)»òkqueue(FreeBSD)µÈ¸ßÐÔÄÜI/O¶à·¸´ÓûúÖÆ£¬Äܹ»¸ßЧµØ¼àÌýºÍ´¦Àí³ÉǧÉÏÍò¸ö¿Í»§¶ËÁ¬½Ó¡£ÕâÒâζ×Å£¬¼´Ê¹ÔÚÓû§¸ß·åÆÚ£¬NginxÒ²ÄÜÓÎÈÐÓÐÓàµØ´¦ÀíÀ´×ÔÈ«Çò¸÷µØ?Óû§µÄÊÓÆµÇëÇó£¬È·±£ÊÓÆµµÄ˳³©²¥·Å¡£
ÄÚ´æÏûºÄµÍ£ºNginxµÄÄÚ´æÕ¼ÓÃÏà¶Ô½ÏµÍ£¬Äܹ»ÒÔ¸üÉÙµÄÓ²¼þ×ÊÔ´³ÐÔØ¸ü¸ßµÄ²¢·¢Á¿£¬Õâ¶ÔÓڳɱ¾¿ØÖƺÍ×ÊÔ´ÓÅ»¯ÖÁ¹ØÖØÒª¡£×¿Ô½µÄ¾²Ì¬Îļþ´¦ÀíÄÜÁ¦£ºÊÓÆµÎļþͨ³£ÊǾ²Ì¬×ÊÔ´¡£NginxÔÚ¾²Ì¬ÎļþµÄ¸ßËÙ»º´æºÍ´«Êä·½Ãæ±íÏÖ³öÉ«£¬Äܹ»Ö±½Ó´Ó´ÅÅ̶ÁÈ¡Êý¾Ý²¢¿ìËÙ·¢Ë͸ø¿Í»§¶Ë£¬¼«´óµØÌáÉýÁËÊÓÆµµÄ¼ÓÔØËÙ¶È¡£
HTTP/2&HTTP/3£ºÔÚNginxÅäÖÃÖÐÆôÓÃHTTP/2»òHTTP/3ÐÒ飬¿ÉÒÔÏÔÖøÌáÉýÊÓÆµ¼ÓÔØËÙ¶È£¬ÓÈÆäÊÇÔÚÍøÂçÌõ¼þ²»¼ÑµÄ?Çé¿öÏ¡£nginxlisten443sslhttp2;AdaptiveBitrateStreaming(ABS)£º¶ÔÓÚÖ±²¥ºÍµã²¥£¬Ö§³ÖHLS»òDASH¸ñʽµÄABS¼¼ÊõÖÁ¹ØÖØÒª¡£
Nginx¿ÉÒÔͨ¹ýÅäÖÃngx_http_vhost_traffic_status_moduleµÈÄ£¿é£¬»òÅäºÏffmpegµÈ?¹¤¾ß£¬ÊµÏÖÊÓÆµµÄתÂëºÍ·Ö·¢£¬Îª²»Í¬ÍøÂç´ø¿íµÄÓû§Ìṩ×î¼ÑµÄ¹Û¿´ÌåÑé¡£GzipѹËõ£ºËäÈ»ÊÓÆµÎļþ±¾ÉíÒÑѹËõ£¬µ«¶ÔÓÚÎı¾ÀศÖúÎļþ£¬¿ªÆôGzipѹËõÈÔÈ»ÄܽÚÊ¡´ø¿í£¬¼Ó¿ì¼ÓÔØËÙ¶È¡£
nginxgzipon;gzip_varyon;gzip_proxiedany;gzip_comp_level6;gzip_typestext/plaintext/cssapplication/jsonapplication/javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascript;
×ܶøÑÔÖ®£¬NginxÔÚÊÓÆµÐÔÄܵÄ?ʵÏÖÉÏ£¬Æ¾½èÆä¸ßЧµÄ²¢?·¢´¦ÀíÄÜÁ¦¡¢Ç¿´óµÄ»º´æ»úÖÆÒÔ¼°¶ÔÁ÷ýÌåÐÒéµÄÁ¼ºÃÖ§³Ö£¬ÒѾ³ÉΪ¹¹½¨¸ßÐÔÄÜÊÓÆµ·Ö·¢ÏµÍ³µÄÊ×Ñ¡·½°¸¡£´Ó¾²Ì¬ÎļþµÄ¿ìËÙ¶ÁÈ¡£¬µ½¶¯Ì¬ÄÚÈݵÄÖÇÄÜ»º´æ£¬ÔÙµ½ÓëCDNµÄÎ޷켯³É£¬NginxÕýÔÚÓÃËüµÄ·½Ê½£¬ÎªÎÒÃÇÃè»æ×ÅÒ»·ùÁ÷³©ÎÞ¿¨¶ÙµÄÊÓÆµÌåÑéÀ¶Í¼¡£
NginxÊÓÆµÐÔÄܵĽø½×£º¸ßÐÔÄÜÁ÷ýÌå·þÎñÓ뾫ϸ»¯µ÷ÓÅ
ÔÚǰһ²¿·Ö£¬ÎÒÃÇÒѾÉîÈëÁ˽âÁËNginxÔÚʵÏÖ100%ÊÓÆµÐÔÄÜ·½ÃæµÄ»ù´¡?ÄÜÁ¦£¬°üÀ¨Æä¸ßЧµÄ²¢·¢´¦ÀíÄ£ÐÍ¡¢Ç¿´óµÄ»º´æ»úÖÆÒÔ¼°ÓëCDNµÄ¼¯³É¡£ÒªÕæÕýÈÃNginxÔÚÊÓÆµ·Ö·¢ÁìÓò·¢»Ó¼«ÖµÄÐÔÄÜ£¬»¹ÐèÒª¸üÉîÈëµØÌ½Ë÷ÆäÔÚÁ÷ýÌå·þÎñ·½ÃæµÄ½ø½×Ó¦ÓÃÒÔ¼°¾«Ï¸»¯µÄÐÔÄܵ÷ÓŲßÂÔ¡£
Nginx100%ÊÓÆµÐÔÄÜ£º²»?Ö¹ÊÇ·þÎñÆ÷£¬¸üÊÇÁ÷³©ÌåÑéµÄÊØ»¤Õß
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒѳÉΪÈËÃÇ»ñÈ¡ÐÅÏ¢¡¢ÓéÀÖÐÝÏеÄÖØÒªÔØÌå¡£ÎÞÂÛÊÇÖ±²¥»¥¶¯¡¢ÔÚÏß½ÌÓý£¬»¹ÊÇÓ°Êӵ㲥£¬Á÷³©¡¢¸ßÇåµÄÊÓÆµÌåÑéÊÇÓû§×î»ù±¾µÄÐèÇó¡£±³ºóÖ§³ÅÕâÒ»ÇеķþÎñÆ÷ÐÔÄÜ£¬È´³£³£³ÉÎªÖÆÔ¼Óû§ÌåÑéµÄ?Æ¿¾±¡£´«Í³µÄ·þÎñÆ÷¼Ü¹¹ÔÚ´¦Àíº£Á¿ÊÓÆµÇëÇóʱ£¬ÍùÍù»á³ö?ÏÖ¼ÓÔØ»ºÂý¡¢¿¨¶ÙÑÓ³Ù?µÈÎÊÌ⣬ÈÃÓû§ÌåÑé´ó´òÕÛ¿Û¡£
¶øNginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÕýÒÔÆä׿ԽµÄ?ÄÜÁ¦£¬³ÉΪԽÀ´Ô½¶àÊÓÆµ·þÎñÌṩÉ̵ÄÊ×Ñ¡¡£Ëü²»½ö½öÊÇÒ»¸ö¼òµ¥µÄÎļþ·þÎñÆ÷£¬¸üÊÇÒ»¸öÄܹ»Éî¶ÈÓÅ»¯ÊÓÆµÁ÷´«ÊäµÄÀûÆ÷¡£½ñÌ죬ÎÒÃǾÍÀ´½Ò¿ªNginxʵÏÖ100%ÊÓÆµÐÔÄܵÄÉñÃØÃæÉ´£¬¿´¿´ËüÊÇÈçºÎ´Óµ×?²ã¼Ü¹¹µ½¾ßÌåÅäÖã¬Ò»²½²½´òÔì³ö¼«ÖÂÁ÷³©µÄÊÓÆµ²¥·ÅÌåÑéµÄ?¡£
Ò»¡¢NginxµÄÓÅÊÆ£ºÎªºÎËüÄÜʤÈÎÊÓÆµ´«ÊäµÄÖØÈΣ¿
ÒªÀí½âNginxÈçºÎʵÏÖÊÓÆµÐÔÄܵķÉÔ¾£¬Ê×ÏÈÐèÒªÁ˽âËüÔÚÉè¼ÆÖ®³õ¾Í¾ß±¸µÄºËÐÄÓÅÊÆ¡£
2.4°²È«·À»¤ÓëÏÞÁ÷£º±£?ÕÏÎȶ¨£¬µÖÓù¹¥»÷ÊÓÆµ·þÎñÃæÁÙן÷ÖÖ°²È«Íþв£¬ÈçDDoS¹¥»÷¡¢µÁÁ´¡¢¶ñÒâÅÀ³æ?µÈ¡£NginxÌṩÁËÇ¿´óµÄ°²È«·À»¤ºÍÏÞÁ÷»úÖÆ£¬ÎªÊÓÆµÁ÷ýÌåµÄÎȶ¨ÔËÐб£¼Ý»¤º½¡£
DDoS·À»¤:limit_reqÄ£¿é:ÏÞÖÆÀ´×ÔͬһIPµØÖ·µÄÇëÇóƵÂÊ£¬ÓÐЧµÖÓù±©Á¦ÆÆ½âºÍÁ÷Á¿¹¥»÷¡£limit_req_zone$binary_remote_addrzone=mylimit:10mrate=10r/s;location/{limit_reqzone=mylimitburst=20nodelay;}limit_connÄ£¿é:ÏÞÖÆÍ¬Ò»IPµØÖ·µÄ²¢?·¢Á¬½ÓÊý¡£
ngx_http_geo_module:ÆÁ±ÎÀ´×ÔÒÑÖª¶ñÒâIP¶Î»òÌØ¶¨¹ú¼ÒµÄ·ÃÎÊ¡£µÁÁ´·À»¤(Referer¼ì²é):¼ì²éÇëÇóµÄRefererÍ·£¬Ö»ÔÊÐíÀ´×ÔÖ¸¶¨ÓòÃûµÄ?·ÃÎÊ£¬·ÀÖ¹ÊÓÆµ±»ÆäËûÍøÕ¾·Ç·¨ÒýÓá£valid_referersnoneblocked*.example.comexample.com;if($invalid_referer){return403;}URLÇ©Ãû:ͨ¹ý¸øÊÓÆµURLÌí¼Óʱ¼ä´ÁºÍÇ©Ãû²ÎÊý£¬È·±£Ö»ÓÐÔÚÓÐЧÆÚÄÚÇÒ²ÎÊýÕýÈ·µÄÇëÇó²ÅÄÜ·ÃÎÊÊÓÆµ£¬·ÀÖ¹URL±»ÀÄÓá£
Õâ¸öÖµÐèÒª¸ù¾Ý·þÎñÆ÷µÄÄÚ´æºÍ²Ù×÷ϵͳÏÞÖÆÀ´É趨¡£ÔÚ´¦ÀíÊÓÆµÁ÷Á¿Ê±£¬ÓÈÆäÐèÒª½«ÆäÉèÖõÃ×ã¹»´ó£¬ÒÔ±ÜÃâÒòÁ¬½ÓÊýÏÞÖÆ¶øµ¼ÖµÄÇëÇóʧ°Ü¡£µ÷ÓŽ¨Ò飺½áºÏulimit-nµ÷ÕûϵͳµÄÎļþÃèÊö·ûÏÞÖÆ£¬È·±£worker_connectionsµÄÖµÄܹ»±»ÏµÍ³Ö§³Ö¡£
ÀýÈ磬Èç¹ûworker_connectionsÉèÖÃΪ10240£¬ÄÇôϵͳµÄÎļþÃèÊö·ûÏÞÖÆÖÁÉÙÓ¦´óÓÚµÈÓÚworker_processes*worker_connections¡£
2.ÊÓÆµÎļþ´«ÊäµÄЧÂÊÓÅ»¯£ºsendfile,tcpnopush,tcpnodelay
sendfileon;£º´ËÖ¸ÁîÔÊÐíNginxÖ±½Ó½«Îļþ´ÓÎļþϵͳµÄ»º³åÇø¸´ÖƵ½ÍøÂçÌ×½Ó×Ö»º³åÇø£¬ÈƹýÓû§¿Õ¼ä£¬¼«´óµØ¼õÉÙÁËCPUµÄ¿ªÏúºÍÄڴ濽±´µÄ´ÎÊý£¬¶ÔÓÚ´«Êä´óÎļþ£¨ÈçÊÓÆµ£©·Ç³£¸ßЧ¡£tcp_nopushon;£ºµ±?Nginx·¢ËÍÏìӦͷºÍÎļþÄÚÈÝʱ£¬´ËÖ¸Áî»á¾¡Á¿½«ËüÃÇ×éºÏ³ÉÒ»¸öTCPÊý¾Ý°ü·¢ËÍ£¬¼õÉÙÍøÂçͨÐŵĴÎÊý£¬Ìá¸ß´«?ÊäЧÂÊ¡£
ʵÏÖ100%µÄÊÓÆµÐÔÄܲ¢·ÇÒ»ÀÍÓÀÒÝ£¬³ÖÐøµÄ¼à¿ØºÍµ÷ÓÅÊDZز»¿ÉÉٵġ£
ÈÕÖ¾·ÖÎö£ºNginxµÄ·ÃÎÊÈÕÖ¾ºÍ´íÎóÈÕÖ¾ÊÇÅŲéÎÊÌâµÄ±¦¹óÐÅÏ¢¡£Í¨¹ý·ÖÎöÈÕÖ¾£¬¿ÉÒÔ·¢ÏÖ¸ßÑÓ³ÙµÄÇëÇ󡢯µ·±³öÏֵĴíÎó£¬ÒÔ¼°Á÷Á¿Æ¿¾±¡£ÐÔÄÜ¼à¿Ø¹¤¾ß£ºÊ¹ÓÃnetdata¡¢Prometheus¡¢GrafanaµÈ¼à¿Ø¹¤¾ß£¬ÊµÊ±¼à²âNginxµÄCPU¡¢ÄÚ´æ?¡¢ÍøÂçÁ÷Á¿¡¢Á¬½ÓÊý¡¢ÇëÇóÏìӦʱ¼äµÈ?¹Ø¼üÖ¸±ê¡£
ѹÁ¦²âÊÔ£º¶¨ÆÚ½øÐÐѹÁ¦²â?ÊÔ£¬Ä£ÄâÕæÊµµÄÓû§¸ºÔØ£¬ÕÒ³öNginxµÄÐÔÄܼ«ÏÞ£¬²¢¸ù¾Ý²âÊÔ½á¹û½øÐÐÏàÓ¦µÄÅäÖõ÷Õû¡£ÂýÈÕÖ¾·ÖÎö£ºNginxÌṩÁËÂýÈÕÖ¾¹¦ÄÜ£¬¿ÉÒԼǼÏìӦʱ¼ä³¬¹ýÉ趨µÄãÐÖµµÄÇëÇ󣬰ï?Öú¶¨Î»»ºÂýµÄÇëÇóÔ´Í·¡£
×ܶøÑÔÖ®£¬Nginxƾ½èÆä׿ԽµÄʼþÇý¶¯¼Ü¹¹¡¢¸ßЧµÄ?I/O´¦?Àí»úÖÆ¡¢Ç¿´óµÄ¾²Ì¬Îļþ·þÎñÄÜÁ¦¡¢Áé»îµÄ»º´æ²ßÂÔÒÔ¼°¶Ô×îÐÂÍøÂçÐÒéµÄÖ§³Ö£¬ÒѾ³ÉΪʵÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µÄÀíÏëÑ¡Ôñ¡£Ëü²»½öÄÜÌṩÎȶ¨¡¢¸ßËÙµÄÊÓÆµ´«Ê䣬¸üÄÜͨ¹ýÆä¸ß¶ÈµÄÀ©Õ¹ÐÔ£¬Îª²»¶Ï±ä?»¯µÄÁ÷ýÌåÒµÎñÌṩǿÓÐÁ¦µÄ¼¼ÊõÖ§³Å¡£
ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖNginxÔÚʵ¼Ê²¿ÊðÖУ¬ÈçºÎͨ¹ý¾«Ï¸»¯ÅäÖ㬽øÒ»²½Ñ¹Õ¥ÐÔÄÜ£¬ÊµÏÖÊÓÆµ´«ÊäµÄ¼«ÖÂÓÅ»¯¡£
NginxÊÓÆµÐÔÄÜÓÅ»¯ÊµÕ½£º´òÔ쳬·²Á÷ýÌåÌåÑéµÄϸ½Ú°Ñ¿Ø
ÔÚÉÏÒ»²¿·Ö£¬ÎÒÃÇÉîÈëÁ˽âÁËNginxµÄ¼Ü¹¹ÓÅÊÆ¼°ÆäºËÐŦÄÜ£¬ÕâЩΪʵÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µì¶¨Á˼áʵµÄ?»ù´¡¡£ÀíÂÛÖÕ¾¿ÊÇÀíÂÛ£¬½«NginxµÄÐÔÄÜDZÁ¦ÍêÈ«ÊÍ·Å£¬»¹ÐèÒªÔÚʵ¼Ê²¿ÊðÖнøÐÐϸÖÂÈë΢µÄÅäÖÃÓÅ»¯¡£±¾²¿?·Ö½«¾Û½¹ÓÚNginxÔÚÊÓÆµ´«ÊäÁìÓòµÄÐÔÄܵ÷ÓŲßÂÔ£¬´ÓÁ¬½Ó¹ÜÀí¡¢»º´æ?²ßÂÔ¡¢¸ºÔؾùºâµ½´«?ÊäÐÒéµÄÓÅ»¯£¬ÎªÄú³ÊÏÖÒ»·ÝÏ꾡µÄʵսָÄÏ¡£
½ø½×ÅäÖãºÄ㻹¿ÉÒÔ¸ù¾ÝHTTPÏìӦͷÖеĻº´æ¿ØÖÆÖ¸ÁÈçCache-Control¡¢Expires£©À´¶¯Ì¬µ÷Õû»º´æ²ß?ÂÔ¡£NginxÒ²¿ÉÒÔÅäÖÃÖ»»º´æ²¿·ÖÏìÓ¦£¨proxy_cache_bypass£©£¬»òÕßÔÚ»º´æ¹ýÆÚºó£¬ÏÈ·µ»Ø¹ýÆÚ»º´æ²¢Òì²½¸üУ¨proxy_cache_revalidate£©£¬½øÒ»²½?ÌáÉýÓû§ÌåÑé¡£
Îļþϵͳ»º´æ£¨OSCache£©£ºNginx±¾ÉíÒ²¿ÉÒÔÀûÓòÙ×÷ϵͳÌṩµÄÎļþϵͳ»º´æ¡£µ±Nginx¶ÁÈ¡ÊÓÆµÎļþʱ£¬²Ù×÷ϵͳ»á½«ÎļþµÄÊý¾Ý¿é¼ÓÔØµ½ÄÚ´æÖС£Èç¹ûÎļþ±»Æµ·±·ÃÎÊ£¬ÕâЩÊý¾Ý¿é»áÒ»Ö±±£ÁôÔÚÄÚ´æÖУ¬Ï´ηÃÎÊʱ¿ÉÒÔÖ±½Ó´ÓÄÚ´æ¶ÁÈ¡£¬Ëٶȼ«¿ì¡£
ËäÈ»Õâ²»ÊÇNginxÖ±½Ó¿ØÖƵ쬵«Nginx¸ßЧµÄÎļþ·ÃÎÊ·½Ê½ÄܸüºÃµØÀûÓÃOSCache¡£
CDN¼¯³É£º¶ÔÓÚÃæÏòÈ«ÇòÓû§µÄÁ÷ýÌå·þÎñ£¬½öÒÀ¿¿µ¥Ò»µÄ?Nginx·þÎñÆ÷½øÐлº´æ?ÊÇÔ¶Ô¶²»¹»µÄ¡£½«NginxÓëÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©¼¯³ÉÊÇʵÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÄ±ØÓÉ֮·¡£Nginx¿ÉÒÔ×÷ΪCDN±ßÔµ½Úµã£¬Ò²¿ÉÒÔ×÷ΪCDN»ØÔ´·þÎñÆ÷¡£
Nginx£º²»Ö»ÊÇWeb·þÎñÆ÷£¬¸üÊÇÊÓÆµÁ÷ýÌåµÄ¼ÓËÙÒýÇæ
ÔÚÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒѳÉΪÎÒÃÇÉú»îÖв»¿É»òȱµÄÒ»²¿·Ö¡£ÎÞÂÛÊǾ«²ÊµÄµçÓ°¡¢¼¤ÇéµÄÌåÓýÈüÊ£¬»¹ÊÇѧϰÐÂ֪ʶµÄÔÚÏ߿γ̣¬Á÷³©¡¢¸ßÇåµÄ¹ÛÓ°ÌåÑéÊÇÓû§×î»ù±¾?Ò²ÊÇ×îÖØÒªµÄËßÇó¡£ÊÓÆµÎļþÌåÁ¿ÅÓ´ó¡¢ÍøÂç´«Êä²»Îȶ¨¡¢·þÎñÆ÷²¢·¢Ñ¹Á¦´óµÈÎÊÌ⣬³£³£ÈÃÓû§Ôڹؼüʱ¿ÌÔâÓö¿¨¶Ù¡¢¼ÓÔØ»ºÂýµÄÞÏÞΣ¬ÉõÖÁ´íʧ¾«²Ê˲¼ä¡£
Õâʱ£¬Ò»¸öÇ¿´óµÄÊÓÆµÁ÷ýÌå½â¾ö·½°¸¾ÍÏÔµÃÓÈÎªÖØÒª¡£¶øNginx£¬Õâ¿îÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÔçÒѳ¬Ô½ÁËÆä´«Í³¶¨Î»£¬³ÉΪ¹¹½¨¸ßЧ¡¢Îȶ¨ÊÓÆµÁ÷ýÌå·þÎñµÄ¹Ø¼üÒýÇæ¡£
ÊÓÆµÁ÷´«ÊäÉæ¼°¶àÖÖÐÒ飬ÈçRTSP(RealTimeStreamingProtocol)¡¢RTMP(Real-TimeMessagingProtocol)¡¢HLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)µÈ¡£
ÿÖÖÐÒé¶¼ÓÐÆäÌØ¶¨µÄÓ¦Óó¡¾°ºÍ¼¼ÊõÌØµã¡£RTMPÔøÊÇÖ±²¥ÁìÓòµÄ¡°°ÔÖ÷¡±£¬ÒÔÆäµÍÑÓ³ÙµÄÓÅÊÆÊܵ½Çàíù£»¶øHLSºÍDASHÔò»ùÓÚHTTP£¬Ò×ÓÚ²¿ÊðºÍ¿çƽ̨¼æÈÝ£¬³ÉΪµã²¥ºÍ×ÔÊÊÓ¦ÂëÂÊÖ±²¥µÄÖ÷Á÷Ñ¡Ôñ¡£
NginxµÄÄ£¿é»¯Éè¼Æ£¬¸³ÓèÁËËüÇ¿´óµÄÁé»îÐÔ£¬Ê¹ÆäÄܹ»ÇáËɵؼ¯³ÉµÚÈý·½Ä£¿é£¬ÒÔÖ§³Ö¸÷ÖÖÊÓÆµÐÒ顣ͨ¹ý¼ÓÔØÏàÓ¦µÄÄ£¿é£¬Nginx¾Í¿ÉÒÔÒ¡ÉíÒ»±ä£¬³ÉΪһ¸öרҵµÄÁ÷ýÌå·þÎñÆ÷¡£ÀýÈ磬nginx-rtmp-module±ãÊÇNginxÉçÇøÖзdz£Á÷ÐеÄÓÃÓÚÖ§³Ö?RTMPÐÒéµÄÄ£¿é£¬ËüÔÊÐíNginxÖ±½Ó½ÓÊÕRTMPÍÆÁ÷£¬²¢½«Æäת»»ÎªHLS»òDASHµÈ¸ñʽ½øÐзַ¢¡£
ÕâÖÖÄ£¿é»¯µÄÄÜÁ¦£¬Ê¹µÃNginxÄܹ»ÊÊÓ¦²»¶Ï±ä»¯µÄÁ÷ýÌå¼¼Êõ·¢Õ¹£¬³É?Ϊһ¸ö¡°Íò½ðÓÍ¡±Ê½µÄÁ÷ýÌå½â¾ö·½°¸¡£
ÔÚʵ¼ÊµÄÊÓÆµ·þÎñ²¿ÊðÖУ¬µ¥Ò»·þÎñÆ÷ÍùÍùÄÑÒÔ³ÐÊܾ޴óµÄÁ÷Á¿Ñ¹Á¦¡£´Ëʱ£¬¸ºÔؾùºâºÍ·´Ïò´úÀí¾ÍÏÔµÃÓÈÎªÖØÒª¡£NginxÔÚÕâÁ½¸ö·½Ãæ±íÏÖ³öÉ«£¬Äܹ»ÓÐЧµØ½«Á÷Á¿·ÖÉ¢µ½¶ą̀ºó¶Ë·þÎñÆ÷£¬Ìá¸ßÕûÌå·þÎñµÄ¿ÉÓÃÐԺͿÉÀ©Õ¹ÐÔ¡£
¸ºÔؾùºâ£ºNginx¿ÉÒÔ¸ù¾ÝÔ¤ÉèµÄËã·¨£¨ÈçÂÖѯ¡¢¼ÓȨÂÖѯ¡¢IP¹þÏ£µÈ£©£¬½«Óû§ÇëÇó¾ùÔȵطÖÅ䏸ºó¶ËµÄ¶à¸öÁ÷ýÌå·þÎñÆ÷¡£ÕâÑù£¬¼´Ê¹Ä³Ì¨·þÎñÆ÷³öÏÖ¹ÊÕÏ£¬ÆäËû·þÎñÆ÷ÈÔÈ»¿ÉÒÔ¼ÌÐøÌṩ·þÎñ£¬±£Ö¤ÁËÊÓÆµ·þÎñµÄÁ¬ÐøÐÔ¡£·´Ïò´úÀí£ºNginx×÷Ϊ·´Ïò´úÀí£¬¿ÉÒÔÒþ²Øºó¶Ë·þÎñÆ÷µÄ?ÕæÊµIPµØÖ·£¬ÔöÇ¿°²È«ÐÔ¡£
Ëü»¹¿ÉÒÔ¶ÔÇëÇó½øÐлº´æ?£¬¼õÉÙºó¶Ë·þÎñÆ÷µÄѹÁ¦¡£ÀýÈ磬¶ÔÓÚһЩÈÈÃŵÄÊÓÆµÄÚÈÝ£¬Nginx¿ÉÒÔ½«ÊÓÆµÇÐÆ¬»º´æµ½±¾µØ£¬µ±Óû§ÇëÇóʱֱ½Ó´Ó»º´æÌṩ£¬´ó´óÌáÉýÁËÏìÓ¦ËÙ¶È¡£
NginxµÄÄ£¿é»¯Éè¼ÆÊÇÆäÇ¿´óÉúÃüÁ¦µÄԴȪ¡£×îа汾¼ÌÐø±ü³ÐÕâÒ»ÀíÄ²¢Õë¶ÔÊÓÆµÓÅ»¯£¬ÌṩÁ˸ü¼Ó·á¸»ºÍÇ¿´óµÄÄ£¿é¡£Óû§¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄ¾ßÌåÐèÇó£¬Áé»îµØÑ¡ÔñºÍÅäÖÃËùÐèµÄÄ£¿é£¬ÀýÈçÓÃÓÚÊÓÆµ×ªÂë¡¢ÄÚÈݼÓÃÜ¡¢DRM£¨Êý×Ö°æÈ¨¹ÜÀí£©µÈ¡£ÕâÖָ߶ȵĿɶ¨ÖÆÐÔ£¬Ê¹µÃNginxÄܹ»ÇáËÉÓ¦¶Ô¸÷ÖÖ¸´ÔÓµÄÊÓÆµÓ¦Óó¡¾°£¬´Ó¼òµ¥µÄÊÓÆµ²¥·Åµ½¸´ÔÓµÄ?°æÈ¨±£»¤ºÍÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©µÄ´î½¨£¬¶¼ÄÜÌṩ×î¼Ñ½â¾ö·½°¸¡£
µ½ÕâÀÎÒÃÇÒѾ³õ²½Á˽âÁËNginx×îа汾ÔÚ¼¼Êõ²ãÃæÊÇÈçºÎʵÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÄ¡£ÀíÂÛµÄÓÅ»¯»¹ÐèÒªÂ䵽ʵ´¦¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖNginx×îа汾?ÔÚʵ¼ÊÓ¦ÓÃÖУ¬ÈçºÎͨ¹ýһϵÁо«ÃîµÄÅäÖúͲßÂÔ£¬ÕæÕý½«ÊÓÆµ´«ÊäµÄÐÔÄÜÌáÉýµ½¼«Ö£¬ÎªÓû§´øÀ´Ç°ËùδÓеġ°Ë¿»¬¡±ÌåÑé¡£
Nginx100%ÊÓÆµÓÅ»¯£ºÊµÕ½ÅäÖÃÓëÐÔÄÜ·ÉÔ¾£¬½âËøÄãµÄÊÓÆµ·þÎñмÍÔª£¡
ÔÚÉÏÒ»²¿·Ö£¬ÎÒÃÇ´Ó¼¼Êõ²ãÃæÉîÈëÆÊÎöÁËNginx×îа汾ÔÚÊÓÆµÓÅ»¯·½ÃæµÄÄÚÔÚ¡°ºË¶¯Á¦¡±¡£ÎÒÃÇÁ˽⵽£¬ÖîÈçepollÄ£Ð͵ļ«ÖÂÔËÓá¢HTTP/2ºÍHTTP/3µÄÈ«ÃæÓµ±§¡¢¶¯Ì¬ÄÚÈݼÓËÙÓ뻺´æ²ßÂԵľ«½ø£¬ÒÔ¼°ÆäÇ¿´óµÄÄ£¿é»¯Éè¼Æ£¬¶¼ÎªÊµÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µì¶¨Á˼áʵµÄ»ù´¡¡£
²»Í¬µÄÊÓÆµ¸ñʽ¶Ô´«ÊäºÍ²¥·ÅÓÐ×Ų»?ͬµÄÒªÇó¡£NginxÒ²ÌṩÁËÕë¶ÔÐÔµÄÓÅ»¯Ä£¿éºÍÅäÖá£
MP4/FLVÎļþµÄÓÅ»¯£¨ngx_http_mp4_module/ngx_http_flv_module£©£º
MP4£º¶ÔÓÚMP4Îļþ£¬Nginx¿ÉÒÔͨ¹ýngx_http_mp4_moduleÄ£¿é£¨Í¨³£Ä¬ÈÏÆôÓã©À´ÓÅ»¯ÎļþµÄÔªÊý¾Ý£¨moovatom£©µÄ´«Êä¡£½«moovatom·ÅÔÚÎļþ¿ªÍ·£¨faststart£©¶ÔÓÚÁ÷ʽ²¥·ÅÖÁ¹ØÖØÒª¡£
Èç¹ûÄúµÄÊÓÆµÔ´²»ÊÇfaststart¸ñʽ£¬Nginx¿ÉÒÔÔÚ·þÎñÆ÷¶Ë½øÐÐÖØ×飬µ«Ð§ÂÊ»áÂÔÓнµµÍ¡£FLV£º¶ÔÓÚFLVÎļþ£¬NginxµÄ?ngx_http_flv_moduleÄ£¿é¿ÉÒÔ°ïÖú´¦ÀíFLVÎļþµÄÔªÊý¾Ý£¬²¢Ö§³ÖFLV¸ñʽµÄÁ÷ʽ²¥·Å¡£
RangeÇëÇóµÄÖ§³Ö£ºÊÓÆµ²¥·ÅÆ÷ͨ³£»á·¢ËÍRangeÇëÇó£¬ÒÔ±ãÓû§Äܹ»¿ì½ø¡¢ºóÍË£¬»òÕß´ÓÖжϴ¦¼ÌÐø²¥·Å¡£NginxĬÈÏÖ§³ÖRangeÇëÇ󣬵«ÐèҪȷ±£·þÎñÆ÷ÅäÖÃÕýÈ·£¬Äܹ»ÕýÈ·½âÎöºÍÏìÓ¦RangeÇëÇó¡£
»º´æÊÇʵÏÖ¸ßÐÔÄÜÊÓÆµ·Ö·¢µÄ¹Ø¼ü¡£NginxÌṩÁ˶àÖÖÁé»îµÄ»º´æ²ßÂÔ£¬Äܹ»ÏÔÖø¼õÉÙÔ´·þÎñÆ÷µÄѹÁ¦£¬²¢¼Ó¿ìÓû§·ÃÎÊËÙ¶È¡£
ProxyCache£ºÕâÊÇNginx×î³£ÓõĻº´æ·½Ê½¡£Í¨¹ýproxy_cacheÖ¸Á¿ÉÒÔ½«´ÓÉÏÓηþÎñÆ÷»ñÈ¡µÄÊÓÆµÄÚÈÝ»º´æÔÚ±¾µØ´ÅÅÌÉÏ¡£µ±?Óû§ÔÙ´ÎÇëÇóͬһ¸öÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬ÎÞÐèÇëÇóÔ´·þÎñÆ÷£¬´Ó¶ø´ó´ó½µµÍÑÓ³Ù£¬ÌáÉýÍÌÍÂÁ¿¡£
»º´æ¼ü£¨CacheKey£©£ºNginxÔÊÐí×Ô¶¨Ò建´æ?¼ü£¬ÀýÈç»ùÓÚURL¡¢ÇëÇóÍ·¡¢ÉõÖÁÇëÇó²ÎÊýÀ´Éú³ÉΨһµÄ»º´æ±êʶ¡£ÕâʹµÃÎÒÃÇ¿ÉÒÔ¸ü¾«Ï¸µØ¿ØÖÆÄÄЩÄÚÈݱ»»º´æ£¬ÒÔ¼°ÈçºÎÃüÖлº´æ¡£»º´æ¹ýÆÚ²ßÂÔ£ºÍ¨¹ýproxy_cache_validÖ¸Á¿ÉÒÔÉèÖûº´æµÄÓÐЧʱ¼ä¡£
ÀýÈ磬proxy_cache_valid20030210m;±íʾ¶ÔÓÚHTTP״̬ÂëΪ200ºÍ302µÄÏìÓ¦£¬»º´æ10·ÖÖÓ¡£»º´æÇøÓò£¨CacheZone£©£ºproxy_cache_pathÖ¸ÁîÓÃÓÚ¶¨Ò建´æÄ¿Â¼ºÍ»º´æÇøÓòµÄ´óС£¬È·±£?»º´æÎļþ²»»áÎÞÏÞÔö³¤£¬Õ¼Óùý¶à´ÅÅ̿ռ䡣
¸ºÔؾùºâ²ßÂÔ£º¶ÔÓÚ´ó¹æÄ£ÊÓÆµÆ½Ì¨£¬µ¥Ì¨Nginx·þÎñÆ÷ÄÑÒÔÖ§³Å£¬ÐèÒª²¿Êð¶ą̀Nginx»ò½«NginxÓëºó¶ËÊÓÆµ·þÎñÆ÷¼¯ÈºÅäºÏʹÓá£NginxµÄupstreamÄ£¿éÌṩÁ˶àÖÖ¸ºÔؾùºâËã·¨£¬Èçround-robin£¨ÂÖѯ£©¡¢weight£¨¼ÓȨÂÖѯ£©¡¢ip_hash£¨IP¹þÏ££©µÈ¡£
Ñ¡ÔñºÏÊʵÄ?¸ºÔؾùºâ²ßÂÔ£¬Äܹ»È·±£Á÷Á¿±»¾ùÔÈ·ÖÅäµ½¸÷¸ö·þÎñÆ÷£¬±ÜÃâµ¥µã¹ýÔØ£¬Ìá¸ßÕûÌåϵͳµÄ¿ÉÓÃÐÔºÍÍÌÍÂÁ¿¡£
¶¯¾²·ÖÀ룺½«ÊÓÆµÎļþµÈ¾²Ì¬×ÊÔ´µÄ·ÃÎÊÇëÇ󽻸øNginx´¦Àí£¬¶ø½«ÐèÒªºó¶ËÓ¦Ó÷þÎñÆ÷´¦ÀíµÄ¶¯Ì¬ÇëÇó£¨ÈçÓû§ÈÏÖ¤¡¢ÆÀÂÛ½»»¥µÈ£©×ª·¢³öÈ¥¡£ÕâÖÖ·ÖÀë¿ÉÒÔ³ä·Ö·¢»ÓNginx¸ßЧ´¦Àí¾²Ì¬ÎļþµÄÄÜÁ¦£¬Èúó¶ËÓ¦Ó÷þÎñÆ÷רעÓÚ´¦?ÀíÒµÎñÂß¼£¬´Ó¶øÌá¸ßÕû¸öϵͳµÄ´¦ÀíЧÂÊ¡£
ÀýÈ磬¿ÉÒÔͨ¹ýlocation¿éÆ¥ÅäÊÓÆµÎļþµÄURL£¬Ö±½ÓÔÚNginxÖнøÐÐÅäÖ㬶ø½«ÆäËûURLת·¢¸øÓ¦Ó÷þÎñÆ÷¡£
ÏÖ´úÁ÷ýÌå²¥·ÅÔçÒѲ»ÊǼòµ¥µÄÎļþÏÂÔØ£¬¶øÊÇ»ùÓÚһϵÁÐÓÅ»¯µÄÐÒéÀ´ÊµÏֵġ£Nginxƾ½èÆäÇ¿´óµÄÄ£¿é»¯Éè¼ÆºÍÁé»îÐÔ£¬Äܹ»ÍêÃÀÖ§³ÖÖ÷Á÷µÄÁ÷ýÌåÐÒ飬ΪÓû§Ìṩ¸ü¼ÑµÄ²¥·ÅÌåÑé¡£
HTTPLiveStreaming(HLS)£ºHLSÊÇÓÉAppleÌá³öµÄÁ÷ýÌå´«ÊäÐÒ飬Ëü½«ÊÓÆµÄÚÈÝ·Ö¸î³ÉһϵÁÐСµÄ¡¢»ùÓÚHTTPµÄ.tsýÌåÎļþ£¬²¢Î¬»¤Ò»¸ö.m3u8µÄ²¥·ÅÁбíÎļþ¡£Nginx¿ÉÒԷdz£¸ßЧµØ·Ö·¢ÕâЩ.tsÎļþºÍ.m3u8Îļþ¡£
NginxµÄHLSÖ§³Ö£ºNginx±¾Éí²¢²»Ö±½ÓÌṩHLS´ò°ü¹¦ÄÜ£¨Õâͨ³£ÔÚÊÓÆµ×ªÂë·þÎñÆ÷ÉÏÍê³É£©£¬µ«?ËüÈ´ÊÇ·Ö·¢HLSÁ÷µÄÀíÏë·þÎñÆ÷¡£Äã¿ÉÒÔ½«×ªÂëºóµÄHLSÎļþ´æ·ÅÔÚNginxÄܹ»·ÃÎʵÄĿ¼£¬È»ºóͨ¹ýNginx½øÐиßЧÂʵÄHTTP´«Êä¡£ÓÅ»¯HLS´«Ê䣺»º´æ²ßÂÔ£º¶Ô.m3u8²¥·ÅÁбíÎļþºÍ.tsýÌåÎļþÉèÖúÏÀíµÄ»º´æ²ß?ÂÔÖÁ¹ØÖØÒª¡£
.m3u8Îļþͨ³£?±ä»¯½Ï¿ì£¬¿ÉÒÔÉèÖý϶̵Ļº´æÊ±¼ä£¬¶ø.tsÎļþÔò±ä»¯½ÏÉÙ£¬¿ÉÒÔÉèÖýϳ¤µÄ»º´æÊ±¼ä¡£NginxµÄproxy_cacheÖ¸Áî¿ÉÒԺܺõØÂú×ãÕâÖÖÐèÇó¡£·ÖÆ¬´«ÊäÓÅ»¯£ºHLSµÄÓÅÊÆÔÚÓÚÆä·ÖƬ´«Ê䣬¼´Ê¹µ¥¸ö.tsÎļþ´«Êäʧ°Ü£¬²¥·ÅÆ÷Ò²¿ÉÒÔ³¢ÊÔÇëÇóÏÂÒ»¸ö¡£
¶ÔÓÚÃæÏòÈ«ÇòÓû§µÄÊÓÆµ·þÎñ£¬ÓëCDN(ContentDeliveryNetwork)¼¯³ÉÊDZز»¿ÉÉٵġ£Nginx¿ÉÒÔ×÷ΪCDNµÄ»ØÔ´·þÎñÆ÷£¬»òÕßÖ±½Ó×÷Ϊ±ßÔµ½Úµã²¿Êð¡£
×÷Ϊ»ØÔ´·þÎñÆ÷:ÅäÖÃNginxµÄproxy_cacheÖ¸ÏòCDNµÄ»º´æ½Úµã£¬µ±CDN½Úµã»º´æÊ§Ð§Ê±£¬ÇëÇó»á»ØÔ´µ½Nginx¡£×÷Ϊ±ß??Ôµ½Úµã:Ö±½Ó²¿ÊðNginx×÷ΪCDNµÄ±ßÔµ½Úµã£¬³ä·ÖÀûÓÃNginxµÄ¸ßÐÔÄܺͻº´æÄÜÁ¦£¬ÎªÓû§Ìṩ×î¿ìËٶȵÄÊÓÆµ·þÎñ¡£
С½á£ºNginxÖ®ËùÒÔÄÜÔÚÊÓÆµÓÅ»¯ÁìÓòÍÑÓ±¶ø³ö£¬ÕýÊÇÒòΪËüÔÚÍøÂç´«?Êä¡¢ÐÒéÖ§³Ö¡¢Îļþ·þÎñºÍ»º´æ²ßÂԵȷ½Ãæ¶¼¾ß±¸Ç¿´óµÄÄÜÁ¦¡£Í¨¹ý¶Ôsendfile¡¢HTTP/2¡¢BBR¡¢HLS/DASHÖ§³ÖÒÔ¼°proxy_cacheµÈºËÐÄÅäÖõÄÉîÈëÀí½âºÍºÏÀíÔËÓã¬ÎÒÃÇÒѾΪ¹¹½¨¸ßЧµÄÊÓÆµÁ÷ýÌå·þÎñ´òÏÂÁ˼áʵµÄ»ù´¡¡£
Õâ½ö½öÊÇ¿ªÊ¼¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«½øÒ»²½Ì½Ë÷NginxÔÚCDN¼¯³É¡¢Á÷Á¿µ÷¶È¡¢°²È«·À»¤ÒÔ¼°¶¯Ì¬ÓÅ»¯·½ÃæµÄ½ø½×¼¼ÇÉ£¬ÒÔÆÚ´ïµ½¡°100%ÊÓÆµÓÅ»¯¡±µÄ?ÖÕ¼«Ä¿±ê¡£
NginxÔÚÕâЩÐÒéÉϵÄÖ§³Ö?£¬²»½ö½öÊǼòµ¥µÄÐÒ鼿ÈÝ£¬¸üÖØÒªµÄÊÇÆäÄܹ»Î§ÈÆÕâЩÐÒéÌṩ¸ßÐÔÄÜ¡¢¸ß¿ÉÓÃÐÔµÄ?½â¾ö·½°¸¡£Í¨¹ýÅäÖÃNginx×÷ΪAPIÍø¹Ø¡¢¸ºÔؾùºâÆ÷¡¢»º´æ·þÎñÆ÷£¬ÉõÖÁ½áºÏÆä×÷ΪWeb·þÎñÆ÷µÄÉí·Ý£¬¿ÉÒÔ¹¹½¨³ö¸´ÔÓµ«¸ßЧµÄÁ÷ýÌå·Ö·¢ÏµÍ³¡£
ÀýÈ磬ͨ¹ýNginxµÄrewriteºÍmapÄ£¿é£¬¿ÉÒÔʵÏÖ¶Ô²¥·ÅµØÖ·µÄÁé»î¿ØÖƺͰ²È«¼Ó¹Ì£»Í¨¹ýlimit_connºÍlimit_reqÄ£¿é£¬¿ÉÒÔ¶Ô¿Í»§¶ËÇëÇó½øÐÐÏÞËÙ£¬·ÀÖ¹¶ñÒâ¹¥»÷ºÍ×ÊÔ´ÀÄÓá£
ʵÏÖNginxµÄ¡°100%ÊÓÆµÐÔÄÜ¡±ÊÇÒ»¸öϵͳ¹¤³Ì£¬ËüÒªÇóÎÒÃÇÉîÈëÀí½âNginxµÄ¹¤×÷ÔÀí£¬ÊìÁ·ÕÆÎÕ¸÷ÖÖÅäÖÃÖ¸Á²¢½áºÏ¾ßÌåµÄÒµÎñ³¡¾°½øÐо«Ï¸»¯µ÷ÓÅ¡£´ÓRTMPÖ±²¥µ½HTTPµã²¥£¬´Ó»ù´¡µÄÅäÖõ½¸ß¼¶µÄ»º´æ²ßÂԺ͸ºÔؾùºâ£¬Nginx¶¼Õ¹ÏÖ³öÁËÆäÇ¿´óµÄÊÊÓ¦ÐÔºÍ׿ԽµÄÐÔÄÜ¡£
ͨ¹ý²»¶ÏµØÊµ¼ùºÍ̽Ë÷£¬Äú½«Äܹ»³ä·ÖÊÍ·ÅNginxµÄDZÁ¦£¬ÎªÄúµÄÓû§Ìṩ¼«ÖÂÁ÷³©µÄÊÓÆµÌåÑ飬ÔÚ¼¤ÁÒµÄÁ÷ýÌåÊг¡?ÖÐÍÑÓ±¶ø³ö¡£Nginx²»½ö½öÊÇÒ»¸öWeb·þÎñÆ÷£¬Ëü¸üÊÇÄú¹¹½¨¸ßÐÔÄÜÊÓÆµÆ½Ì¨µÄÇ¿´ó»ùʯ£¬¸³ÄÜÄúµÄÁ÷ýÌåÒµÎñ£¬×ßÏòÎÞÏÞ¿ÉÄÜ¡£
worker½ø³ÌÊýÓëworker_connections£ºÕâÊÇNginxÐÔÄÜÓÅ»¯µÄºËÐIJÎÊý¡£worker_processes¿ØÖÆNginx¹¤×÷½ø³ÌµÄÊýÁ¿£¬Í¨³£½¨ÒéÉèÖÃΪCPUºËÐÄÊýµÄÁ½±¶£¬ÒÔ³ä·ÖÀûÓöàºËCPUµÄ²¢Ðд¦ÀíÄÜÁ¦¡£
worker_connections¶¨ÒåÁËÿ¸ö¹¤×÷½ø³ÌÄÜͬʱ´¦ÀíµÄ×î´óÁ¬½ÓÊý¡£ÔÚÊÓÆµÁ÷ýÌ峡¾°Ï£¬Óû§¿ÉÄܳ¤Ê±¼ä±£³ÖÁ¬½Ó£¬Òò´ËÐèÒª½«worker_connectionsÉèÖÃΪһ¸öÏà¶Ô½Ï´óµÄÖµ£¬ÀýÈç4096»ò¸ü¸ß£¬¾ßÌåÊýÖµÐèÒª¸ù¾Ý·þÎñÆ÷µÄÄÚ´æºÍʵ¼Ê²âÊÔÇé¿öÀ´È·¶¨¡£
sendfileon;£ºÕâÊÇÒ»¸öÖÁ¹ØÖØÒªµÄÖ¸ÁËüÔÊÐíNginxÖ±½Ó´ÓÎļþϵͳÖжÁÈ¡Êý¾Ý²¢?½«Æä·¢Ë͵½ÍøÂçÌ×½Ó×Ö£¬¶øÎÞÐ轫Êý¾Ý¿½±´µ½Óû§¿Õ¼äºÍÄں˿ռäÖ®¼ä¡£Õâ´ó´ó¼õÉÙÁËCPUºÍÄÚ´æµÄ¿ªÏú£¬ÏÔÖøÌá¸ßÁ˾²Ì¬Îļþ´«ÊäµÄЧÂÊ£¬¶ÔÓÚÊÓÆµ´«Êä¶øÑÔ£¬ÆäÐÔÄÜÌáÉýÊǾªÈ˵ġ£
tcp_nopushon;Óëtcp_nodelayon;£º
client_body_buffer_size£ºÓÃÓÚ´æ´¢?¿Í»§¶ËÇëÇóÌå¡£¶ÔÓÚÊÓÆµÉÏ´«³¡¾°£¬ÐèÒªÊʵ±Ôö´ó´ËÖµ¡£proxy_buffer_sizeºÍproxy_buffers£ºµ±Nginx×÷Ϊ·´Ïò´úÀíʱ£¬ÓÃÓÚ´æ´¢´ÓÉÏÓηþÎñÆ÷½ÓÊÕµ½µÄÏìÓ¦Êý¾Ý¡£
¶ÔÓÚÊÓÆµÁ÷£¬ÐèÒªÉèÖÃ×ã¹»´óµÄ»º³åÇø´óСºÍÊýÁ¿£¬ÒÔ±ÜÃâÊý¾ÝÔÚ´«Êä¹ý³ÌÖб»½Ø¶Ï»òƵ·±µØ½øÐдÅÅÌI/O£¬È·±£Á÷ýÌåµÄÁ¬ÐøÐÔ¡£ÀýÈ磬¿ÉÒÔÉèÖÃproxy_buffer_size128k;proxy_buffers4256k;À´Ìṩ¸ü´óµÄ»º³åÇø¿Õ¼ä¡£
sendfileºÍtcp_nopush/tcp_nodelay£ºsendfileon;¿ÉÒÔÈÃNginxÖ±½Ó½«Îļþ´Ó´ÅÅÌ´«?Êäµ½ÍøÂç½Ó¿Ú£¬±ÜÃâÁËÔÚÓû§¿Õ¼äºÍÄں˿ռäÖ®¼ä¸´ÖÆÊý¾ÝµÄ¿ªÏú£¬¼«´óµØÌáÉýÁËÎļþ´«ÊäЧÂÊ£¬ÓÈÆä¶ÔÊÓÆµÎļþ´«ÊäÓÐÏÔÖøÐ§¹û¡£
tcp_nopushon;ºÍtcp_nodelayon;ÔòÓÃÓÚÓÅ»¯TCP·¢ËÍÊý¾ÝµÄ·½Ê½£¬¼õÉÙÑÓ³Ù£¬ÌáÉýÍÌÍÂÁ¿¡£
2.ÉîÈëÀí½âÁ÷ýÌåÐÒéÅäÖãºHLSºÍDASHµÄ×î¼Ñʵ¼ù
Á¬½Ó½¨Á¢¿ªÏú£ºÃ¿´ÎÇëÇó¶¼ÐèÒª½¨Á¢TCPÁ¬½Ó£¬¶ÔÓÚÆµ·±µÄ¶ÌÁ¬½ÓÊÓÆµ£¬»á²úÉú²»Ð¡µÄ¿ªÏú¡£´ø¿íÀûÓÃÂÊ£ºHTTPµÄÍ·²¿ÐÅÏ¢Ïà¶ÔÈßÓ࣬»áÕ¼ÓÃÒ»²¿·Ö´ø¿í¡£Á÷ýÌåÌØÐÔµÄÖ§³Ö²»×㣺HTTPÔÉú²¢²»Ö§³ÖRTMP¡¢HLS¡¢DASHµÈÁ÷ýÌåÐÒéµÄÌØÐÔ£¬Èç·ÖƬ´«?Êä¡¢¶ÏµãÐø²¥¡¢¶¯Ì¬ÂëÂÊÇл»µÈ¡£
Nginx²¢Ã»ÓоÖÏÞÓÚÔÉúHTTPµÄÄÜÁ¦¡£Í¨¹ý¼ÓÔØ¸÷ÖÖÄ£¿é£¬NginxÄܹ»¼«´óµØÀ©Õ¹Æä¹¦ÄÜ£¬ÒÔ¸üºÃµØÖ§³Ö?ÊÓÆµ·Ö·¢¡£ÆäÖУ¬×î¹Ø¼üµÄ±ãÊÇÆäÇ¿´óµÄ»º´æ?»úÖÆ¡£
¶ÔÓÚHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)µÈ×ÔÊÊÓ¦±ÈÌØÂÊÁ÷ýÌåÐÒ飬NginxͬÑù±íÏÖ³öÉ«¡£Æä¸ßЧµÄÎļþ´«ÊäÄÜÁ¦¿ÉÒÔÈ·±£.ts»ò.m4sµÈýÌå·ÖƬÄܹ»¿ìËÙ¡¢Îȶ¨µØ´«Ê䏸Óû§¡£
ÅäºÏ»º´æ£¬¼´Ê¹Êǹۿ´ÈÈÃÅÊÓÆµ£¬Ò²Äܱ£Ö¤¼«¸ßµÄ²¢·¢³ÐÔØÄÜÁ¦¡£
ͨ¹ýÒÔÉÏÕâЩÅäÖòßÂÔµÄ×éºÏÓ¦Óã¬Äú¿ÉÒÔ³ä·ÖÍÚ¾òNginxµÄDZÁ¦£¬´òÔìÒ»¸öÐÔÄÜ׿Խ¡¢ÌåÑ鼫ÖµÄÊÓÆµ·þÎñƽ̨¡£¸æ±ð¿¨¶Ù£¬Óµ±§Á÷³©£¬ÈÃÄúµÄ?Óû§ÔÚ¹Û¿´ÊÓÆµÊ±£¬ÏíÊܵ½Ç°ËùδÓеijÁ?½þʽÌåÑ飡
ÔÚÏÖ´úÊÓÆµ·Ö·¢ÌåϵÖУ¬CDN£¨ContentDeliveryNetwork£©ÒѳÉΪ²»¿É»òȱµÄ×é³É²¿·Ö¡£Nginxƾ½èÆä¼«¸ßµÄÁé»îÐÔºÍÐÔÄÜ£¬Êǹ¹½¨×Ô½¨CDN»ò×÷ΪCDN½Úµã·þÎñµÄÀíÏëÑ¡Ôñ¡£Í¨¹ýÔÚÈ«Çò²¿Êð´óÁ¿µÄNginx·þÎñÆ÷×÷Ϊ±ßÔµ½Úµã£¬¿ÉÒÔ½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄµØ·½¡£
»º´æ²ßÂԵľ«Ï¸»¯£ºNginxµÄproxy_cacheÖ¸ÁîÌṩÁËÇ¿´óµÄ?»º´æ¹¦ÄÜ¡£Õë¶ÔÊÓÆµÁ÷£¬¿ÉÒÔ¸ù¾ÝÊÓÆµµÄÉúÃüÖÜÆÚ¡¢¸üÐÂÆµÂÊÀ´ÉèÖò»Í¬µÄ»º´æÊ±¼äºÍ²ßÂÔ¡£ÀýÈ磬¶ÔÓÚÈÈÃŵÄÖ±²¥ÄÚÈÝ£¬¿ÉÒÔÉèÖýϳ¤µÄ»º´æ?ʱ¼ä£»¶ø¶ÔÓÚ¸üÐÂÆµ·±µÄ¶ÌÊÓÆµ£¬ÔòÐèÒª¸üÖÇÄܵĻº´æË¢Ð»úÖÆ¡£
proxy_cache_key¿ÉÒÔÓÃÀ´Éú³É¸ü¾ßÕë¶ÔÐԵĻº´æ¼ü£¬È·±£²»Í¬Óû§¡¢²»Í¬ÇëÇó²ÎÊýÏµĻº´æÃüÖÐÂÊ¡£¾Í½ü·ÃÎÊÓëÁ÷Á¿¸ºÔؾùºâ£º½áºÏDNS½âÎö»òAnycast·Óɼ¼Êõ£¬¿ÉÒÔ½«Óû§µÄÇëÇóÒýµ¼ÖÁ¾àÀëËûÃÇ×î½üµÄNginx±ßÔµ½Úµã¡£½ÚµãÄÚ²¿£¬NginxµÄ¸ºÔؾùºâ»úÖÆ£¨ÈçRoundRobin,LeastConnections£©¿ÉÒÔÓÐЧµØ½«Á÷Á¿·ÖÅ䏸ºó¶ËµÄÄÚÈÝÔ´£¬»òÕßÔÚ¶à¸öCDN½ÚµãÖ®¼ä½øÐÐÁ÷Á¿µ÷¶È£¬·ÀÖ¹µ¥µã¹ýÔØ¡£
ͨ¹ýÔÚÐÒé¡¢ÐÔÄܺͰ²È«µÈºËÐIJãÃæµÄÈ«ÃæÉý¼¶£¬Nginx×îа汾ÒѾΪʵÏÖ¡°100%ÊÓÆµ²¥·Å100%¡±´òÏÂÁ˼áʵµÄ»ù´¡¡£Ëü²»½ö½öÊÇÒ»¸öWeb·þÎñÆ÷£¬¸üÊÇÒ»¸öΪÊÓÆµÁ÷ýÌåÁ¿Éí´òÔìµÄÇ¿´óÒýÇæ£¬ÕýÒÔǰËùδÓеÄ×Ë̬£¬ÒýÁì×ÅÊÓÆµ²¥·ÅÌåÑéµÄ¸ïС£
Nginx100%ÊÓÆµ²¥·Å100%£º¸³ÄܶàÔª»¯³¡¾°£¬½âËøÎÞÏÞ¿ÉÄÜ
Nginx×îа汾ÔÚÊÓÆµÁ÷ýÌåÁìÓòÕ¹ÏÖ³öµÄÇ¿´óʵÁ¦£¬²»½ö½öÌåÏÖÔڵײ㼼ÊõµÄÓÅ»¯£¬¸üÔÚÓÚÆäÄܹ»¸³Äܸ÷ÖÖ¶àÔª»¯µÄÊÓÆµÓ¦Óó¡¾°£¬Îª¿ª·¢ÕߺÍÄÚÈÝÌṩÉ̽âËøÁËÎÞÏ޵ĿÉÄÜ¡£´Ó¸ßÇåµã²¥µ½µÍÑÓ³Ù?Ö±²¥£¬´Ó±ßÔµ¼ÆËãµ½?CDN¹¹½¨£¬NginxÕý³ÉΪÇý¶¯ÏÂÒ»´úÊÓÆµÌåÑéµÄ¹Ø¼üÁ¦Á¿¡£
workerprocessesºÍworkerconnections£ºÌáÉý²¢·¢´¦ÀíÄÜÁ¦
worker_processes£º¶¨ÒåNginx¹¤×÷½ø³ÌµÄÊýÁ¿¡£Í¨³£ÉèÖÃΪCPUºËÐÄÊý»òÁ½±¶CPUºËÐÄÊý£¬ÒÔ³ä·ÖÀûÓöàºË´¦ÀíÆ÷µÄÓÅÊÆ¡£worker_connections£ºÉèÖÃÿ¸ö¹¤×÷½ø³ÌÄܹ»´¦ÀíµÄ×î´ó²¢·¢Á¬½ÓÊý¡£Õâ¸öÖµÐèÒª¸ù¾Ý·þÎñÆ÷µÄʵ¼ÊÄÚ´æºÍ´¦ÀíÄÜÁ¦½øÐе÷Õû£¬µ«¶ÔÓÚÊÓÆµ·þÎñ¶øÑÔ£¬Äþ¿ÉÉèÖõøßһЩ£¬Ò²²»?ÒªÈÃÁ¬½ÓÊý³É?Ϊƿ¾±¡£
keepalivetimeoutºÍkeepaliverequests£ºÓÅ»¯Á¬½Ó¸´ÓÃ
keepalive_timeout£ºÖ¸¶¨¿Í»§¶ËÁ¬½ÓµÄ³¬Ê±Ê±¼ä¡£Êʵ±ÑÓ³¤¸ÃÖµ¿ÉÒÔ¹ÄÀø¿Í»§¶Ë¸´ÓÃÒѽ¨Á¢µÄÁ¬½Ó£¬¼õÉÙÁ¬½Ó½¨Á¢ºÍÏú»ÙµÄ¿ªÏú¡£keepalive_requests£ºÉèÖÃÒ»¸ö³Ö¾ÃÁ¬½ÓÉÏÔÊÐíµÄ?×î¶àÇëÇóÊý¡£ºÏÀíµÄÉèÖÿÉÒÔÆ½ºâÁ¬½Ó¸´ÓúͷþÎñÆ÷×ÊÔ´Õ¼Óá£
sendfileºÍtcpnopush/tcpnodelay£º¼ÓËÙÎļþ´«Êä
GzipѹËõ£ºËäÈ»ÊÓÆµÎļþ±¾Éíͨ³£²»ÊʺÏGzipѹËõ£¬µ«¶ÔÓÚÊÓÆµÔªÊý¾Ý¡¢JS¡¢CSSµÈ¸¨ÖúÎļþ£¬¿ªÆôGzipѹËõ¿ÉÒÔÓÐЧ¼õÉÙ´«Êä´ø¿í¡£Keep-AliveÁ¬½Ó£ººÏÀíÅäÖÃkeepalive_timeout£¬±£³ÖHTTPÁ¬½ÓµÄ»îÔ¾£¬¼õÉÙTCPÁ¬½Ó½¨Á¢µÄ¿ªÏú£¬Ìá¸ß³ÖÐøÇëÇóµÄЧÂÊ¡£
TCPµ÷ÓÅ£ºÔÚ²Ù×÷ϵͳ²ãÃæ½øÐÐTCP²ÎÊýµ÷ÓÅ£¨Èçnet.core.somaxconn¡¢net.ipv4.tcp_tw_reuseµÈ£©£¬ÒÔÌá¸ß·þÎñÆ÷´¦Àí¸ß²¢·¢TCPÁ¬½ÓµÄÄÜÁ¦¡£Ó²¼þ¼ÓËÙ£ºÀûÓÃNginxµÄһЩģ¿é»ò²Ù×÷ϵͳ¼¶±ðµÄÖ§³Ö£¬ÊµÏÖÓ²¼þ¼ÓËÙ£¬ÀýÈçͨ¹ýngx_http_vhost_traffic_status_module¼à¿ØÁ÷Á¿£¬»òÀûÓÃDPDKµÈ¼¼ÊõÓÅ»¯ÍøÂçIO¡£
ͨ¹ýÉÏÊö²ßÂÔµÄ×ÛºÏÔËÓã¬NginxÄܹ»³ÉΪһ¸öÇ¿´óµÄÊÓÆµÁ÷ýÌå¼ÓËÙÆ½Ì¨¡£´Óǰ¶ËµÄ»º´æ²ßÂÔµ½ºó¶ËµÄÐÒéÓÅ»¯£¬ÔÙµ½Ö±²¥µÄʵʱ·Ö·¢£¬NginxÔÚÿһ¸ö»·½Ú¶¼Õ¹ÏÖ³öÆä׿ԽµÄÐÔÄܺÍÁé»îÐÔ¡£Ñ¡ÔñNginx£¬Òâζ×ÅÑ¡ÔñÁËÒ»¸öÄܹ»Ó¦¶Ôº£Á¿Óû§¡¢Ìṩ¼«ÖÂÁ÷³©¹ÛÓ°ÌåÑéµÄ¿É¿¿»ï°é¡£
ÈÃNginx³ÉΪÄúÊÓÆµÓÅ»¯µÄÖÕ¼«Ãؼ®£¬ÇáËɽâËø100%Á÷³©µÄ¹ÛӰмÍÔª£¡
HTTP/2µÄ¶à·¸´ÓÃÓëÍ·²¿Ñ¹Ëõ£ºHTTP/2ÒýÈëÁ˶à·¸´Óã¨Multiplexing£©µÄ?¸ÅÄÔÊÐíÔÚµ¥¸öTCPÁ¬½ÓÉÏͬʱ·¢ËͶà¸öÇëÇóºÍÏìÓ¦£¬¶øÎÞÐèÏñHTTP/1.1ÄÇÑùÅŶӵȴý¡£Õâ¶ÔÓÚÊÓÆµ´«ÊäÓÈÆäÖØÒª£¬ÒòΪһ²¿¸ßÇåÊÓÆµÍùÍùÓɶà¸öСÎļþ£¨ÈçÊÓÆµÖ¡¡¢ÒôƵ¿é£©×é³É¡£
¶à·¸´ÓÃÄܹ»ÏÔÖø¼õÉÙÁ¬½Ó½¨Á¢µÄ´ÎÊý£¬½µµÍÑÓ³Ù£¬ÌáÉý¼ÓÔØËÙ¶È¡£HTTP/2µÄÍ·²¿Ñ¹Ëõ£¨HeaderCompression£©Ò²´ó´ó¼õÉÙÁË´«ÊäµÄÊý¾ÝÁ¿£¬½øÒ»²½¼ÓËÙÁËÊÓÆµµÄ¼ÓÔØ¹ý³Ì¡£Nginx×îа汾ͨ¹ý¾«Ï¸»¯¹ÜÀíHTTP/2µÄÁ÷£¬È·±£ÊÓÆµÊý¾ÝµÄ´«ÊäЧÂÊ×î´ó»¯¡£
HTTP/3µÄQUICÐÒ飺HTTP/3ÊÇÏÂÒ»´ú»¥ÁªÍøÐÒ飬Ëü»ùÓÚQUICÐÒé¡£QUICÐÒéÔËÐÐÔÚUDPÖ®ÉÏ£¬½â¾öÁËTCPÔÚ´¦?Àí¶ª°üºÍÁ¬½ÓÇ¨ÒÆÊ±µÄÐÔÄÜÆ¿¾±¡£¶ÔÓÚÊÓÆµ´«ÊäÀ´Ëµ£¬ÕâÒâζ׿´Ê¹ÔÚÍøÂç×´¿ö²»¼ÑµÄÇé¿öÏ£¬ÊÓÆµµÄ¿¨¶ÙÒ²»á´ó´ó¼õÉÙ£¬ÑÓ³Ù¸üµÍ£¬Á¬½Ó½¨Á¢¸ü¿ì¡£
NginxÔÚ×îа汾Öлý¼«Óµ±§HTTP/3£¬ÎªÓû§ÌṩÁ˸ü¼ÓÎȶ¨¡¢¿É¿¿µÄÊÓÆµ´«ÊäÌåÑ飬տÕýʵÏÖÁË¡°100%ÊÓÆµÓÅ»¯¡±µÄ¡°Ë¿»¬¡±¸ÐÊÜ¡£
3.¶¯Ì¬ÄÚÈݼÓËÙÓ뻺´æ²ßÂԵľ«½ø£ºÈÃÊÓÆµ¡°Ã롱µ½Óû§ÑÛǰ
ËäÈ»ÊÓÆµÎļþ±¾Éíͨ³£ÊǾ¹ý¸ß¶ÈѹËõµÄ£¨ÈçH.264/H.265±àÂ룩£¬µ«HTTP´«Êä¹ý³ÌÖпÉÄÜ»á´æÔÚһЩ¿ÉѹËõµÄÍ·²¿ÐÅÏ¢»òÔªÊý¾Ý¡£NginxµÄ?GzipѹËõ¹¦ÄÜ¿ÉÒÔÔÚÕâЩ²¿·Ö·¢»Ó×÷Ó㬽øÒ»²½¼õС´«ÊäµÄÊý¾ÝÁ¿£¬½ÚÊ¡´ø¿í£¬²¢¼Ó¿ì´«ÊäËÙ¶È¡£
ÆôÓÃGzipѹËõ£ºÔÚNginxµÄhttp»òserver¿éÖУ¬¿ÉÒÔʹÓÃgzipon;Ö¸ÁîÀ´¿ªÆôGzipѹËõ¡£ÅäÖÃѹËõ¼¶±ð£ºgzip_comp_levelÖ¸Áî¿ÉÒÔÉèÖÃѹËõ¼¶±ð?£¨1-9£©£¬¼¶±ðÔ½¸ßѹËõЧ¹ûÔ½ºÃ£¬µ«CPUÏûºÄÒ²Ô½´ó¡£Í¨³£ÉèÖÃΪ4-6ÊDZȽÏÕÛÖÔµÄÑ¡Ôñ¡£
Ö¸¶¨Ñ¹ËõÀàÐÍ£ºgzip_typesÖ¸Áî¿ÉÒÔÖ¸¶¨ÄÄЩMIMEÀàÐ͵ÄÎļþ½øÐÐѹËõ¡£¶ÔÓÚÊÓÆµÁ÷£¬Äã¿ÉÄܲ»Ï£Íû¶ÔÊÓÆµ±¾Éí½øÐÐGzipѹËõ£¨ÒòΪËüÃDZ¾ÉíÒѾÊǸ߶ÈѹËõµÄ£©£¬µ«¿ÉÒÔ¶ÔHTML¡¢CSS¡¢JavaScriptµÈ¸¨ÖúÎļþ½øÐÐѹËõ£¬ÒÔÌáÉýÒ³Ãæ¼ÓÔØËÙ¶È¡£
ÆäËûÏà¹ØÖ¸Ágzip_min_length£¨Ö¸¶¨×îСѹËõ³¤¶È£©¡¢gzip_disable£¨½ûÓÃijЩä¯ÀÀÆ÷»òÌõ¼þϵÄѹËõ£©¡¢gzip_varyon£¨ÔÚÏìӦͷÖÐÌí¼ÓVary:Accept-Encoding£¬·ÀÖ¹»º´æ´úÀí´íÎ󵨻º´æÎ´Ñ¹ËõµÄÄÚÈÝ£©µÈ£¬¿ÉÒÔ¸ù¾Ýʵ¼ÊÐèÇó½øÐиü¾«Ï¸µÄÅäÖá£
RTMPÄ£¿é°²×°£ºNginxĬÈϲ»°üº¬RTMPÄ£¿é£¬ÐèҪͨ¹ý±àÒëʱÌí¼Óngx_http_vhost_traffic_status_moduleÄ£¿é»òʹÓÃÔ¤±àÒëµÄ°üº¬RTMPÄ£¿éµÄNginx°æ±¾¡£RTMPÁ÷ת·¢£ºNginxµÄ?RTMPÄ£¿é¿ÉÒÔ×÷Ϊֱ²¥Á÷µÄ½ÓÈëµã£¬½«ÍÆÁ÷µÄRTMPÐźÅת·¢µ½ºó¶ËÁ÷ýÌå·þÎñÆ÷£¨ÈçSRS,FFmpeg,WowzaµÈ£©£¬»òÕßÖ±½Ó½øÐзַ¢¡£
ÅäÖÃrtmp¿é£¬ÉèÖÃserver¡¢listen¡¢applicationµÈ²ÎÊý£¬²¢ÀûÓÃpush»òrelayÖ¸ÁîʵÏÖÁ÷µÄת·¢¡£´ø¿íÏÞÖÆºÍÁ¬½Ó¹ÜÀí£ºRTMPÄ£¿éÒ²Ö§³ÖһЩ»ù±¾µÄÁ÷Á¿¿ØÖÆ£¬ÀýÈçͨ¹ýclient_limitºÍstream_limitÀ´ÏÞÖÆÍ¬Ò»¿Í»§¶Ë»òͬһÁ÷µÄ×î´óÁ¬½ÓÊý£¬ÓÐÖúÓÚ·ÀÖ¹¶ñÒâ¹¥»÷ºÍ±£Ö¤Ö±²¥µÄÎȶ¨ÐÔ¡£
µ±ÊÓÆµÁ÷Á¿¼¤Ôöʱ£¬µ¥Ò»·þÎñÆ÷ÄÑÒÔ³ÐÊÜ¡£NginxµÄ¸ºÔؾùºâ¹¦ÄÜÄܹ»½«Á÷Á¿·Ö·¢µ½¶ą̀ºó¶Ë·þÎñÆ÷£¬Ìá¸ßϵͳµÄ¿ÉÓÃÐÔºÍÍÌÍÂÁ¿¡£
upstreamÄ£¿é£ºnginxupstreamvideo_servers{server192.168.1.10:8080;server192.168.1.11:8080;server192.168.1.12:8080backup;#±¸·Ý·þÎñÆ÷}¸ºÔؾùºâËã·¨£ºNginxÖ§³Ö¶àÖÖ¸ºÔؾùºâËã·¨£¬ÈçÂÖѯ(roundrobin£¬Ä¬ÈÏ)¡¢¼ÓȨÂÖѯ(weightedroundrobin)¡¢IP¹þÏ£(ip_hash)µÈ¡£
¶ÔÓÚÊÓÆµ·þÎñ£¬Í¨³£Ñ¡ÔñÂÖѯ»ò¼ÓȨÂÖѯ£¬¸ù¾Ý·þÎñÆ÷µÄʵ¼Ê´¦ÀíÄÜÁ¦½øÐзÖÅä¡£½¡¿µ¼ì²é£ºNginx¿ÉÒÔͨ¹ýhealth_check(µÚÈý·½Ä£¿é)»òÆäËû·½Ê½ÊµÏÖ¶Ôºó¶Ë·þÎñÆ÷µÄ½¡¿µ¼ì²é£¬µ±Ä³¸ö·þÎñÆ÷³öÏÖ¹ÊÕÏʱ£¬×Ô¶¯½«Æä´Ó¸ºÔؾùºâ³ØÖÐÒÆ³ý£¬È·±£·þÎñµÄ¿ÉÓÃÐÔ¡£
proxy_passhttp://origin_server;(ÉèÖûØÔ´µØÖ·)proxy_cache_key"$scheme$request_method$host$request_uri";(¶¨Ò建´æ¼ü£¬È·±£²»Í¬ÇëÇóµÄ»º´æ¸ôÀë)proxy_cache_valid20030210m;proxy_cache_valid4041m;(Ϊ²»Í¬ÏìÓ¦ÂëÉèÖò»Í¬µÄ»º´æÓÐЧÆÚ)ÓÅ»¯»ØÔ´²ßÂÔ:proxy_next_upstream:ÅäÖõ±Ô´·þÎñÆ÷³öÏÖ´í?Îó£¨ÈçÁ¬½Ó³¬Ê±¡¢HTTP´íÎó£©Ê±£¬NginxÊÇ·ñ³¢?ÊÔÁ¬½ÓÏÂÒ»¸öÉÏÓηþÎñÆ÷¡£
proxy_connect_timeout,proxy_send_timeout,proxy_read_timeout:¾«Ï¸µ÷ÕûÁ¬½Ó¡¢·¢ËͺͶÁÈ¡³¬Ê±Ê±¼ä£¬ÒÔÓ¦¶ÔÍøÂç²»Îȶ¨µÄÇé¿ö£¬±ÜÃâ²»±ØÒªµÄÁ¬½ÓÖжϡ£CDN½Úµã¼äµÄÐͬ:ÔÚ¸ü¸´ÔÓµÄCDN¼Ü¹¹ÖУ¬Nginx»¹¿ÉÒÔͨ¹ýproxy_cache_revalidateºÍproxy_cache_min_usesµÈÖ¸ÁʵÏÖ½Úµã¼äµÄ»º´æ?ͬ²½ºÍÓÐЧÐÔУÑ飬½øÒ»²½Ìá¸ßÕûÌ建´æÃüÖÐÂÊ¡£
Nginx×îа汾ÔÚÊÓÆµ´«Êä·½ÃæµÄÍ»ÆÆ£¬Àë²»?¿ªÆäÔڵײã¼Ü¹¹ÉϵijÖÐø¾«½ø¡£¸ßЧµÄI/O¶à·¸´ÓûúÖÆÊÇNginxÄܹ»´¦Àí¸ß²¢·¢Á¬½ÓµÄ¹Ø¼ü¡£Í¨¹ýepoll£¨Linux£©»òkqueue£¨BSD£©µÈ»úÖÆ£¬NginxÄܹ»ÔÚÒ»¸öÏß³ÌÖмàÊÓ´óÁ¿µÄÎļþÃèÊö·û£¬µ±?ÓÐʼþ·¢Éúʱ£¬ÔÙÓɹ¤×÷Ï߳̽øÐд¦Àí¡£
ÕâÒâζ×ÅNginx¿ÉÒÔÔÚ¼«µÍµÄCPUÕ¼ÓÃÂÊÏ£¬¸ßЧµØ´¦Àí³ÉǧÉÏÍòµÄÊÓÆµÊý¾Ý´«ÊäÇëÇ󣬱ÜÃâÁË´«Í³·þÎñÆ÷ÒòÏß³Ì/½ø³Ì´´½¨ºÍÇл»´øÀ´µÄÐÔÄÜËðºÄ¡£
NginxµÄÁ㿽±´£¨Zero-copy£©¼¼ÊõÔÚÊÓÆµ´«ÊäÖаçÑÝ×ÅÖÁ¹ØÖØÒªµÄ½ÇÉ«¡£ÔÚ´«Í³µÄI/OÄ£ÐÍÖУ¬Êý¾ÝÔÚÄں˿ռäºÍÓû§¿Õ¼äÖ®¼äÐèÒª¶à´Î¸´ÖÆ£¬Õâ»áÏûºÄ´óÁ¿µÄCPU×ÊÔ´ºÍÄÚ´æ´ø¿í¡£Nginxͨ¹ýsendfile()ϵͳµ÷Ó㬿ÉÒÔÖ±½Ó½«Êý¾Ý´ÓÄں˵ÄÎļþ»º³åÇø·¢Ë͵½ÍøÂçÌ×½Ó×Ö£¬ÈƹýÁËÓû§¿Õ¼äµÄ¿½±´»·½Ú£¬¼«´ó?µØÌá¸ßÁËÊý¾Ý´«ÊäµÄЧÂÊ£¬¼õÉÙÁËÑÓ³Ù£¬ÓÈÆäÊÇÔÚ´«Êä´óÎļþ£¨ÈçÊÓÆµÆ¬¶Î£©Ê±£¬Ð§¹ûÓÈΪÏÔÖø¡£
TURN/STUN·þÎñÆ÷µÄ²¿Êð£ºÔÚ¸´ÔÓµÄÍøÂç»·¾³ÖУ¬Ö±½ÓµÄP2PÁ¬½Ó¿ÉÄÜÊÜÏÞÓÚNAT£¨NetworkAddressTranslation£©ºÍ·À»ðǽ¡£Nginx¿ÉÒÔ×÷ΪSTUN£¨SessionTraversalUtilitiesforNAT£©·þÎñÆ÷£¬°ïÖú¿Í»§¶Ë·¢ÏÖÆä¹«ÍøIPµØÖ·ºÍ¶Ë¿Ú¡£
¸üÖØÒªµÄ?ÊÇ£¬Nginx¿ÉÒÔ²¿ÊðTURN£¨TraversalUsingRelaysaroundNAT£©·þÎñÆ÷£¬×÷ΪýÌåÁ÷µÄÖм̣¬È·±£Í¨ÐŵĿɿ¿ÐÔ¡£Í¨¹ýÅäÖÃNginxµÄ·´Ïò´úÀíÄÜÁ¦£¬¿ÉÒÔÇáËɵؽ«STUN/TURNÐÒéµÄÁ÷Á¿×ª·¢µ½×¨ÃŵÄýÌå·þÎñÆ÷¡£
ÐÔÄÜÓ밲ȫÐÔ£ºNginxµÄ¸ß²¢·¢´¦ÀíÄÜÁ¦£¬Ê¹ÆäÄܹ»Îȶ¨µØÖ§³Ö´ó¹æÄ£Óû§Í¬Ê±½øÐÐWebRTCͨÐÅ¡£NginxµÄSSL/TLS¼ÓÃÜÄÜÁ¦£¬Ò²ÄÜΪWebRTCͨÐÅÌṩ¶Ëµ½?¶ËµÄ°²È«±£ÕÏ¡£
È·±£ÄúµÄNginx°æ±¾Ö§³ÖHTTP/2»òHTTP/3£¬²¢ÔÚ·þÎñÆ÷ÅäÖÃÖÐÆôÓÃËüÃÇ¡£
server{listen443sslhttp2;#ÆôÓÃSSLºÍHTTP/2server_nameyour_video_domain.com;ssl_certificate/path/to/your/certificate.crt;ssl_certificate_key/path/to/your/private.key;#...ÆäËûSSLÏà¹ØÅäÖÃ...location/{#...ÄãµÄÆäËûlocationÅäÖÃ...}}
Èç¹ûÄúʹÓõÄÊǽÏа汾µÄNginx£¬²¢ÇÒ·þÎñÆ÷ÒѾ²¿ÊðÁËQUICÄ£¿é£¬Äú»¹¿ÉÒÔÅäÖÃHTTP/3£º
server{listen443sslhttp2quicreuseport;#ÆôÓÃSSL,HTTP/2,QUICserver_nameyour_video_domain.com;#...SSLºÍQUICÏà¹ØÅäÖÃ...location/{#...ÄãµÄÆäËûlocationÅäÖÃ...}}
³ýÁË»ù´¡ÅäÖã¬NginxÔÚ´¦ÀíÌØ¶¨ÊÓÆµÁ÷ÐÒéºÍ³¡¾°Ê±£¬»¹Óиü½øÒ»²½µÄÓÅ»¯ºÍÓ¦Óá£
RTMPÄ£¿é£ºNginx²¢²»Ö±½ÓÖ§³ÖRTMPÐÒ飬µ«¿ÉÒÔͨ¹ýµÚÈý·½Ä£¿é£¨Èçnginx-rtmp-module£©À´ÊµÏÖÖ±²¥Á÷µÄÍÆÀ¡£¸ÃÄ£¿éÔÊÐíNginx×÷ΪRTMP·þÎñÆ÷£¬½ÓÊÕÀ´×ÔÖ±²¥Ô´µÄÊÓÆµÁ÷£¬²¢½«Æä·Ö·¢¸ø´óÁ¿¹ÛÖÚ¡£ÕâʹµÃNginxÄܹ»³ÉΪһ¸öÇ¿´óÇÒÁé»îµÄÖ±²¥½â¾ö·½°¸¡£
HLS/DASHÁ÷ýÌåÖ§³Ö£ºNginx¿ÉÒԷdz£¸ßЧµØ·Ö·¢HLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)ÕâÁ½ÖÖÖ÷Á÷µÄ×ÔÊÊÓ¦±ÈÌØÂÊÁ÷ýÌåÐÒé¡£
ÕâЩÐÒ齫ÊÓÆµ·Ö¸î³ÉСƬ¶Î£¬²¢Ê¹ÓÃHTTP½øÐд«Ê䣬NginxµÄ¸ßÍÌÍÂÁ¿ºÍµÍÑÓ³ÙÌØÐÔʹÆä³ÉΪ·Ö·¢ÕâЩƬ¶ÎµÄÀíÏëÑ¡Ôñ¡£CDN¼¯³É£ºNginx³£³£×÷ΪCDN(ContentDeliveryNetwork)µÄ±ßÔµ½Úµã¡£Í¨¹ýÔÚÈ«Çò²¿?ÊðNginx·þÎñÆ÷£¬½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄ½Úµã£¬¿ÉÒÔÏÔÖø½µµÍÑÓ³Ù£¬ÌáÉý¹Û¿´ÌåÑ飬²¢·ÖÉ¢Ô´Õ¾µÄѹÁ¦¡£
*¸ß¼¶ÓÅ»¯¼¼ÇÉ£ºÈÃNginxÊÓÆµÐÔÄܸüÉÏÒ»²ãÂ¥*
ÇáÁ¿¼¶µÄÄÚ´æÕ¼ÓãºÏà¶ÔÓÚÐèҪΪÿ¸öÁ¬½Ó·ÖÅä´óÁ¿ÄÚ´æµÄ½ø³Ì/Ïß³ÌÄ£ÐÍ£¬NginxµÄʼþÇý¶¯Ä£ÐÍÄÚ´æÕ¼Ó÷dz£Ð¡¡£ÕâÒâζ×ÅÔÚÏàͬµÄÓ²¼þÌõ¼þÏ£¬Nginx¿ÉÒÔÖ§³Å¸ü¶àµÄ²¢?·¢Á¬½Ó£¬¶ÔÓÚÐèҪͬʱ·þÎñ´óÁ¿Óû§µÄÊÓÆµÆ½Ì¨À´Ëµ£¬ÕâÎÞÒÉÊǽµµÍÔËÓª³É±¾¡¢ÌáÉý·þÎñÄÜÁ¦µÄ¹Ø¼ü¡£
Áé»îµÄÅäÖúÍÄ£¿é»¯Éè¼Æ£ºNginxÓµÓм«ÆäÁé»îµÄÅäÖÃÓï·¨£¬²¢ÇÒÖ§³Ö·á¸»µÄÄ£¿é»¯À©Õ¹¡£ÕâʹµÃÓû§¿ÉÒÔ¸ù¾Ý¾ßÌåµÄÒµÎñÐèÇ󣬶¨ÖÆ»¯µØÅäÖÃNginx¡£¶ÔÓÚÊÓÆµÁ÷ýÌ壬¿ÉÒÔͨ¹ý¸÷ÖÖÄ£¿é£¨ÈçRTMPÄ£¿é¡¢HLS/DASHÄ£¿é¡¢HTTP/2Ä£¿éµÈ£©À´Ö§³Ö²»Í¬µÄÁ÷ýÌåÐÒéºÍ´«Ê䷽ʽ£¬´Ó¶øÂú×ãµã²¥¡¢Ö±²¥¡¢CDN·Ö·¢µÈ¶àÑù»¯µÄÓ¦Óó¡¾°¡£
¡°Nginx100ÊÓÆµ¡±²¢·ÇÒ»¸ö¹Ù·½µÄ¼¼ÊõÃû´Ê?£¬Ëü¸üÏñÊÇÒ»ÖÖ¶ÔNginxÔÚÊÓÆµÁ÷´«ÊäÁìÓò´ïµ½¡°¼«Ö¡±ÐÔÄܵÄÐÎÏ󻯱í?´ï¡£ÏëÏóһϣ¬µ±NginxµÄ?ÐÔÄܵÃ?µ½¡°°Ù±¶¡±ÌáÉý£¬ËüÄܹ»´¦ÀíµÄÊÓÆµÁ÷¾Í³ÊÖ¸Êý¼¶Ôö³¤¡£ÕâÒâζ×Å£º
¸üµÍµÄÑÓ³Ù£ºÓû§¹Û¿´Ö±²¥Ê±£¬ÑÓ³Ù»áÏÔÖø½µµÍ£¬¼¸ºõ´ïµ½¡°Ëù¼û¼´ËùµÃ¡±µÄ¾³½ç¡£¸ü¸ßµÄ²¢·¢£ºÆ½Ì¨Äܹ»Í¬Ê±Ö§³Ö¸ü¶àµÄÓû§ÔÚÏß¹Û¿´ÊÓÆµ£¬ÎÞÂÛÊÇ´óÐÍÈüÊÂÖ±²¥»¹ÊÇÈÈÞ缯ÉÏÏߣ¬¶¼ÄÜÇáËÉÓ¦¶Ô¡£¸üÎȶ¨µÄ´«?Ê䣺ÊÓÆµ²¥·Å»á¸ü¼ÓÁ÷³©£¬¿¨¶Ù¡¢¶ªÖ¡µÄÇé¿ö´ó´ó¼õÉÙ£¬Óû§ÌåÑéµÃµ½ÖʵķÉÔ¾¡£
¸üÁé»îµÄ²¿Êð£ºNginxµÄÇ¿´ó¹¦ÄÜʹµÃ¹¹½¨¸´ÔÓµÄÁ÷ýÌåϵͳ±ä?µÃ¸ü¼ÓÈÝÒ×£¬´Ó¼òµ¥µÄÊÓÆµ·Ö·¢µ½¸´ÔÓµÄCDN¼Ü¹¹£¬¶¼ÄÜÓÎÈÐÓÐÓà¡£
Nginx100ÊÓÆµ£¬´ú?±í×ÅÒ»ÖÖ¶Ô¼«ÖÂÊÓÆµÁ÷ÌåÑéµÄ×·Çó£¬Ò²ÊÇÒ»ÖÖ¶ÔNginxÇ¿´ó¼¼ÊõÄÜÁ¦µÄ?ÈϿɡ£Ëü²»½ö½öÊÇ·þÎñÆ÷Èí¼þ£¬¸üÊÇÒ»ÖÖÄܹ»Çý¶¯ÏÖ´úÊÓÆµÄÚÈÝ´«?Êä¸ïÃüµÄÇ¿´óÁ¦Á¿¡£ÔÚ½ÓÏÂÀ´µÄpart2ÖУ¬ÎÒÃǽ«ÉîÈë̽ÌÖNginxÔÚʵ¼ÊÊÓÆµ³¡¾°ÖеÄÓ¦Óã¬ÒÔ¼°ÈçºÎͨ¹ýÅäÖÃÓÅ»¯£¬½øÒ»²½ÊÍ·ÅNginxÔÚÊÓÆµ´«ÊäÖеġ°°Ù±¶¡±ÄÜÁ¿¡£
Nginx100ÊÓÆµ£ºÊµÕ½ÑÝÁ·£¬½âËø¸ßÐÔÄÜÊÓÆµÁ÷µÄÖÕ¼«°ÂÃØ
SSL/TLS¼ÓÃÜ£ºÎªÁ˱£Ö¤ÊÓÆµ´«ÊäµÄ°²È«ÐÔºÍÓû§Òþ˽£¬SSL/TLS¼ÓÃÜÊDZز»¿ÉÉٵġ£NginxÖ§³Ö¸ßЧµÄSSL/TLSÖ¤ÊéÅäÖúͼÓÃÜÁ¬½Ó´¦Àí¡£ºÏÀíÅäÖÃssl_certificate¡¢ssl_certificate_keyµÈ²ÎÊý£¬²¢ÆôÓÃssl_session_cacheµÈ»úÖÆ£¬¿ÉÒÔÈ·±£¼ÓÃÜÁ¬½ÓµÄ¸ßЧÐÔ¡£
¼à¿ØÓëÈÕÖ¾·ÖÎö£ºÎªÁ˼°Ê±·¢Ïֺͽâ¾öÐÔÄÜÆ¿¾±£¬¶ÔNginxµÄÔËÐÐ״̬½øÐÐ¼à¿ØºÍÈÕÖ¾·ÖÎöÖÁ¹ØÖØÒª¡£NginxµÄ?stub_statusÄ£¿é¿ÉÒÔÌṩʵʱµÄÁ¬½ÓÊý¡¢ÇëÇóÊýµÈ?¹Ø¼üÖ¸±ê¡£¶ÔNginxµÄ·ÃÎÊÈÕÖ¾½øÐзÖÎö£¬¿ÉÒÔÁ˽âÓû§·ÃÎÊģʽ¡¢Ê¶±ðÂýÇëÇ󣬲¢¾Ý´Ë?½øÒ»²½ÓÅ»¯ÅäÖá£
¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±²¢·ÇÒ»¸öÐé»ÃµÄ¸ÅÄ¶øÊÇͨ¹ý¶ÔNginxºËÐļܹ¹µÄÉî¿ÌÀí½â£¬½áºÏϸÖÂÈë΢µÄÅäÖõ÷ÓÅ£¬ÒÔ¼°ÔÚÊÓÆµÁ÷ýÌåÁìÓòרÏîÓÅ»¯¼¼ÇɵÄÓ¦Óã¬ÍêÈ«¿ÉÒÔʵÏÖµÄ׿ԽĿ±ê¡£´ÓÖ±²¥µ½µã²¥£¬´ÓCDNµ½APIÍø¹Ø£¬NginxµÄÇ¿´óÉíÓ°¹á´©ÓÚÕû¸öÁ÷ýÌå·þÎñµÄÉúÃüÖÜÆÚ¡£
ÕÆÎÕNginxµÄ¾«Ë裬Äú½«Äܹ»¹¹½¨³öÎȶ¨¡¢¸ßЧ¡¢¿ÉÀ©Õ¹µÄÊÓÆµÁ÷ýÌåÆ½Ì¨£¬ÎªÓû§ÌṩÎÞÓëÂױȵĹۿ´ÌåÑ飬տÕý½âËøÄúµÄÁ÷ýÌåмÍÔª¡£
HTTP/2£ºÆôÓÃHTTP/2ÐÒé¿ÉÒÔÏÔÖøÌáÉýÊÓÆµ´«ÊäЧÂÊ¡£HTTP/2Ö§³Ö?¶à·¸´Óã¨Multiplexing£©£¬ÔÊÐíÔÚÒ»¸öTCPÁ¬½ÓÉÏͬʱ´«Êä¶à¸öHTTPÇëÇóºÍÏìÓ¦£¬±ÜÃâÁËHTTP/1.1µÄ¶ÓÍ·×èÈûÎÊÌâ¡£Õâ¶ÔÓڷֶδ«ÊäµÄHLS/DASHÓÈÎªÖØÒª¡£
ÔÚNginxÅäÖÃÖУ¬Ö»ÐèÔÚlistenÖ¸ÁîÖÐÌí¼Óhttp2²ÎÊý¼´¿ÉÆôÓá£QUIC£¨HTTP/3£©£º¾¡¹ÜNginx¶ÔQUICµÄÔÉúÖ§³ÖÈÔÔÚ·¢Õ¹ÖУ¬µ«Í¨¹ýµÚÈý·½Ä£¿é»òδÀ´µÄ¹Ù·½¸üУ¬QUICÐÒéÓÐÍû³ÉΪÏÂÒ»´úÊÓÆµ´«ÊäµÄÀûÆ÷¡£
QUIC»ùÓÚUDP£¬½øÒ»²½½â¾öÁËTCPµÄ¶ÓÍ·×èÈûÎÊÌ⣬²¢ÇÒÄÚÖÃÁËTLS¼ÓÃÜ£¬ÌṩÁ˸üµÍµÄÁ¬½ÓÑӳٺ͸ü¸ßµÄ´«ÊäЧÂÊ¡£
¶ÔÓÚÊÓÆµÁ÷£¬¿ÉÒÔÊʵ±ÑÓ³¤´ËÖµ£¬±ÜÃâÆµ·±½¨Á¢Á¬½Ó´ø?À´µÄ¿ªÏú¡£ÀýÈçkeepalive_timeout75s;¡£keepalive_requests:ÉèÖÃÔÚÒ»¸ö³¤Á¬½ÓÉÏÔÊÐí´¦ÀíµÄ×î´óÇëÇóÊý¡£¶ÔÓÚÊÓÆµÁ÷£¬Í¨³£Ò»¸ö³¤Á¬½ÓÖ»·þÎñÓÚÒ»¸ö»òÉÙÊý¼¸¸öÊÓÆµÆ¬¶Î£¬Òò´Ë¿ÉÒÔÉèÖÃÒ»¸ö½ÏµÍµÄÖµ£¬ÀýÈçkeepalive_requests100;£¬ÒÔ±ÜÃâµ¥¸öÁ¬½Ó³¤Ê±¼äÕ¼ÓÃ×ÊÔ´¡£
TCPNODELAYÓëTCPCORK£ºtcp_nodelayon;:½ûÓÃNagleËã·¨£¬¼´ÔÊÐíСÊý¾Ý°üÁ¢¼´·¢ËÍ£¬¼õÉÙÑÓ³Ù£¬Õâ¶ÔÓÚÐèҪʵʱÏìÓ¦µÄÊÓÆµÁ÷·Ç³£ÓÐÀû¡£tcp_nopushon;(Linux):ÆôÓÃTCP_CORKÑ¡Ïî¡£
µ±ÆôÓÃʱ£¬Nginx»á³¢ÊԺϲ¢¶à¸öС¿éÊý¾Ý£¬È»ºóÔÚ·¢ËÍǰһ´ÎÐÔ·¢ËÍ£¬Õâ¿ÉÒÔ¼õÉÙÍøÂç´«ÊäÖеİüÍ·¿ªÏú£¬Ìá¸ß´«ÊäЧÂÊ£¬ÓÈÆäÊÊÓÃÓÚ´«Êä´óÎļþ¡£
sendfileon;£ºÆôÓÃsendfileϵͳµ÷Óá£ÕâÊÇÒ»¸öLinuxÄں˹¦ÄÜ£¬¿ÉÒÔÖ±½Ó½«Îļþ´ÓÒ»¸öÎļþÃèÊö·û¸´ÖƵ½ÁíÒ»¸öÎļþÃèÊö·û£¬ÈƹýÁËÓû§¿Õ¼ä£¬´ó´óÌá¸ßÁËÎļþ´«ÊäЧÂÊ£¬ÓÈÆäÊʺϴóÎļþµÄ´«Êä¡£tcp_nopushon;£ºµ±·¢ËÍÏìӦͷʱ£¬Èç¹û¿ÉÄÜ£¬·¢ËÍËùÓеÈ?´ý·¢Ë͵ÄÊý¾Ý£¬¶ø²»ÊǵÈ?´ý¸ü¶àµÄÊý¾Ý¡£
tcp_nodelayon;£º½ûÓÃNagleËã·¨£¬¼´Ê¹ÔÚ·¢ËÍÉÙÁ¿Êý¾ÝʱҲÁ¢¼´·¢ËÍ£¬¼õÉÙÑÓ³Ù¡£
ÕâÈý¸öÑ¡Ïî½áºÏʹÓ㬿ÉÒÔÏÔÖøÌáÉýNginxÏò¿Í»§¶Ë·¢ËÍÊÓÆµÊý¾ÝµÄËٶȺÍЧÂÊ¡£
bufferºÍcache£º¼õÉÙI/OѹÁ¦£¬¼ÓËÙ·ÃÎÊ
NginxÌṩÁ˶àÖÖ»º´æ»úÖÆ£¬¿ÉÒÔÓÐЧ¼õÉÙ¶Ôºó¶Ë´æ?´¢µÄÖ±½Ó·ÃÎÊ£¬ÌáÉýÏìÓ¦ËÙ¶È¡£
proxybuffersizeºÍproxy_buffers£ºµ±?Nginx×÷Ϊ·´Ïò´úÀí´¦?ÀíÊÓÆµÁ÷ʱ£¬ÕâЩ²ÎÊý¾ö¶¨ÁËÓÃÓÚ»º³å´úÀíÏìÓ¦µÄ»º³åÇø´óСºÍÊýÁ¿¡£ºÏÀíÅäÖÿÉÒÔ¼õÉÙ´úÀíµÄI/O²Ù×÷£¬ÌáÉý´¦ÀíËÙ¶È¡£openfilecacheºÍopenfilecache_valid£º»º´æ´ò¿ªµÄÎļþÃèÊö·ûºÍÎļþÔªÊý¾Ý¡£
µÚÒ»Õ£ºNginxµÄÊÓÆµÓÅ»¯»ùʯ£ºÀí½âºËÐÄÓë»ù´¡ÅäÖÃ
ҪʵÏÖNginxµÄÊÓÆµÓÅ»¯£¬Ê×ÏÈÐèÒª¶ÔÆäºËÐÄÄÜÁ¦ºÍ»ù´¡ÅäÖÃÓÐÉî¿ÌµÄÀí½â¡£NginxÖ®ËùÒÔÄÜÔڸ߲¢·¢³¡?¾°Ï±íÏÖ³öÉ«£¬Àë²»¿ªÆäʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄI/OÄ£ÐÍ¡£ÕâÒâζ×ÅNginx¿ÉÒÔÓýÏÉٵĽø³ÌºÍÏ̴߳¦?Àí´óÁ¿µÄ²¢·¢Á¬½Ó£¬¼«´óµØÌá¸ßÁË×ÊÔ´ÀûÓÃÂʺÍÏìÓ¦ËÙ¶È£¬Õâ¶ÔÓÚÐèÒª³ÖÐø¡¢Îȶ¨´«Êä´óÁ¿Êý¾ÝµÄÊÓÆµÁ÷À´ËµÖÁ¹ØÖØÒª¡£
1.1¾²Ì¬Îļþ·þÎñµÄЧÂÊÓÅ»¯£ºËäÈ»ÊÓÆµÁ÷ýÌåÍùÍùÉæ¼°¶¯Ì¬ÄÚÈݵÄÉú³ÉºÍ´¦Àí£¬µ«Æä×îÖյĴ«ÊäÔØÌåÈÔÈ»ÊǾ²Ì¬Îļþ£¨ÈçHLSµÄ?.tsÇÐÆ¬£¬DASHµÄ.mp4»ò.m4sÎļþ£©¡£NginxÔÚ¾²Ì¬Îļþ·þÎñ·½ÃæµÄÄÜÁ¦ÎãÓ¹ÖÃÒÉ¡£
aioÖ¸Áî:¶ÔÓÚʹÓÃNginxPlus»òÔÚÖ§³ÖAIO(AsynchronousI/O)µÄ²Ù×÷ϵͳÉÏ£¬ÆôÓÃaioon;¿ÉÒÔ½øÒ»²½ÌáÉý´óÎļþI/OµÄÐÔÄÜ£¬ÓÈÆäÊÇÔÚ´¦Àí´ó?Á¿Ð¡Îļþ£¨ÈçHLSµÄtsÇÐÆ¬£©Ê±£¬¿ÉÒÔÓÐЧ¼õÉÙI/O×èÈû¡£
openfilecacheÖ¸Áî:»º´æ´ò¿ªµÄ?ÎļþÃèÊö·ûºÍÔªÊý¾Ý£¬±ÜÃâÁËÆµ·±µØ´ò¿ªºÍ¹Ø±ÕÎļþ£¬Ìá¸ßÁËÎļþ·ÃÎʵÄËÙ¶È¡£open_file_cachemax=1000inactive=20s;µÈÅäÖÿÉÒÔ¸ù¾Ýʵ¼ÊÇé¿ö½øÐе÷Õû¡£
DASH£ºÀàËÆHLS£¬DASHʹÓÃMPD(MediaPresentationDescription)ÎļþÀ´ÃèÊöÊÓÆµ·Ö¶Î£¬²¢Ö§³Ö¸ü¹ã·ºµÄ±à?Âë¸ñʽ¡£NginxͬÑù¿ÉÒÔ×÷ΪDASHÊÓÆµ·Ö¶ÎµÄ·þÎñÆ÷¡£
ÅäÖÃʾÀý£¨HLSʾÀý£©£º¼ÙÉèÄãÒѾͨ¹ýffmpeg½«ÊÓÆµ×ª»»ÎªHLS¸ñʽ£¬²¢½«Îļþ·ÅÖÃÔÚNginxµÄÒ»¸öÌØ¶¨Ä¿Â¼Ï¡£
location/hls/{types{application/vnd.apple.mpegurlm3u8;video/mp2tts;}root/path/to/your/hls/files;add_headerCache-Control"no-cache";#Oradjustcachingasneededadd_headerAccess-Control-Allow-Origin*;#ForCORS}
ÔÙÕߣ¬Nginx¶ÔTCP/IPÐÒéÕ»µÄ?Éî¶ÈÓÅ»¯Ò²ÊÇÆäÊÓÆµ´«ÊäÄÜÁ¦µÄºËÐÄ¡£×îа汾ÔÚTCPÎÕÊÖ¡¢ÓµÈû¿ØÖÆ¡¢ÒÔ¼°³¤Á¬½ÓµÄά³Ö·½Ãæ½øÐÐÁËÖî¶à¸Ä½ø¡£ÀýÈ磬¶ÔTCPKeep-alive»úÖÆµÄ¾«Ï¸µ÷ÓÅ£¬Äܹ»¸üÓÐЧµØ¹ÜÀí¿Í»§¶ËÁ¬½Ó£¬¼õÉÙ²»±ØÒªµÄÖØÁ¬¿ªÏú£»ÔÚÓµÈû¿ØÖÆ·½Ã棬NginxÄܹ»¸ù¾ÝÍøÂç×´¿ö¶¯Ì¬µ÷Õû·¢ËÍËÙÂÊ£¬±ÜÃâÍøÂçÓµÈû¶ÔÊÓÆµÁ÷Ôì³ÉµÄ?³å»÷£¬´Ó¶ø±£Ö¤Á˲¥·ÅµÄÁ¬ÐøÐÔ¡£
RTMP¡¢HLS¡¢DASH£ºNginxÉú̬ϵÄÖ÷Á÷ÊÓÆµÐÒéÖ§³Ö
NginxÖ®ËùÒÔÄܳÉΪÁ÷ýÌåÁìÓòÎÞ¿ÉÕùÒéµÄÍõÕߣ¬ºÜ´ó³Ì¶ÈÉϹ鹦ÓÚÆä¶ÔÖ÷Á÷ÊÓÆµ´«ÊäÐÒéµÄÇ¿´óÖ§³Ö¡£
RTMP(Real-TimeMessagingProtocol)£º×÷ΪÔçÆÚÖ±²¥ÁìÓòµÄÊÂʵ±ê×¼£¬RTMPÐÒ鯾½èÆäµÍÑÓ³ÙµÄÌØÐÔ£¬ÔÚʵʱ»¥¶¯ÐÔÇ¿µÄ³¡¾°ÏÂÈÔȻռÓÐÖØÒªµØÎ»¡£Nginxͨ¹ýLoadBalancer¡¢ReverseProxyµÈ¹¦ÄÜ£¬¿ÉÒÔÇáËɵسÐÔØRTMPÁ÷ýÌå·þÎñÆ÷£¬ÊµÏÖÖ±²¥Ô´µÄ½ÓÈë¡¢·Ö·¢ÒÔ¼°¶à·¸´Óá£
ͨ¹ýNginx-RTMP-ModuleµÈµÚÈý·½Ä£¿é£¬NginxÄܹ»¸ßЧµØ´¦ÀíRTMPÍÆÁ÷ºÍÀÁ÷ÇëÇó£¬ÎªÖ±²¥Æ½Ì¨ÌṩÁËÇ¿´óµÄºó¶ËÖ§³Å¡£
NginxµÄÁíÒ»¸öÏÔÖøÌØµãÊÇÆä¸ß¶ÈÄ£¿é»¯µÄÉè¼Æ¡£ÕâÒâζ×ÅÄã¿ÉÒÔ¸ù¾Ý×Ô¼ºµÄ¾ßÌåÐèÇó£¬Áé»îµØÑ¡ÔñºÍ¼ÓÔØ¸÷ÖÖ¹¦ÄÜÄ£¿é£¬ÉõÖÁ¿ÉÒÔ×ÔÐпª·¢¶¨ÖÆÄ£¿é¡£
RTMPÄ£¿é£º¶ÔÓÚÁ÷ýÌåÖ±²¥¶øÑÔ£¬RTMP(Real-TimeMessagingProtocol)ÊÇÒ»¸ö·Ç³£ÖØÒªµÄÐÒ顣ͨ¹ý¼ÓÔØnginx-rtmp-module£¬Nginx¿ÉÒÔÖ±½Ó×÷ΪRTMP·þÎñÆ÷£¬½ÓÊÕÖ±²¥?ÍÆÁ÷£¬²¢½«Ö±²¥Á÷·Ö·¢¸ø¹Û¿´Õߣ¬ÊµÏÖ¸ßЧµÄÖ±²¥·þÎñ¡£
HLS/DASHÖ§³Ö£ºHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)ÊÇĿǰÖ÷Á÷µÄÊÓÆµµã²¥ºÍÖ±²¥½â¾ö·½°¸£¬ËüÃǽ«ÊÓÆµ·Ö¸î³ÉСÎļþ£¬²¢Í¨¹ýHTTP½øÐд«Ê䣬±ãÓÚCDN·Ö·¢ºÍ×ÔÊÊÓ¦ÂëÂʲ¥·Å¡£
Nginx¿ÉÒÔͨ¹ýÅäºÏÏà¹ØµÄÄ£¿é»ò¹¤¾ß£¬ÇáËÉʵÏÖHLS/DASHÊÓÆµÁ÷µÄתÂë¡¢·â×°ºÍ·Ö·¢¡£µÚÈý·½Ä£¿é£ºÉçÇø»¹ÌṩÁË´óÁ¿ÓÅÐãµÄµÚÈý·½Ä£¿é£¬ÀýÈçÓÃÓÚÊÓÆµ×ªÂë¡¢ÄÚÈݼÓÃÜ¡¢DRM(Êý×Ö°æÈ¨¹ÜÀí)¡¢¹ã¸æ²åÈëµÈ¹¦ÄܵÄÄ£¿é£¬ÕâЩģ¿é¿ÉÒÔ¼«´óµØÀ©Õ¹NginxµÄÄÜÁ¦£¬Âú×ã¸ü¸´ÔÓµÄÊÓÆµÒµÎñÐèÇó¡£
¶ÔÓÚÊÓÆµµã²¥£¬NginxµÄÔÉúHTTP¹¦Äܼ´¿ÉʤÈΡ£Ö»Ð轫ÊÓÆµÎļþ·ÅÔÚNginxµÄrootĿ¼Ï£¬²¢È·±£sendfileºÍtcp_nopushµÈÖ¸Áî±»ÆôÓãº
http{sendfileon;tcp_nopushon;tcp_nodelayon;keepalive_timeout65;server{listen80;server_nameyour_domain.com;root/var/www/html/videos;#´æ·ÅÊÓÆµÎļþµÄĿ¼location/{autoindexon;#¿ÉÑ¡£¬ÓÃÓÚչʾÎļþÁбí}#Õë¶ÔÌØ¶¨ÊÓÆµ¸ñʽµÄÓÅ»¯(¿ÉÑ¡)location~*\.(mp4|mov|avi)${add_headerCache-Controlpublic;add_headerExpires1y;}}}
ÕâÑù£¬Óû§¾Í¿ÉÒÔͨ¹ýhttp://your_domain.com/your_video.mp4À´·ÃÎÊÊÓÆµ¡£
ËäÈ»ÊÓÆµ±¾ÉíÄÑÒÔѹËõ£¬µ«ÊÓÆµ²¥·ÅÁбí?£¨.m3u8,.mpd£©ºÍ×ÖÄ»ÎļþµÈ¸¨Öú×ÊÔ´£¬È´¿ÉÒÔÊÜÒæÓÚGzip»òBrotliѹËõ¡£
http{gzipon;gzip_typestext/plaintext/cssapplication/jsonapplication/javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascriptimage/svg+xml;gzip_comp_level6;gzip_min_length1024;#Èç¹û°²×°ÁËBrotliÄ£¿é£¬¿ÉÒÔ¿¼ÂÇʹÓÃBrotli#brotlion;#brotli_typestext/plaintext/cssapplication/jsonapplication/javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascriptimage/svg+xml;#brotli_comp_level4;#brotli_min_length1024;#...ÆäËûÅäÖÃ...}gzipon;:ÆôÓÃGzipѹËõ¡£
ËÙÂÊÏÞÖÆ£ºÊ¹ÓÃlimit_reqÄ£¿éÏÞÖÆÀ´×ÔͬһIPµØÖ·µÄÇëÇóËÙÂÊ£¬ÓÐЧ·ÀÓùDDoS¹¥»÷¡£HTTPBasicAuthentication/JWTÈÏÖ¤£º¶ÔÓÚÐèÒª·ÃÎÊ¿ØÖƵÄÊÓÆµÄÚÈÝ£¬¿ÉÒÔ¼¯³ÉÈÏÖ¤»úÖÆ¡£Referer¼ì²é£ºÍ¨¹ývalid_referersÖ¸ÁÏÞÖÆÖ»ÓÐÀ´×ÔÌØ¶¨ÓòÃûµÄÇëÇó²ÅÄÜ·ÃÎÊÊÓÆµ×ÊÔ´£¬·ÀÖ¹ÄÚÈݱ»µÁÁ´¡£
IP°×Ãûµ¥/ºÚÃûµ¥£º½øÒ»²½¾«Ï¸»¯·ÃÎÊ¿ØÖÆ¡£µ÷ÓŽ¨Ò飺°²È«ÓëÐÔÄÜÖ®¼äÐèҪȨºâ¡£¹ýÓÚÑϸñµÄ°²È«²ßÂÔ¿ÉÄÜ»áÓ°ÏìÕý³£Óû§µÄ·ÃÎÊÌåÑ飬ÐèÒª¸ù¾Ýʵ¼ÊÒµÎñ³¡¾°½øÐÐÆ½ºâ¡£
Nginx100%ÊÓÆµÁ÷Á¿£ºÒýÇæ¸ïУ¬Á÷³©ÌåÑéµÄ»ùʯ
ÔÚÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪ¹µÍ¨¡¢ÓéÀÖ¡¢Ñ§Ï°µÄÖ÷Á÷ÔØÌå¡£´Ó¸ßÇåµçÓ°µ½ÊµÊ±Ö±²¥£¬Óû§¶ÔÊÓÆµÌåÑéµÄÒªÇóÓëÈÕ¾ãÔö£¬Á÷³©¡¢Îȶ¨¡¢µÍÑÓ³Ù³ÉΪÁ˺âÁ¿·þÎñÖÊÁ¿µÄ¹Ø¼üÖ¸±ê¡£¶øÖ§³ÅÕâÒ»Çеģ¬ÍùÍùÊÇÒ»¸öÇ¿´ó¶ø¸ßЧµÄWeb·þÎñÆ÷¡£Nginx£¬×÷Ϊҵ½çÁìÏȵÄ?¿ªÔ´¸ßÐÔÄÜWeb·þÎñÆ÷£¬ÆäÔÚ´¦Àí¸ß²¢·¢Á¬½ÓºÍ¾²Ì¬Îļþ·þÎñ·½ÃæµÄ׿Խ±íÏÖÔçÒÑÉîÈëÈËÐÄ¡£
Ëæ×ÅÊÓÆµÁ÷Á¿µÄ±¬Õ¨Ê½Ôö³¤£¬´«Í³µÄNginxÅäÖú͹¦ÄÜÊÇ·ñ»¹ÄÜÂú×ã¡°100%ÊÓÆµÁ÷Á¿¡±µÄÑÏ¿ÁÐèÇó£¿NginxµÄ×îа汾£¬ÕýÒÔÆäµß¸²ÐԵĸïУ¬¸ø³ö?ÁËÏìÁÁµÄ´ð°¸¡£
NginxµÄÐÔÄÜÔÙÇ¿£¬Ò²Àë²»¿ªµ×²ãÓ²¼þºÍÍøÂçµÄÖ§³Ö¡£
Ó²¼þ£º¸ßÐÔÄÜCPU¡¢´óÈÝÁ¿ÄÚ´æ¡¢¸ßËÙSSDÓ²ÅÌ¡¢ÍòÕ×Íø¿¨£¬¶¼ÊÇÌáÉýÊÓÆµÁ÷ýÌåÐÔÄܵĻù´¡¡£ÍøÂ磺µÍÑÓ³Ù¡¢¸ß´ø¿íµÄÍøÂç»·¾³ÊÇÊÓÆµÁ÷³©²¥?·ÅµÄ¹Ø¼ü¡£È·±£·þÎñÆ÷µÄÍøÂçÁ¬½ÓÎȶ¨ÇÒËÙ¶È´ï±ê¡£²Ù×÷ϵͳµ÷ÓÅ£º¶ÔLinuxÄں˲ÎÊý½øÐÐÊʵ±µ÷Õû£¬ÀýÈçÔö´óÎļþ¾ä±úÊý(ulimit-n)¡¢µ÷ÕûTCP/IP²ÎÊýµÈ£¬Ò²ÄÜΪNginxµÄ¸ßÐÔÄÜÔËÐдòϼáʵ»ù´¡¡£
ÔÚµ±½ñÕâ¸öÄÚÈÝΪÍõµÄʱ´ú£¬ÊÓÆµÒÑÈ»³ÉΪÐÅÏ¢´«µÝºÍÓéÀÖÏû·ÑµÄÖ÷Á÷ÐÎʽ¡£´Ó?¶ÌÊÓÆµµÄË鯬»¯ÓéÀÖ£¬µ½¸ßÇ峤ƬµÄ³Á½þʽÌåÑ飬Óû§¶ÔÊÓÆµ²¥·ÅµÄÁ÷³©¶ÈºÍÎȶ¨ÐÔÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£Ò»µ©³öÏÖ¼ÓÔØ»ºÂý¡¢¿¨¶Ù¡¢ÉõÖÁ²¥·Åʧ°Ü£¬Óû§µÄÄÍÐıã»áѸËÙÏûÄ¥£¬½ø¶øÑ¡ÔñÀ뿪¡£×÷Ϊ¸ßÐÔÄܵÄWeb·þÎñÆ÷£¬NginxÒÔÆä׿ԽµÄ²¢·¢´¦ÀíÄÜÁ¦ºÍÁé»îµÄÅäÖÃÑ¡Ï³ÉΪÁËÊÓÆµÓÅ»¯ÁìÓò²»?¿É»òȱµÄ?ÀûÆ÷¡£
½ñÌ죬ÎÒÃǾÍÀ´Ò»ÆðÉîÈë̽Ë÷NginxÈçºÎʵÏÖ100%µÄÊÓÆµÓÅ»¯£¬ÎªÄúµÄƽ̨עÈëÇ¿¾¢µÄ¶¯Á¦£¬ÈÃÿһ´ÎÊÓÆµ²¥·Å¶¼³É?Ϊһ´ÎÓäÔõÄÏíÊÜ¡£
Ò»¡¢NginxµÄºËÐÄÓÅÊÆ£ºÎªºÎËüÊÇÊÓÆµÓÅ»¯µÄ²»¶þ֮ѡ£¿
ÔÚÉîÈëNginxµÄ¾ßÌåÓÅ»¯¼¼ÇÉ֮ǰ£¬ÎÒÃDz»·ÁÏÈÀí½âÒ»ÏÂËüΪºÎÔÚÊÓÆµÁìÓòÈç´ËÊÜ»¶Ó¡£NginxµÄºËÐľºÕùÁ¦ÔÚÓÚÆäʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄ¼Ü¹¹¡£Ó봫ͳµÄÏß³ÌÄ£ÐͲ»Í¬£¬NginxʹÓÃÉÙÁ¿µÄ?½ø³ÌºÍʼþÑ»·À´´¦Àí´óÁ¿²¢·¢Á¬½Ó¡£ÕâÒâζ×Å£¬¼´Ê¹ÔÚÃæ¶Ôº£Á¿Óû§Í¬Ê±ÇëÇóÊÓÆµ×ÊԴʱ£¬NginxÒ²Äܱ£³Ö¼«µÍµÄ×ÊÔ´ÏûºÄºÍ¼«¸ßµÄÏìÓ¦ËÙ¶È¡£
ÔÙÕߣ¬¶ÔÏÖ´ú?Á÷ýÌåÐÒéµÄÖ§³ÖʹµÃNginxÄܹ»ÇáËÉÓ¦¶ÔHLS£¨HTTPLiveStreaming£©ºÍDASH£¨DynamicAdaptiveStreamingoverHTTP£©µÈÖ÷Á÷ÊÓÆµÁ÷ýÌåÐÒé¡£ÕâЩÐÒéÄܹ»¸ù¾ÝÓû§µÄÍøÂç×´¿ö¶¯Ì¬µ÷ÕûÊÓÆµÂëÂÊ£¬ÊµÏÖ×ÔÊÊÓ¦µÄÁ÷³©²¥·Å¡£
NginxÄܹ»¸ßЧµØ´¦ÀíÕâЩÐÒé²úÉúµÄº£Á¿Ð¡ÎļþÇëÇó£¨ÀýÈçHLSµÄts·ÖƬ£©£¬²¢¶ÔÆä½øÐÐÓÅ»¯£¬È·±£ÊÓÆµÁ÷µÄÁ¬ÐøÐÔºÍÎȶ¨ÐÔ¡£
NginxµÄ¸ß¶È¿ÉÀ©Õ¹ÐÔºÍÄ£¿é»¯Éè¼ÆÒ²ÎªÆäÊÓÆµÓÅ»¯ÌṩÁËÎÞÏÞ¿ÉÄÜ¡£Í¨¹ý·á¸»µÄµÚÈý·½Ä£¿é£¬Nginx¿ÉÒÔ¼¯³É¸÷Öָ߼¶¹¦ÄÜ£¬ÈçÊÓÆµ×ªÂë¡¢ÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©¼ÓËÙ¡¢°²È«·À»¤µÈ£¬¹¹½¨Ò»¸ö¹¦ÄÜÈ«Ãæ¡¢ÐÔÄÜ׿ԽµÄÊÓÆµÁ÷ýÌå½â¾ö·½°¸¡£
NginxÊÓÆµÓÅ»¯ºËÐIJßÂÔÒ»£º»º´æµÄÒÕÊõ¡ª¡ªÈÃÊÓÆµ¡°·É¡±ÆðÀ´
ҪʵÏÖ100%Á÷³©µÄÊÓÆµÌåÑ飬»º´æÊÇÈÆ²»¿ªµÄ»ùʯ¡£NginxµÄ»º´æ»úÖÆÖ÷ÒªÌåÏÖÔÚÒÔϼ¸¸ö·½Ã棺
HTTPÏìÓ¦»º´æ£¨ProxyCache£©£ºÕâÊÇNginx×î³£ÓõĻº´æ·½Ê½£¬ÓÃÓÚ»º´æºó¶Ë·þÎñÆ÷·µ»ØµÄHTTPÏìÓ¦¡£¶ÔÓڵ㲥ÊÓÆµ£¬¿ÉÒÔ½«ÊÓÆµÎļþ±¾Éí»òÆäË÷ÒýÎļþ»º´æµ½Nginx·þÎñÆ÷ÉÏ¡£µ±Óû§ÇëÇóÊÓÆµÊ±£¬Nginx»áÊ×Ïȼì²é»º´æÖÐÊÇ·ñ´æÔÚ¸ÃÊÓÆµ¡£
¡°Nginx100%ÊÓÆµÓÅ»¯¡±²¢·ÇÒ»¸ö¼òµ¥µÄÅäÖÃÏ¶øÊÇÒ»¸öº¸ÇÁË·þÎñÆ÷ÐÔÄܵ÷ÓÅ¡¢ÍøÂçÐÒéÉý¼¶¡¢ÄÚÈÝ·Ö·¢²ßÂÔÒÔ¼°°²È«±£ÕϵÄϵͳÐÔ¹¤³Ì¡£Í¨¹ýÉîÈëÀí½âNginxÇ¿´óµÄ»º´æ»úÖÆ¡¢¾«Ï¸»¯µÄÁ÷Á¿¿ØÖÆ¡¢¶ÔHTTP/2ºÍHTTP/3£¨QUIC£©µÄÖ§³Ö£¬ÒÔ¼°Óë±ßÔµ¼ÆËãµÄ½áºÏ£¬ÎÒÃÇ¿ÉÒÔ¹¹½¨³öÕæÕý¸ßЧ¡¢Îȶ¨¡¢µÍÑÓ³ÙµÄÊÓÆµÁ÷ýÌå·þÎñ¡£
Nginx²»½ö½öÊÇÒ»¸öWeb·þÎñÆ÷£¬¸üÊÇÇý¶¯Î´À´Á÷ýÌå¼¼Êõ·¢Õ¹µÄÖØÒªÒýÇæ£¬ËüÕýÔÚ°ïÖúÎÒÃÇ´òÆÆÍøÂç±ÚÀÝ£¬ÊµÏÖǰËùδÓеÄÁ÷³©¹ÛÓ°ÌåÑ飬ÈÃÿһ¸ö¾«²Ê˲¼ä£¬¶¼ÄÜ´¥´ïÓû§£¬²»ÁôÒź¶¡£
»º´æ¼ÓËÙ£ºNginx¿ÉÒÔ×÷ΪCDN±ßÔµ½ÚµãµÄ?»º´æ·þÎñÆ÷¡£µ±Óû§·ÃÎÊÊÓÆµÄÚÈÝʱ£¬ÇëÇóÊ×Ïȵ½´ïÀëÓû§×î½üµÄ±ßÔµ½Úµã¡£Èç¹û¸ÃÊÓÆµÄÚÈÝÒѾÔÚ±ßÔµ½ÚµãµÄNginx»º´æÖУ¬Nginx½«Ö±½Ó´Ó»º´æÌṩ·þÎñ£¬ÏìÓ¦Ëٶȼ«¿ì£¬¼¸ºõûÓÐÑÓ³Ù¡£¼´Ê¹»º´æÖÐûÓУ¬NginxÒ²»á´ÓÔ´Õ¾ÀÈ¡£¬²¢½«Æä»º´æÆðÀ´£¬¹©ºóÐøÓû§Ê¹Óá£
HTTP/2ºÍHTTP/3Ö§³Ö£ºNginx¶ÔHTTP/2ºÍHTTP/3ÐÒéµÄÖ§³Ö?£¬½øÒ»²½ÌáÉýÁËÊÓÆµ´«ÊäµÄЧÂÊ¡£HTTP/2ÒýÈëÁ˶à·¸´ÓúÍÍ·²¿Ñ¹Ëõ£¬¼õÉÙÁËÁ¬½Ó¿ªÏú£»¶øHTTP/3Ôò»ùÓÚQUICÐÒ飬½â¾öÁËTCPµÄ¶ÓÍ·×èÈûÎÊÌ⣬¶ÔÓÚÊÓÆµÁ÷ÕâÖÖ¶ÔÑÓ³ÙÃô¸ÐµÄÓ¦ÓÃÓÈÆäÓÐÀû¡£
¶¯Ì¬ÄÚÈݼÓËÙ£º¼´Ê¹ÊǶ¯Ì¬Éú³ÉµÄÄÚÈÝ£¬NginxÒ²¿ÉÒÔͨ¹ý¸ßЧµÄÁ¬½Ó¹ÜÀíºÍ·´Ïò´úÀíÄÜÁ¦£¬½«Æä¿ìËٵش«?µÝ¸øÓû§¡£
ͨ¹ýÔÚÈ«Çò¸÷µØ²¿Êð´ó?Á¿µÄNginx½Úµã£¬²¢ÅäºÏ¸ßЧµÄ·ÓɲßÂÔ£¬NginxÄܹ»½«ÊÓÆµÄÚÈÝ¡°ÍÆËÍ¡±µ½ÀëÓû§×î½üµÄµØ·½£¬¹¹½¨Ò»¸ö¸²¸ÇÈ«ÇòµÄÊÓÆµ·Ö·¢ÍøÂç¡£µ±NginxµÄÄÜÁ¦±»¡°100¡±±¶ÊÍ·Åʱ£¬ËüÒâζ×ÅÊýÒÔÍò¼ÆµÄ±ßÔµ½ÚµãÄܹ»ÒÔ¼«¸ßµÄЧÂÊ»º´æºÍ·Ö·¢º£Á¿ÊÓÆµÄÚÈÝ£¬ÈÃÊÀ½ç¸÷µØµÄÓû§¶¼ÄÜÏíÊܵ½ÈçË¿°ã˳»¬µÄ¹Û¿´ÌåÑ飬·Â·ðÊÓÆµÄÚÈݾ͡°×¡¡±ÔÚËûÃǼÒÃſڡ£
¶ÔÓÚÊÓÆµÁ÷ýÌåÕâÖÖÐèÒª³¤Ê±¼äά³ÖÁ¬½Ó²¢´«Êä´óÁ¿Êý¾ÝµÄ³¡¾°£¬NginxµÄÕâÒ»ÓÅÊÆÓÈΪ±¦¹ó£¬ËüÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬ÇáËÉÓ¦¶Ô°ÙÍò¼¶µÄ²¢·¢Á¬½Ó¡£ÕâÒâζ×Å£¬¼´Ê¹ÔÚÓû§¹Û¿´¸ß·åÆÚ£¬ÄúµÄ?ÊÓÆµ·þÎñÒ²Äܱ£³ÖÎȶ¨£¬²»»áÒòΪ·þÎñÆ÷¹ýÔØ¶øµ¼Ö¿¨¶Ù»ò±ÀÀ£¡£
ÇáÁ¿¼¶Óë¸ß²¢·¢ÄÜÁ¦£ºNginxµÄÉè¼ÆÕÜѧ¾ÍÊÇ¡°Ð¡ÇɶøÇ¿´ó¡±¡£Æä´úÂëÁ¿Ïà¶Ô½ÏÉÙ£¬ÄÚ´æÕ¼Óõͣ¬Æô¶¯Ëٶȿ졣ÔÚʵ¼Ê²¿ÊðÖУ¬Ò»¸öNginxʵÀý¾ÍÄÜÇáËÉ´¦ÀíÊýÍòÉõÖÁÊýÊ®ÍòµÄ²¢·¢Á¬½Ó£¬Õâ¶ÔÓÚ³Ð?ÔØ´ó¹æÄ£ÊÓÆµÆ½Ì¨ÖÁ¹ØÖØÒª¡£ÏëÏóһϣ¬Ò»¸öÈÈÃÅÖ±²¥¼äͬʱӿÈë³ÉǧÉÏÍòµÄ¹ÛÖÚ£¬NginxÄܹ»ÏñÒ»¸öѵÁ·ÓÐËØµÄÖ¸»Ó¹Ù£¬ÓÐÌõ²»ÎɵØÎªÃ¿Ò»Î»¹ÛÖÚ·Ö·¢ÊÓÆµÁ÷£¬È·±£ËûÃǶ¼ÄÜÏíÊܵ½ÎÞ·ìµÄ¹Û¿´ÌåÑé¡£
Ç¿´óµÄ·´Ïò´úÀíºÍ¸ºÔؾùºâ¹¦ÄÜ£ºÊÓÆµ·þÎñͨ³£ÐèÒª¶ą̀·þÎñÆ÷Ðͬ¹¤×÷£¬ÒÔ·Öµ£Ñ¹Á¦²¢ÌṩÈßÓà¡£Nginx×÷Ϊ·´Ïò´úÀí£¬¿ÉÒÔ½«Óû§µÄÇëÇóת·¢µ½ºó¶ËµÄ¶ą̀ÊÓÆµ·þÎñÆ÷£¬²¢¸ù¾ÝÔ¤ÉèµÄ²ßÂÔ£¨ÈçÂÖѯ¡¢¼ÓȨÂÖѯ¡¢IP¹þÏ£µÈ£©½øÐиºÔؾùºâ¡£ÕâÒâζ×Å£¬Óû§ÇëÇ󲻻ἯÖдòµ½Ä³Ò»Ì¨·þÎñÆ÷ÉÏ£¬¶øÊDZ»¾ùÔÈ·ÖÉ¢£¬¼«´óµØÌá¸ßÁËÕûÌåµÄÍÌÍÂÁ¿ºÍ¿ÉÓÃÐÔ¡£
HTTP/3ÊÇHTTPÐÒéµÄ×îÐÂÒ»´ú?£¬Ëü×îÏÔÖøµÄÌØµãÊDzÉÓÃÁËQUIC£¨QuickUDPInternetConnections£©×÷ΪÆä´«Êä²ãÐÒ飬ȡ´úÁËTCP¡£QUICÐÒé»ùÓÚUDP£¬´øÀ´ÁËÖî¶à¸ïÃüÐԵĸĽø£¬¶ÔÓÚÊÓÆµÁ÷ýÌå¶øÑÔ£¬ÆäÓÅÊÆÓÈΪͻ³ö¡£
½â¾öTCP¶ÓÍ·×èÈû(Head-of-LineBlocking)£ºÔÚHTTP/1.1ºÍHTTP/2ÖУ¬Èç¹ûÒ»¸öTCPÁ¬½ÓÉϵÄij¸öÊý¾Ý°ü¶ªÊ§£¬Õû¸öÁ¬½ÓÉϵÄËùÓÐÊý¾Ý´«Êä¶¼»áÊܵ½Ó°Ï죬ֱµ½¸ÃÊý¾Ý°ü±»ÖØ´«¡£¶øQUICÔÚÓ¦ÓòãʵÏÖÁ˿ɿ¿ÐÔ´«Ê䣬¼´Ê¹Ò»¸öÁ÷ÖеÄÊý¾Ý°ü?¶ªÊ§£¬Ò²²»»á×èÈûÆäËû¶ÀÁ¢Á÷µÄÊý¾Ý´«Êä¡£
ÕâÒâζ×Å£¬ÔÚÒ»¸öÊÓÆµÁ÷·ÖƬ´«Êä¹ý³ÌÖУ¬¼´Ê¹Ä³¸öÇÐÆ¬µÄÊý¾Ý°ü¶ªÊ§£¬ÆäËûÇÐÆ¬µÄÏÂÔØÒ²ÄܼÌÐø½øÐУ¬¼«´óµØÌá¸ßÁËÊÓÆµ²¥·ÅµÄÎȶ¨ÐÔ£¬ÓÈÆäÊÇÔÚ²»Îȶ¨µÄÍøÂç»·¾³Ï¡£¸ü¿ìµÄÁ¬½Ó½¨Á¢£ºQUICÐÒéÄܹ»ÔÚ0-RTT£¨0Round-TripTime£©»ò1-RTTµÄÑÓ³ÙÄÚ½¨Á¢Á¬½Ó£¬ÏÔÖø¿ìÓÚTCPµÄ3-wayhandshake£¨Í¨³£ÐèÒª2-3¸öRTT£©¡£
HTTP/2ºÍHTTP/3µÄÓ¦ÓãºËæ×ÅÍøÂç¼¼ÊõµÄ·¢Õ¹£¬HTTP/2ºÍHTTP/3ÐÒéµÄ³öÏÖΪÊÓÆµ´«Êä´øÀ´Á˸ïÃüÐԵĸĽø¡£HTTP/2ÒýÈëÁ˶à·¸´Óá¢Í·²¿Ñ¹Ëõ¡¢·þÎñÆ÷ÍÆË͵ÈÌØÐÔ£¬ÏÔÖø¼õÉÙÁËÍøÂçÑÓ³Ù£¬Ìá¸ßÁË´«ÊäЧÂÊ¡£HTTP/3¸üÊÇ»ùÓÚQUICÐÒ飬½â¾öÁËTCPÔÚ¶ª°ü³¡¾°ÏµĶӱß×èÈûÎÊÌ⣬½øÒ»²½ÌáÉýÁËÔÚ²»Îȶ¨ÍøÂç»·¾³ÏµÄÊÓÆµ²¥·ÅÌåÑé¡£
ÔÚNginxÖÐÆôÓÃHTTP/2»òHTTP/3£¬¿ÉÒÔÏÔÖøÌáÉýÊÓÆµ¼ÓÔØËٶȺͲ¥·ÅÁ÷³©¶È£¬ÓÈÆäÊÇÔÚÍøÂçÖÊÁ¿²»¼ÑµÄÇé¿öÏ¡£
Á÷³©µÄÊÓÆµ²¥·ÅÀë²»¿ªÇ¿´óµÄÐÔÄÜÖ§³Å¡£Nginx×îа汾ÔÚÄÚ´æ¹ÜÀíºÍ²¢·¢´¦Àí·½Ãæ½øÐÐÁËÉîÈëµÄÓÅ»¯£¬Îªº£Á¿²¢·¢ÊÓÆµÇëÇóÌṩÁËÇ¿´óµÄ±£ÕÏ¡£
¸ßЧµÄÄÚ´æ¹ÜÀí»úÖÆ£ºÊÓÆµÁ÷ýÌåÊý¾ÝÁ¿ÅӴ󣬶ԷþÎñÆ÷ÄÚ´æ×ÊÔ´µÄÐèÇ󼫸ߡ£NginxÔÚ×îа汾ÖнøÒ»²½¾«Á¶ÁËÆäÄÚ´æ¹ÜÀí²ßÂÔ£¬²É?Óøü¾«Ï¸»¯µÄÄÚ´æ·ÖÅäÓë»ØÊÕ»úÖÆ£¬ÓÐЧ±ÜÃâÄÚ´æ?й©£¬¼õÉÙÄÚ´æË鯬£¬´Ó¶øÌá¸ßÄÚ´æ?ÀûÓÃÂÊ¡£Õâ²»½ö½µµÍÁË·þÎñÆ÷µÄÔËÐгɱ¾£¬¸üÖØÒªµÄÊÇ£¬Îª³¤Ê±¼ä¡¢¸ß²¢·¢µÄÊÓÆµÁ÷´«ÊäÌṩÁËÎȶ¨¿É¿¿µÄ?×ÊÔ´±£ÕÏ¡£
Í»ÆÆÐԵIJ¢·¢´¦ÀíÄÜÁ¦£ºNginxÒ»Ö±ÒÔÆä׿ԽµÄ²¢·¢´¦ÀíÄÜÁ¦Öø³Æ£¬¶ø×îа汾¸üÊǽ«ÕâÒ»ÓÅÊÆ·¢»Óµ½Á˼«Ö¡£Í¨¹ýʼþÇý¶¯µÄÒì²½·Ç×èÈûI/OÄ£ÐÍ£¬NginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄͬʱ´¦Àí³ÉǧÉÏÍòµÄ²¢·¢Á¬½Ó¡£ÕâÒâζ×Å£¬¼´Ê¹ÔÚ¹Û¿´¸ß·åÆÚ£¬Óû§Ò²ÄÜÏíÊܵ½Á÷³©µÄÊÓÆµ²¥·ÅÌåÑ飬¸æ±ð¿¨¶ÙºÍµÈ´ý¡£
¶ÔÓÚÖ±²¥Æ½Ì¨¡¢µã²¥·þÎñÉ̶øÑÔ£¬ÕâÒâζ×ÅÄܹ»¸üÓÐЧµØ´¥´ï¸ü¹ã·ºµÄÓû§ÈºÌ壬Ìṩ¸üÓÅÖʵķþÎñ¡£¾«Ï¸»¯»º´æ²ßÂÔ£ºÊÓÆµÄÚÈݵĻº´æÊÇÌáÉý²¥·ÅÁ÷³©¶ÈµÄ¹Ø¼ü¡£Nginx×îа汾ÌṩÁ˸ü¼Ó¾«Ï¸»¯µÄ»º´æ¿ØÖƲßÂÔ£¬¿ÉÒÔ¸ù¾ÝÊÓÆµÎļþµÄÌØÐÔ¡¢Óû§·ÃÎÊÆµÂʵÈÒòËØ£¬ÖÇÄܵص÷Õû»º´æ²ßÂÔ£¬×î´ó»¯»º´æÃüÖÐÂÊ¡£
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµ´«ÊäÁìÓòÍÑÓ±¶ø³ö£¬Ô´ÓÚÆä¶ÀÌØµÄÉè¼Æ¼Ü¹¹¡£Ó봫ͳµÄApache·þÎñÆ÷²»Í¬£¬Nginx²ÉÓõÄÊÇʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄ¹¤×÷ģʽ¡£ÕâÒâζ×ÅNginx¿ÉÒÔÓü«ÉٵĽø³Ì»òỊ̈߳¬Í¬Ê±´¦Àí³É?ǧÉÏÍò¸ö²¢·¢Á¬½Ó£¬¶øÎÞÐèΪÿ¸öÁ¬½Ó´´½¨¶ÀÁ¢µÄ½ø³Ì»òỊ̈߳¬´Ó¶ø¼«´óµØ½µµÍÁËϵͳ×ÊÔ´ÏûºÄ£¬ÏÔÖøÌáÉýÁË´¦ÀíÄÜÁ¦¡£
ʼþÇý¶¯Ä£ÐÍ£ºNginx½«I/O²Ù?×÷³éÏóΪʼþ£¬µ±Ò»¸öÁ¬½ÓÐèÒª½øÐÐI/O²Ù×÷ʱ£¬Nginx²»»á×èÈûµÈ´ý£¬¶øÊǽ«¸ÃÁ¬½Ó·ÅÈëʼþ¶ÓÁУ¬¼ÌÐø´¦ÀíÆäËûÁ¬½Ó¡£µ±I/O²Ù×÷Íê³Éʱ£¬ÏµÍ³»á֪ͨNginx£¬NginxÔÙ»ØÀ´´¦Àí¸ÃÁ¬½Ó¡£
ÕâÖÖģʽʹµÃNginxÄܹ»¸ßЧµØ´¦Àí´óÁ¿²¢·¢Á¬½Ó£¬ÓÈÆäÊÊÓÃÓÚÊÓÆµÁ÷ÕâÖÖÐèÒª³ÖÐø¡¢Îȶ¨Á¬½ÓµÄ³¡¾°¡£Òì²½·Ç×èÈûI/O£ºNginxʹÓÃepoll(Linux)»òkqueue(BSD)µÈ¸ßЧµÄI/O¶à·¸´ÓûúÖÆ£¬Äܹ»Í¬Ê±¼àÌý¶à¸öÍøÂçÃèÊö·û£¬¶øÎÞÐèΪÿ¸öÃèÊö·û´´½¨µ¥¶ÀµÄÏ̡߳£
»º´æÊÇÌáÉýÊÓÆµ·ÃÎÊËÙ¶È¡¢½µµÍÔ´·þÎñÆ÷ѹÁ¦µÄ¹Ø¼ü¡£NginxÌṩÁËÇ¿´óµÄ»º´æ¹¦ÄÜ£¬ºÏÀíÅäÖÃÄܹ»ÏÔÖøÌáÉýÓû§ÌåÑé¡£
proxycacheÓëfastcgicache£ºproxy_cache_path:¶¨Ò建´æÇøÓòµÄ·¾¶¡¢´óС¡¢ÎļþÊýµÈ²ÎÊý¡£ÀýÈ磺nginxproxy_cache_path/data/nginx/cachelevels=1:2keys_zone=my_cache:100mmax_size=10ginactive=60muse_temp_path=off;levels:Ö¸¶¨»º´æÄ¿Â¼µÄ²ã?¼¶£¬ÓÐÀûÓÚÌá¸ßĿ¼²éÕÒЧÂÊ¡£
keys_zone:¶¨Ò建´æ?µÄ¹²ÏíÄÚ´æÇøÓòÃû³ÆºÍ´ó?С¡£max_size:»º´æµÄ×î´óÈÝÁ¿¡£inactive:Ö¸¶¨»º´æÎļþÔڶ೤ʱ¼äÄÚδ±»?·ÃÎʺ󽫱»É¾³ý¡£use_temp_path=off:½¨ÒéÉèÖÃΪoff£¬±ÜÃâ²»±ØÒªµÄÁÙʱÎļþ¿½±´£¬Ìá¸ßÐÔÄÜ¡£
proxy_cache:ÆôÓÃÖ¸¶¨µÄ»º´æÇøÓò¡£proxy_cache_key:¶¨ÒåÓÃÓÚÉú³É»º´æ¼üµÄ±í´ïʽ£¬Í¨³£°üº¬ÇëÇóµÄ?URL¡¢HostµÈÐÅÏ¢¡£proxy_cache_valid:Ö¸¶¨²»Í¬HTTP״̬ÂëµÄ»º´æÊ±¼ä¡£ÀýÈ磬proxy_cache_valid20030210m;±íʾ½«×´Ì¬ÂëΪ200ºÍ302µÄÏìÓ¦»º´æ10·ÖÖÓ¡£
ÕâÖÖHTTPÁ÷ýÌåÐÒéµÄÓÅÊÆÔÚÓÚÆä½¡×³ÐÔºÍ¿çÆ½Ì¨¼æÈÝÐÔ£¬¶øNginxÔòÊÇʵÏÖÕâÒ»¸ßЧ·Ö·¢µÄÀíÏëÆ½Ì¨¡£
CDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩µÄºËÐĽڵ㣺CDNµÄ±¾ÖʾÍÊÇͨ¹ý½«ÄÚÈÝ·Ö²¼µ½È«Çò¸÷µØµÄ·þÎñÆ÷ÉÏ£¬ÈÃÓû§Äܹ»´ÓÀë×Ô¼º×î½üµÄ·þÎñÆ÷»ñÈ¡ÄÚÈÝ£¬´Ó¶ø½µµÍÑÓ³Ù?£¬Ìá¸ß·ÃÎÊËÙ¶È¡£NginxÒòÆä¸ßÐÔÄÜ¡¢µÍ×ÊÔ´ÏûºÄÒÔ¼°³öÉ«µÄ»º´æÄÜÁ¦£¬³£±»ÓÃ×÷CDN±ßÔµ½ÚµãµÄºËÐÄ·þÎñÆ÷¡£
ËüÄܹ»»º´æ´óÁ¿µÄÊÓÆµÄÚÈÝ£¬²¢ÔÚÓû§ÇëÇóʱ¿ìËÙÏìÓ¦¡£Í¨¹ýNginxµÄ¸ºÔؾùºâ¹¦ÄÜ£¬CDN³§ÉÌ»¹¿ÉÒÔÓÐЧµØ¹ÜÀíºÍµ÷¶È¸÷¸ö±ßÔµ½Úµã£¬È·±£·þÎñµÄÎȶ¨ºÍ¸ßЧ¡£
APIÍø¹ØÓ붯¾²·ÖÀ룺ÔÚ¸´ÔÓµÄÊÓÆµÆ½Ì¨¼Ü¹¹ÖУ¬Nginx»¹¿ÉÒÔ°çÑÝAPIÍø¹ØµÄ½ÇÉ«£¬Í³Ò»´¦ÀíÀ´×Ô¿Í»§¶ËµÄ¸÷ÖÖÇëÇ󣬲¢?½«ËüÃÇ·Óɵ½²»Í¬µÄ΢·þÎñ¡£Nginx»¹¿ÉÒÔʵÏÖ¶¯¾²·ÖÀ룬½«¾²Ì¬×ÊÔ´£¨ÈçÊÓÆµÎļþ¡¢Í¼Æ¬¡¢CSS¡¢JSÎļþ£©ÓÉNginxÖ±½Ó´¦Àí£¬¶ø½«¶¯Ì¬ÇëÇó£¨ÈçÓû§µÇ¼¡¢ÆÀÂÛ¡¢ËÑË÷µÈ£©×ª·¢¸øºó¶ËµÄÓ¦Ó÷þÎñÆ÷¡£
ÕâÖÖ·ÖÀë²ßÂÔÄܹ»³ä?·Ö·¢»ÓNginxÔÚ¾²Ì¬Îļþ´¦ÀíÉϵÄÓÅÊÆ£¬¼õÇáÓ¦Ó÷þÎñÆ÷µÄѹÁ¦£¬ÌáÉýÕûÌåϵͳµÄÏìÓ¦ËÙ¶È¡£
Nginx£ºÊÓÆµ´«ÊäµÄÐÔÄÜÍõÕߣ¬100%ЧÂʵĻùʯ
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÒѳÉΪÈËÃÇ»ñÈ¡ÐÅÏ¢¡¢ÓéÀÖÐÝÏеÄÖ÷Á÷·½Ê½¡£´Ó¶ÌÊÓÆµµÄÐËÆðµ½¸ßÇå¡¢4KÉõÖÁ8KÊÓÆµµÄÆÕ¼°£¬Óû§¶ÔÊÓÆµ²¥·ÅµÄÁ÷³©¶È¡¢¼ÓÔØËÙ¶ÈÌá³öÁËǰËùδÓеĸßÒªÇó¡£Ã¿Ò»´Î¿¨¶Ù¡¢Ã¿Ò»´Î?Âþ³¤µÄ¼ÓÔØ£¬¶¼¿ÉÄܵ¼ÖÂÓû§Á÷ʧ£¬Ëðº¦Æ·ÅÆÐÎÏó¡£ÔÚÕâÑùµÄ±³¾°Ï£¬Ò»¸öÇ¿´ó¡¢¸ßЧµÄ?ÊÓÆµ´«Êä½â¾ö·½°¸ÖÁ¹ØÖØÒª¡£
¶øNginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÕýÒÔÆä׿ԽµÄ?ÄÜÁ¦£¬³ÉΪÎÞÊýÁ÷ýÌåÆ½Ì¨ºÍÊÓÆµ·þÎñÉ̵ÄÊ×Ñ¡£¬ÎªÊµÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µÄÄ¿±êµì¶¨Á˼áʵ»ù´¡¡£
Ëæ×ÅÊÓÆµÏû·ÑµÄ±¬Õ¨Ê½Ôö³¤£¬´«Í³µÄÖÐÐÄ»¯ÄÚÈÝ·Ö·¢Ä£Ê½ÃæÁÙ¾Þ´óÌôÕ½¡£NginxÔÚ¹¹½¨¸ßЧ¡¢µÍÑÓ³ÙµÄCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩ÒÔ¼°Íƶ¯±ßÔµ¼ÆËãÓ¦Ó÷½Ã棬°çÑÝ×ÅÖÁ¹ØÖØÒªµÄ½ÇÉ«¡£
¹¹½¨¸ßÐÔÄÜCDN½Úµã£ºNginxƾ½èÆä³öÉ«µÄ?¸ºÔؾùºâÄÜÁ¦¡¢¸ßЧµÄ»º´æ»úÖÆºÍ¹ã·ºµÄÐÒéÖ§³Ö£¬Êǹ¹½¨CDN±ßÔµ½ÚµãµÄ²»¶þ֮ѡ¡£×îа汾?½øÒ»²½?ÔöÇ¿ÁËÆä×÷ΪCDN½ÚµãµÄÄÜÁ¦£¬Äܹ»¸ü¸ßЧµØ?»º´æº£Á¿ÊÓÆµÄÚÈÝ£¬²¢Í¨¹ýÖÇÄܵÄ·ÓɲßÂÔ£¬½«ÄÚÈÝ·Ö·¢µ½ÀëÓû§×î½üµÄ½Úµã¡£
Õâ´ó´óËõ¶ÌÁËÊÓÆµµÄ´«Êä·¾¶£¬½µµÍÁËÑÓ³Ù£¬ÏÔÖøÌáÉýÁËÓû§¹Û¿´¸ßÇåÊÓÆµµÄÌåÑ飬տÕýʵÏÖ¡°100%ÊÓÆµ²¥·Å¡±¡£¸³ÄܱßÔµ¼ÆË㣬ʵÏÖÖÇÄÜ·Ö·¢£º±ßÔµ¼ÆËãÊÇδÀ´ÄÚÈÝ·Ö·¢µÄÖØÒªÇ÷ÊÆ¡£Nginx×îа汾ͨ¹ýÓëLua¡¢JavaScriptµÈ½Å±¾ÓïÑԵĽôÃܼ¯³É£¬ÒÔ¼°¶ÔWebAssemblyµÄÖ§³Ö£¬Ê¹µÃÔÚCDN±ßÔµ½ÚµãÖ´Ðи´ÔÓµÄÒµÎñÂß¼³ÉΪ¿ÉÄÜ¡£
ÕâÒâζ×Å£¬ÊÓÆµÄÚÈݵÄÔ¤´¦Àí¡¢×ªÂë¡¢¼ÓÃÜ¡¢Óû§ÐÐΪ·ÖÎöµÈÈÎÎñ£¬¶¼¿ÉÒÔÔÚÀëÓû§¸ü½üµÄ±ßÔµ·þÎñÆ÷ÉÏÍê³É£¬½øÒ»²½½µµÍÁËÖÐÐÄ»¯·þÎñÆ÷µÄѹÁ¦£¬²¢ÎªÊµÏÖ¸ü¸öÐÔ»¯¡¢¸üÖÇÄÜ»¯µÄÊÓÆµÍƼöºÍÄÚÈÝ·þÎñÌṩÁË»ù´¡¡£ÀýÈ磬¿ÉÒÔÔÚ±ßÔµ½Úµãʵʱ·ÖÎöÓû§¹Û¿´Æ«ºÃ£¬¶¯Ì¬µ÷ÕûÊÓÆµÁ÷µÄÇåÎú¶È»ò±àÂë¸ñʽ£¬ÒÔ´ïµ½?×î¼ÑµÄ²¥·ÅЧ¹û¡£
Ëæ×ÅÎïÁªÍøºÍ5G¼¼ÊõµÄ?·¢Õ¹£¬±ßÔµ¼ÆË㣨EdgeComputing£©ÕýÖð½¥³ÉΪÏÂÒ»´úÍøÂç¼Ü¹¹µÄÖØÒª×é³É²¿·Ö¡£½«¼ÆËãÄÜÁ¦ºÍÄÚÈÝ·Ö·¢ÄÜÁ¦ÍÆÏòÍøÂç±ßÔµ£¬¿¿½üÓû§£¬Äܹ»½øÒ»²½½µµÍÑÓ³Ù£¬ÌáÉýÏìÓ¦ËÙ¶È¡£
NginxEdgeServer£ºNginx¿ÉÒÔ×÷Ϊ±ßÔµ·þÎñÆ÷£¬²¿ÊðÔÚÔËÓªÉÌÍøÂç±ßÔµ»ò¿¿½üÓû§µÄÊý¾ÝÖÐÐÄ¡£Ëü²»½ö¿ÉÒÔ»º´æÊÓÆµÄÚÈÝ£¬»¹¿ÉÒÔÖ´ÐÐһЩÇáÁ¿¼¶µÄ¼ÆËãÈÎÎñ£¬ÀýÈ磺ÖÇÄÜ»º´æ²ßÂÔ£º»ùÓÚÓû§ÐÐΪ¡¢µØÀíλÖá¢Ê±¼äµÈÒòËØ£¬¶¯Ì¬µ÷Õû»º´æ²ßÂÔ£¬½«×î¿ÉÄܱ»Óû§·ÃÎʵÄÄÚÈÝÔ¤ÏȼÓÔØµ½±ßÔµ½Úµã¡£
ÄÚÈÝתÂëÓë·â×°£ºÔÚ±ßÔµ½øÐÐÊÓÆµµÄתÂë¡¢ÇÐÆ¬£¨ÈçHLS,DASH£©£¬Ê¹ÆäÊÊÓ¦²»Í¬É豸ºÍÍøÂçÌõ¼þ£¬Ö±½ÓΪÓû§Ìṩ×îÓÅ»¯µÄÊÓÆµ¸ñʽ¡£Á÷Á¿ÕûÐÎÓëQoS£ºÔÚ±ßÔµ½øÐиü¾«Ï¸»¯µÄÁ÷Á¿¿ØÖƺÍÖÊÁ¿±£Ö¤£¬ÓÅÏȱ£ÕÏÖ±²¥»ò¸ßÓÅÏȼ¶ÊÓÆµµÄÁ÷³©²¥·Å¡£µÍÑÓ³ÙÖ±²¥£º±ßÔµ¼ÆËãÓÈÆäÊʺϵÍÑÓ³ÙÖ±²¥³¡¾°¡£
ͨ¹ý½«Ö±²¥Á÷ÍÆË͵½±ßÔµ½Úµã£¬Óû§¿ÉÒÔÖ±½Ó´Ó×î½üµÄ±ß??Ôµ·þÎñÆ÷»ñȡֱ²¥»Ã棬×î´óÏ޶ȵØ?¼õÉÙÑÓ³Ù£¬ÊµÏÖ½Ó½üʵʱµÄ¹Û¿´ÌåÑé¡£NginxÔڴ˹ý³ÌÖУ¬¿ÉÒԳе£Á÷µÄ½ÓÈë¡¢·Ö·¢¡¢»º´æºÍתÂëµÈ¹Ø¼üÈÎÎñ¡£
http{#...otherhttpconfigurations...gzipon;gzip_varyon;gzip_proxiedany;gzip_comp_level6;#Compressionlevel(1-9)gzip_typestext/plaintext/cssapplication/jsonapplication/javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascript;#Browsercachinglocation~*\.(mp4|mkv|avi|flv|mov|wmv)${add_headerCache-Control"public,max-age=31536000,immutable";}location~*\.(css|js|jpg|jpeg|gif|png|svg|ico)${add_headerCache-Control"public,max-age=86400,immutable";}}
ÊÓÆµÄÚÈÝ£¬ÓÈÆäÊÇÖ±²¥ºÍVOD£¨VideoOnDemand£©£¬ÍùÍùÉæ¼°µ½?¶¯Ì¬Éú³ÉºÍ·Ö·¢¡£Nginx×îа汾ÔÚ¶¯Ì¬ÄÚÈݵĴ¦?ÀíºÍ»º´æ²ßÂÔÉϽøÐÐÁËÏÔÖøµÄ¸Ä½ø£¬ÒÔ½øÒ»²½ÌáÉýÊÓÆµµÄ¼ÓÔØËٶȺͲ¥·ÅÁ÷³©¶È¡£
¸üÖÇÄܵĻº´æ»úÖÆ£ºNginxÇ¿´óµÄ»º´æÄÜÁ¦Ò»Ö±±¸ÊÜÔÞÓþ¡£×îа汾ÔÚ´Ë»ù´¡ÉÏ£¬ÒýÈëÁ˸ü¼ÓÖÇÄܵĻº´æ²ßÂÔ¡£ÀýÈ磬ËüÄܹ»¸üºÃµØÊ¶±ðÊÓÆµÎļþµÄÌØÐÔ£¬Èç·ÖƬÊÓÆµ£¨HLS,DASH£©µÄ¸÷¸öƬ¶Î£¬²¢¸ù¾ÝÕâЩƬ¶ÎµÄ·ÃÎÊÆµÂʺÍʱЧÐÔ£¬½øÐиü¾«Ï¸»¯µÄ»º´æ¹ÜÀí¡£
ÕâʹµÃÓû§ÔÚÇëÇóÊÓÆµÆ¬¶Îʱ£¬Äܹ»ÓÅÏÈ´Ó±¾µØ»ò±ßÔµ½Úµã»º´æÖлñÈ¡£¬´ó´ó½µµÍÁË»ØÔ´Ñ¹Á¦£¬Ò²ÏÔÖøËõ¶ÌÁËÊÓÆµµÄ¼ÓÔØÊ±¼ä¡£
¸ßЧµÄÁ÷ýÌåÖ§³Ö£ºNginx³¤ÆÚÒÔÀ´¶¼ÊÇÁ÷ýÌå´«?ÊäµÄÀûÆ÷£¬Ö§³ÖRTMP¡¢HLS¡¢DASHµÈ¶àÖÖÁ÷ýÌåÐÒé¡£×îа汾½øÒ»²½¼ÓÇ¿Á˶ÔÕâЩÐÒéµÄ½âÎöºÍ·Ö·¢ÄÜÁ¦£¬ÓÅ»¯ÁËÊÓÆµÖ¡µÄ´ò°ü?ºÍ´«Êä¹ý³Ì£¬¼õÉÙÁ˲»±ØÒªµÄÑӳٺͿ¨¶Ù¡£ÎÞÂÛÊÇÖ±²¥»¹Êǵ㲥£¬Nginx¶¼ÄÜÌṩÎȶ¨¡¢µÍÑӳٵĴ«Êä±£ÕÏ¡£
4.Ä£¿é»¯Éè¼ÆÓë¿ÉÀ©Õ¹ÐÔ£ºÎªÊÓÆµ³¡¾°Á¿Éí¶¨ÖÆµÄÁé»îÐÔ
ÔÚNginxÖÐÆôÓÃhttp2ÐÒ飨ÔÚlistenÖ¸ÁîÖÐÌí¼Óhttp2²ÎÊý£©£¬Äܹ»ÏÔÖøÌáÉý¶à·²¢·¢´«ÊäµÄÐÔÄÜ£¬¼õÉÙÑÓ³Ù¡£GzipBuffersºÍGzipProxied£º¾«È·ÅäÖÃgzip_buffers¿ÉÒÔÓÅ»¯GzipѹËõʱµÄÄÚ´æÊ¹Óá£gzip_proxiedÖ¸ÁîÔò¿ÉÒÔ¿ØÖÆÊÇ·ñ¶Ô´úÀí·þÎñÆ÷·µ»ØµÄÏìÓ¦½øÐÐGzipѹËõ£¬Ôڶ༶´úÀí»·¾³ÏÂÓÈÎªÖØÒª¡£
sendfileon;£ºÕâ¸öÖ¸ÁîÔÊÐíNginxÖ±½Ó½«Îļþ´Ó´ÅÅÌ·¢Ë͵½ÍøÂçSocket£¬ÈƹýÓû§¿Õ¼ä£¬´ó·ùÌá¸ßÎļþ´«ÊäЧÂÊ£¬ÌرðÊǶÔÓÚ´óÎļþ£¬ÈçÊÓÆµÎļþ¡£tcp_nopushon;ºÍtcp_nodelayon;£ºÕâÁ½¸öÖ¸Áî¿ÉÒÔ°ïÖúNginx¸üÓÐЧµØ¿ØÖÆTCPÊý¾ÝµÄ·¢ËÍ£¬¼õÉÙÑÓ³Ù£¬ÌáÉýÍÌÍÂÁ¿¡£
tcp_nopush¾¡Á¿ºÏ²¢Ð¡µÄTCPÊý¾Ý°ü£¬¶øtcp_nodelayÔòÊÇÔÚTCP_NODELAYģʽÏÂÁ¢¼´·¢ËÍÊý¾Ý£¨¶ÔµÍÑÓ³ÙÓкô¦£©¡£client_body_buffer_sizeºÍclient_header_buffer_size£ººÏÀíµ÷ÕûÕâЩ»º³åÇø´ó?С£¬¿ÉÒÔ±ÜÃâÔÚ´¦Àí´ó?ÊÓÆµÎļþÉÏ´«?»ò¸´ÔÓÇëÇóʱ³öÏÖÄÚ´æÒç³ö»òЧÂÊϽµµÄÎÊÌâ¡£
1.2HTTP/2µÄÍþÁ¦ÊÍ·Å£ºHTTP/2ÐÒéµÄÒýÈëÊÇÊÓÆµ´«ÊäÌåÑéµÄÒ»´Î·ÉÔ¾¡£ÓëHTTP/1.1µÄ´®ÐÐÇëÇó²»Í¬£¬HTTP/2Ö§³Ö¶à·¸´Óá¢Í·²¿Ñ¹Ëõ¡¢·þÎñÆ÷ÍÆË͵ÈÌØÐÔ£¬Äܹ»¼«´óµØÌáÉýÔÚ¸ßÑÓ³Ù»ò¸ß¶ª°üÂÊÍøÂç»·¾³ÏµĴ«ÊäЧÂÊ¡£
ÆôÓÃHTTP/2:ÔÚNginxµÄlistenÖ¸ÁîÖмÓÈëhttp2²ÎÊý¼´¿ÉÆôÓá£ÀýÈ磺listen443sslhttp2;¡£¶à·¸´ÓÃ:ÔÊÐíÔÚÒ»¸öTCPÁ¬½ÓÉÏͬʱ´«?Êä¶à¸öHTTPÇëÇóºÍÏìÓ¦£¬±ÜÃâÁËHTTP/1.1µÄ¡°¶ÓÍ·×èÈû¡±ÎÊÌ⣬¶ÔÓÚÊÓÆµÁ÷ÖÐÆµ·±µÄÇÐÆ¬ÇëÇóÀ´Ëµ£¬Ð§¹ûÓÈΪÏÔÖø¡£
Í·²¿Ñ¹Ëõ:ʹÓÃHPACKË㷨ѹËõHTTPÇëÇóºÍÏìӦͷ£¬¼õÉÙÁË´«ÊäµÄÊý¾ÝÁ¿£¬ÓÈÆäÊÇÔÚ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼ä½øÐдóÁ¿µÄСÇëÇóʱ£¬Äܹ»ÓÐЧ½µµÍÍøÂçÑÓ³Ù¡£
1.3TCPBBRÓµÈû¿ØÖÆËã·¨£ºÎªÍøÂç´«Êä×¢ÈëÇ¿ÐļÁTCPBBR(BottleneckBandwidthandRound-trippropagationtime)ÊÇÒ»ÖÖÓÉGoogle¿ª·¢µÄÓµÈû¿ØÖÆËã·¨£¬ËüÓ봫ͳµÄ»ùÓÚ¶ª°üµÄÓµÈû¿ØÖÆËã·¨£¨ÈçCubic£©²»Í¬£¬BBR¹Ø×¢µÄÊÇÆ¿¾±´ø¿íºÍÍù·µÊ±¼ä¡£
µ«¶ÔÓÚʵ¼ÊµÄÔËÓªÕß¶øÑÔ£¬¹âÓÐÇ¿´óµÄ¼¼ÊõÊÇÔ¶Ô¶²»¹»µÄ£¬ÈçºÎ½«Æäת»¯Îª¿´µÃ¼ûµÄÐÔÄÜÌáÉý£¬ÈçºÎͨ¹ý¾«ÃîµÄÅäÖÃÈ÷þÎñÆ÷·¢»Ó×î´óЧÄÜ£¬²Å?ÊǹؼüËùÔÚ¡£±¾?²¿·Ö½«¾Û½¹ÓÚNginx×îа汾ÔÚʵ¼ÊÓ¦ÓÃÖеÄÅäÖòßÂÔºÍÐÔÄÜ·ÉÔ¾£¬°ïÖúÄú½âËøÊÓÆµ·þÎñµÄмÍÔª¡£
Ò»¡¢¾«Ï¸»¯ÅäÖ㺽«NginxµÄ¡°100%ÊÓÆµÓÅ»¯¡±±äΪÏÖʵ
NginxµÄÇ¿´óÖ®´¦£¬²»½öÔÚÓÚÆäµ×²ã¼Ü¹¹£¬¸üÔÚÓÚÆä¸ß¶ÈÁé»îµÄÅäÖÃÄÜÁ¦¡£ÒªÊµÏÖ¡°100%ÊÓÆµÓÅ»¯¡±£¬ÐèÒª¶ÔNginx½øÐÐһϵÁо«Ï¸»¯µÄÅäÖã¬ÒÔ³ä·Ö·¢»ÓÆäÔÚÊÓÆµ´«Êä·½ÃæµÄDZÄÜ¡£
1.ÓÅ»¯Á¬½ÓÓ뻺³åÇøÉèÖãºÎªÊÓÆµÊý¾ÝÁ÷¡°ÆÌƽµÀ·¡±
worker_connections£ºÕâ¸ö²ÎÊý¾ö¶¨ÁËÿ¸öNginx¹¤×÷½ø³ÌÄܹ»Í¬Ê±´¦ÀíµÄ×î´óÁ¬½ÓÊý¡£¶ÔÓÚÊÓÆµ·þÎñÆ÷¶øÑÔ£¬Í¨³£ÐèÒª´¦Àí´óÁ¿µÄ²¢·¢Á¬½Ó£¬Òò´ËÐèÒª¸ù¾Ý·þÎñÆ÷µÄÓ²¼þ×ÊÔ´ºÍʵ¼ÊµÄ²¢·¢ÐèÇ󣬺ÏÀíÉèÖÃworker_connectionsµÄÖµ¡£
Ò»°ã¶øÑÔ£¬½«ÆäÉèÖÃΪһ¸ö½Ï´óµÄÊýÖµ£¬Èç1024¡¢4096ÉõÖÁ¸ü¸ß£¬Äܹ»ÓÐЧÌáÉý·þÎñÆ÷Ôڸ߲¢?·¢³¡¾°ÏµĴ¦ÀíÄÜÁ¦¡£
»º³åÇøÓÅ»¯£ºNginxʹÓûº³åÇøÀ´´¦ÀíÇëÇóºÍÏìÓ¦Êý¾Ý¡£¶ÔÓÚÊÓÆµÕâÖÖ´óÊý¾ÝÁ¿µÄ´«Ê䣬ºÏÀíµÄ»º³åÇøÉèÖÃÖÁ¹ØÖØÒª¡£
Ö±²¥×÷ΪÊÓÆµÁìÓòµÄÖØÒª·ÖÖ§£¬¶ÔÑӳٺͲ¢·¢ÄÜÁ¦ÓÐ׿«ÆäÑÏ¿ÁµÄÒªÇó¡£Nginx×îа汾ͨ¹ýһϵÁм¼ÊõÉý¼¶£¬ÎªÊµÏÖµÍÑÓ³Ù¡¢¸ß²¢·¢µÄÖ±²¥ÌåÑéÌṩÁËÇ¿´óµÄÖ§³Ö¡£
RTMP/HLS/DASHµÈÐÒéµÄÉî¶ÈÖ§³ÖÓëÓÅ»¯£ºNginxƾ½èÆäÇ¿´óµÄÄ£¿é»¯¼Ü¹¹£¬Äܹ»ÇáËɼ¯³É¸÷ÖÖÁ÷ýÌåÐÒé¡£×îа汾ÔÚ¶ÔRTMP£¨Real-TimeMessagingProtocol£©¡¢HLS£¨HTTPLiveStreaming£©ºÍDASH£¨DynamicAdaptiveStreamingoverHTTP£©µÈÖ÷Á÷Ö±²¥ÐÒéµÄÖ§³ÖÉϽøÐÐÁ˽øÒ»²½ÓÅ»¯¡£
ͨ¹ý¾«Ï¸»¯µÄ»º³åÇø¹ÜÀíºÍ¸ßЧµÄÁ÷ýÌå·Ö·¢»úÖÆ£¬NginxÄܹ»×î´ó?Ï޶ȵؽµµÍÖ±²¥?ÑÓ³Ù£¬È·±£¹ÛÖÚÄܹ»ÊµÊ±µØ½ÓÊÕµ½»ÃæºÍÉùÒô£¬ÊµÏÖ¡°100%ÊÓÆµ²¥·Å¡±µÄ¼´Ê±ÐÔ¡£WebRTCµÄÕûºÏÓëÓ¦ÓãºNginx»ý¼«Ì½Ë÷WebRTC£¨WebReal-TimeCommunication£©µÈÇ°ÑØ¼¼Êõ£¬²¢ÌṩÁËÏà¹ØµÄ¼¯³É·½°¸¡£
NginxÖ®ËùÒÔÄܹ»ÔÚWeb·þÎñÆ÷ÁìÓòÍÑÓ±¶ø³ö£¬ºÜ´ó?³Ì¶ÈÉϹ鹦ÓÚÆäʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄ¼Ü¹¹£¬ÕâʹµÃËüÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ´¦Àíº£Á¿²¢·¢Á¬½Ó¡£ÔÚÊÓÆµ´«ÊäÕâÒ»¶Ô´ø¿íºÍÁ¬½ÓÊýÒªÇ󼫸ߵij¡¾°Ï£¬NginxµÄ?ÕâÒ»ÌØÐÔÓÈΪ±¦¹ó¡£¶ø×îа汾µÄNginx£¬¸üÊǽ«ÕâÖÖÓÅÊÆ·¢»Óµ½Á˼«Ö£¬Í¨¹ýһϵÁÐÉî¶ÈÓÅ»¯ºÍй¦ÄܵÄ?ÒýÈ룬ʵÏÖÁ˶ÔÊÓÆµÁ÷Á¿µÄ¡°100%¡±Õƿء£
1.ºËÐļܹ¹µÄ³ÖÐøÑݽø£ºÇáÁ¿¼¶Óë¸ßÍÌÍÂÁ¿µÄÍêÃÀÈÚºÏ
NginxµÄºËÐľºÕùÁ¦ÔÚÓÚÆä¾«ÇɵÄ?¼Ü¹¹Éè¼Æ¡£×îа汾ÔÚ±£³Ö?¡°ÇáÁ¿¼¶¡±ÕâÒ»ÓÅÁ¼´«Í³µÄ½øÒ»²½ÌáÉýÁËÆäÔڸ߲¢?·¢³¡¾°ÏµÄÍÌÍÂÁ¿¡£Í¨¹ý¶ÔʼþÑ»·¡¢ÄÚ´æ¹ÜÀíºÍ½ø³ÌÄ£Ð͵ľ«Ï¸µ÷ÓÅ£¬NginxÄܹ»¸üÓÐЧµØ?ÀûÓÃCPUºÍÄÚ´æ×ÊÔ´£¬½«·þÎñÆ÷µÄÿһ·ÝÄÜÁ¦¶¼Í¶Èëµ½ÊÓÆµÊý¾ÝµÄ´«ÊäÖС£
ÕâÒâζ×Å£¬ÎÞÂÛÄúµÄÊÓÆµ·þÎñÊÇÃæÁÙÍ»·¢µÄÖ±²¥¸ß·å£¬»¹ÊǺ£Á¿µÄµã²¥ÇëÇó£¬Nginx¶¼ÄÜÒÔÎȶ¨µÄÐÔÄÜ£¬½«¿¨¶ÙºÍÑÓ³Ù½µÖÁ×îµÍ¡£¶ÔÓÚÊÓÆµÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©¶øÑÔ£¬ÕâÖÖÄÜÁ¦µÄÌáÉýÖ±½Óת»¯ÎªÓû§ÌåÑéµÄ·ÉÔ¾£¬Äܹ»ÎüÒý²¢Áôס¸ü¶à¶ÔÁ÷³©¶ÈÃô¸ÐµÄÓû§¡£
2.HTTP/2ºÍHTTP/3µÄÔÉúÖ§³Ö£º¼ÓËÙÊÓÆµ¼ÓÔØµÄÃØÃÜÎäÆ÷
NginxÒÔÆä¾«Çɵļܹ¹¡¢¸ßЧµÄ?ʼþ´¦Àí»úÖÆ¡¢Ç¿´óµÄ»º´æÄÜÁ¦ÒÔ¼°¶ÔÁ÷ýÌåÐÒéµÄÁ¼ºÃÖ§³Ö£¬³ÉΪÁ˹¹½¨¸ßÐÔÄÜÊÓÆµ·þÎñµÄÀíÏëÑ¡Ôñ¡£Í¨¹ýÉîÈëÀí½âNginxµÄ¹¤×÷ÔÀí£¬²¢½áºÏºÏÀíµÄÅäÖÃÓÅ»¯£¬´Ó?»ù´¡µÄÍøÂçÉèÖõ½¸ß¼¶µÄÁ÷ýÌåÐÒéÓ¦Óã¬ÔÙµ½³ÖÐøµÄ¼à¿Øµ÷ÓÅ£¬ÎÒÃÇÄܹ»×î´ó³Ì¶ÈµØÊÍ·ÅNginxµÄDZÄÜ£¬ÊµÏÖ½Ó½üÉõÖÁ´ïµ½100%µÄÊÓÆµÐÔÄÜ¡£
µ±Äã¿´µ½ÆÁÄ»Éϲ¥·ÅµÄÊÓÆµÁ÷³©Îޱȣ¬¼ÓÔØË²¼äÍê³É£¬Õâ±³ºó¾ÍÓÐNginxÔÚĬĬµØÐÁÇÚ¹¤×÷¡£Ëü²»½ö½öÊÇÒ»¸ö·þÎñÆ÷Èí¼þ£¬¸üÊǹ¹½¨ÏÖ´úÊÓÆµ·þÎñ£¬Á¬½ÓÄÚÈÝÓëÓû§µÄ¼áʵÇÅÁº£¬ÎªÎÒÃÇ´øÀ´ÎÞÓëÂ×±È?µÄÊý×ÖÓéÀÖÌåÑé¡£ÈÃNginx³ÉΪÄãÊÓÆµ·þÎñµÄÇ¿´óÒýÇæ£¬½âËøÇ°ËùδÓеÄÁ÷³©Óë¸ßЧ£¡
NginxÔÚÊÓÆµÓÅ»¯·½ÃæÓµÓеÃÌì¶ÀºñµÄÓÅÊÆ¡£´ÓʼþÇý¶¯µÄ¼Ü¹¹µ½·á¸»µÄÄ£¿éÖ§³Ö£¬ÔÙµ½¾«Ï¸»¯µÄÅäÖÃÑ¡ÏËüΪÎÒÃÇÌṩÁËÇ¿´ó?µÄ¹¤¾ßÏ䡣ͨ¹ý¶Ô»ù´¡ÅäÖõÄÓÅ»¯¡¢Õë¶ÔÊÓÆµ¸ñʽµÄÊÊÅ䣬ÒÔ¼°¸ßЧµÄ»º´æ²ßÂÔ£¬ÎÒÃÇ¿ÉÒÔΪÓû§¹¹½¨ÆðÒ»¸öÁ÷³©¡¢Îȶ¨µÄÊÓÆµ²¥·Å»·¾³¡£
Õâ½ö½öÊÇ¿ªÊ¼¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖ¸ü½ø½×µÄÓÅ»¯¼¼ÇÉ£¬°üÀ¨CDN¼¯³É¡¢Á÷ýÌåÐÒéµÄ×î¼Ñʵ¼ù£¬ÒÔ¼°ÐÔÄÜ¼à¿ØÓëµ÷ÓÅ£¬½øÒ»²½½«NginxµÄÊÓÆµÓÅ»¯ÍÆÏòеĸ߶ȡ£
HLS/DASHÁ÷ʽ´«ÊäµÄÅäÖ㺶ÔÓÚ¸ü¸ß¼¶µÄ?Á÷ýÌå´«ÊäÐÒ飬ÈçHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)£¬Nginx¿ÉÒÔͨ¹ýÅäÖÃlocation¿éÀ´´¦Àí.m3u8ºÍ.mpdÎļþ£¬²¢ÌṩÏàÓ¦µÄýÌåÇÐÆ¬£¨.ts»ò.m4s£©¡£
M3u8/MpdÎļþµÄ»º´æ?£ºHLS/DASHµÄ²¥·ÅÒÀÀµÓÚË÷ÒýÎļþ£¨.m3u8/.mpd£©ºÍýÌåÇÐÆ¬¡£¶ÔÕâЩÎļþ½øÐÐÓÐЧµÄ»º´æ¿ÉÒÔ¼«´óµØÌá¸ß²¥?·ÅµÄÆô¶¯ËÙ¶È¡£ÇÐÆ¬ÎļþµÄ»º´æ£ºÃ½ÌåÇÐÆ¬ÊÇÊÓÆµ²¥·ÅµÄºËÐÄ£¬¶ÔÆä½øÐиßЧ»º´æÖÁ¹ØÖØÒª¡£
ÔÚÊý×Öʱ´úÀ˳±Ï£¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪÐÅÏ¢´«?²¥¡¢ÓéÀÖÏûDzÄËÖÁÉÌÒµÓªÏúµÄºËÐÄÔØÌå¡£´Ó¶ÌÊÓÆµµÄË鯬»¯ÓéÀÖµ½³¤ÊÓÆµµÄÉî¶ÈÄÚÈÝ£¬ÔÙµ½Ö±²¥µÄʵʱ»¥¶¯£¬ÊÓÆµµÄÆÕ¼°³Ì¶ÈºÍÏû·ÑÐèÇó³Ê?ÏÖ±¬Õ¨Ê½Ôö³¤¡£°éËæ¶øÀ´µÄÊǶÔÁ÷ýÌå·þÎñÆ÷ÐÔÄܵÄ?ÑϾþ¿¼Ñé¡£Óû§ÆÚÍûµÄÊÇ¡°Ã뿪¡±¼´²¥µÄÁ÷³©ÌåÑ飬һµ©¼ÓÔØ»ºÂý¡¢»Ã濨¶Ù¡¢ÉõÖÁ²¥?·ÅÖжϣ¬Óû§µÄÄÍÐĽ«Ñ¸ËÙÏûÄ¥£¬Ö±½ÓÓ°ÏìÓû§Áô´æºÍÉÌÒµ¼ÛÖµ¡£
´«?ͳµÄWeb·þÎñÆ÷ÔÚ´¦Àíº£Á¿ÊÓÆµÇëÇóʱ£¬ÍùÍùÁ¦²»´ÓÐÄ¡£´ø¿íÆ¿¾±¡¢·þÎñÆ÷¸ºÔعý¸ß¡¢´«ÊäЧÂʵÍϵÈÎÊÌâ²ã³ö²»Çµ¼ÖÂÓû§ÌåÑé´ó´ò?ÕÛ¿Û¡£Õâʱ£¬Ò»¸öÇ¿´ó¶øÁé»îµÄ½â¾ö·½°¸¾ÍÏÔµÃÓÈΪ¹Ø¼ü¡£¶øNginx£¬×÷Ϊҵ½çÁìÏȵĸßÐÔÄÜWeb·þÎñÆ÷¡¢·´Ïò´úÀíºÍ¸ºÔؾùºâÆ÷£¬Æ¾½èÆä׿ԽµÄʼþÇý¶¯¼Ü¹¹¡¢ÇáÁ¿¼¶µÄÉè¼ÆÒÔ¼°·á¸»µÄ?¹¦Äܼ¯£¬³ÉΪÁËÓÅ»¯ÊÓÆµÁ÷ýÌå´«ÊäµÄ¡°ÉñÆ÷¡±¡£
±¾ÎĽ«ÉîÈë̽ÌÖÈçºÎÀûÓÃNginxʵÏÖ¡°Nginx100%ÊÓÆµÓÅ»¯¡±£¬´Ó¸ù±¾ÉϽâ¾öÊÓÆµ²¥·ÅµÄÍ´µã£¬ÊÍ·ÅÄãµÄÁ÷ýÌåDZÁ¦¡£ÎÒÃǽ«Î§ÈÆNginxÔÚÊÓÆµ´«ÊäÖеĺËÐÄÓÅÊÆ£¬½áºÏʵ¼ÊÓ¦Óó¡?¾°£¬ÎªÄã½ÒʾһϵÁÐÐÐÖ®ÓÐЧµÄÓÅ»¯²ßÂÔ£¬ÈÃÄãÇáËɼÝÔ¦¸ß²¢·¢µÄÊÓÆµÁ÷Á¿£¬ÎªÓû§ÌṩǰËùδÓеÄÁ÷³©¹Û¿´ÌåÑé¡£
ÔÚ¸´ÔÓµÄÁ÷ýÌå¼Ü¹¹ÖУ¬NginxµÄ×÷ÓÃÔ¶²»Ö¹ÓÚ¼òµ¥µÄÎļþ·Ö·¢¡£
CDN±ßÔµ½Úµã²¿Êð£ºÔÚCDN¼Ü¹¹ÖУ¬Nginx±»¹ã·ºÓÃ×÷±ßÔµ½ÚµãµÄ·þÎñÆ÷¡£Ëü¸ºÔ𻺴æÔ´Õ¾µÄÄÚÈÝ£¬²¢Ö±½Ó·þÎñÓÚÖÕ¶ËÓû§¡£Í¨¹ýÓëCDN³§É̵Ä?Éî¶È¼¯³É£¬Nginx¿ÉÒÔʵÏÖÖÇÄܵÄÁ÷Á¿µ÷¶ÈºÍ»ØÔ´²ßÂÔ£¬È·±£ÄÚÈÝÄܹ»ÒÔ×î¿ìµÄËÙ¶È´¥´ïÓû§¡£
¸ºÔؾùºâ£º¶ÔÓÚ¸ßÐÔÄܵÄÁ÷ýÌå·þÎñ£¬Í¨³£ÐèÒª¶ą̀·þÎñÆ÷Ðͬ¹¤×÷¡£NginxµÄupstreamÄ£¿é¿ÉÒÔʵÏÖÇ¿´óµÄ¸ºÔؾùºâ¹¦ÄÜ£¬½«À´×ÔÓû§µÄÇëÇó¾ùÔȵطַ¢µ½ºó¶ËµÄ?¶ą̀Á÷ýÌå·þÎñÆ÷»òAPI·þÎñÆ÷ÉÏ¡£Ö§³Ö¶àÖÖ¸ºÔؾùºâËã·¨£¬ÈçÂÖѯ£¨roundrobin£©¡¢×îÉÙÁ¬½Ó£¨leastconn£©¡¢IP¹þÏ££¨iphash£©µÈ£¬¿ÉÒÔ¸ù¾ÝÒµÎñÐèÇóÑ¡Ôñ×îÊʺϵIJßÂÔ¡£
¶¯¾²·ÖÀ룺ÔÚÊÓÆµ·þÎñÖУ¬ÍùÍù»á»ìºÏ¾²Ì¬µÄÊÓÆµÎļþºÍ¶¯Ì¬µÄAPIÇëÇó£¨ÈçÓû§µÇ¼¡¢ËÑË÷¡¢ÆÀÂÛµÈ?£©¡£Nginx¿ÉÒÔͨ¹ýlocationÖ¸Á½«¾²Ì¬×ÊÔ´£¨ÈçÊÓÆµÎļþ¡¢Í¼Æ¬¡¢CSS¡¢JS£©Ö±½ÓÓÉNginx´¦Àí£¬¶ø½«¶¯Ì¬ÇëÇóת·¢¸øºó¶ËµÄÓ¦Ó÷þÎñÆ÷¡£
ÕâÖÖ¡°¶¯¾²·ÖÀ롱µÄ¼Ü¹¹¿ÉÒÔ¼«´ó?µØ¼õÇáºó¶ËÓ¦Ó÷þÎñÆ÷µÄѹÁ¦£¬ÌáÉýÕûÌåµÄÏìÓ¦ËٶȺÍÍÌÍÂÁ¿¡£
ÔÚÊÓÆµÁ÷ýÌå´«?Êä¹ý³ÌÖУ¬Êý¾Ý°²È«ºÍÓû§Òþ˽ÊDz»¿ÉºöÊӵĻ·½Ú¡£Nginx×îаæ?±¾ÔÚ°²È«·½ÃæÍ¬Ñù²»ÒÅÓàÁ¦£¬È«ÃæÓµ±§TLS1.3£¬ÎªÓû§Ìṩ¸ü°²È«¡¢¸ü˽ÃܵĹÛÓ°ÌåÑé¡£
TLS1.3µÄÐÔÄÜÓÅÊÆ£ºTLS1.3×÷ΪÐÂÒ»´úµÄ´«Êä²ã°²È«ÐÒ飬ÔÚ¼ÓÃÜËã·¨¡¢ÎÕÊÖ¹ý³ÌµÈ·½Ãæ½øÐÐÁË´ó·ù¶ÈµÄÓÅ»¯¡£Nginx¶ÔTLS1.3µÄÈ«ÃæÖ§³Ö£¬²»½öÌṩÁ˸üÇ¿µÄ¼ÓÃÜÄÜÁ¦£¬µÖÓù¸ü¸´ÔÓµÄÍøÂç¹¥»÷£¬¸üÖØÒªµÄÊÇ£¬Æä¼ò»¯µÄÎÕÊÖ¹ý³Ì´ó·ùËõ¶ÌÁËÁ¬½Ó½¨Á¢Ê±¼ä£¬¶ÔÓÚÊÓÆµÁ÷µÄÆô¶¯ËÙ¶ÈÓÐ×Å»ý¼«µÄÓ°Ïì¡£
ÕâÒâζ×Å£¬Óû§ÔÚ·¢ÆðÊÓÆµ²¥·ÅÇëÇóʱ£¬Äܹ»¸ü¿ìµØ½¨Á¢°²È«Á¬½Ó£¬¼õÉٵȴýʱ¼ä¡£Ó²¼þ¼ÓËÙÓëÐÔÄÜÓÅ»¯£ºNginx½áºÏÏÖ´úÓ²¼þµÄ¼ÓÃܼÓËÙÄÜÁ¦£¬½øÒ»²½ÓÅ»¯ÁËTLS¼ÓÃܺͽâÃܹý³ÌµÄÐÔÄÜ¡£Í¨¹ýÀûÓÃCPUµÄAES-NIµÈÖ¸Á£¬NginxÄܹ»ÒÔ¼«µÍµÄCPU¿ªÏúÍê³ÉTLS¼ÓÃܲÙ×÷£¬È·±£ÔÚÌṩǿ´ó°²È«±£»¤µÄ²»¶ÔÊÓÆµ²¥?·ÅµÄÁ÷³©¶ÈÔì³ÉÃ÷ÏÔÓ°Ïì¡£
ÕâÖÖÈíÓ²½áºÏµÄÓÅ»¯£¬ÊÇʵÏÖ¡°100%ÊÓÆµ²¥·Å¡±²»¿É»òȱµÄÒ»»·¡£
ÔÚNginxÇ¿´óµÄ»º´æÄÜÁ¦»ù´¡ÉÏ£¬ÎÒÃÇ»¹ÐèÒª¹Ø×¢ÊÓÆµÁ÷ýÌå´«ÊäµÄЧÂʺÍÐÒéµÄÓÅ»¯£¬ÒÔÈ·±£?ÊÓÆµÔÚÍøÂçÖеĴ«Êä¹ý³ÌͬÑù˳³©ÎÞ×è¡£
HTTP/2ºÍHTTP/3µÄ¸³ÄÜ£º´«Í³µÄHTTP/1.1ÐÒéÔÚ´¦Àí´óÁ¿Ð¡ÎļþÇëÇóʱ´æÔÚÐÔÄÜÆ¿¾±£¬ÀýÈç¶à·¸´ÓÃЧÂʲ»¸ß¡¢ÇëÇóÍ·¿ªÏú´óµÈ¡£¶øHTTP/2ÐÒéµÄÒýÈ룬ͨ¹ýÍ·²¿Ñ¹Ëõ¡¢¶à·¸´ÓᢷþÎñÆ÷ÍÆË͵ÈÌØÐÔ£¬¼«´óµØÌáÉýÁËWeb×ÊÔ´µÄ´«ÊäЧÂÊ£¬¶ÔÓÚÊÓÆµÁ÷ýÌåÖÐÆµ·±µÄСÎļþÇëÇó£¨ÈçHLSµÄts·ÖƬ£©ÓÐÏÔÖøµÄÐÔÄÜÌáÉý¡£
Nginx¶ÔHTTP/2µÄÖ§³Ö·Ç³£³ÉÊ죬ֻÐè¼òµ¥µÄÅäÖü´¿ÉÆôÓá£
ÅäÖÃÒªµã£ºÔÚlistenÖ¸ÁîÖÐÌí¼Óhttp2²ÎÊý¡£È·±£SSLÖ¤ÊéÅäÖÃÕýÈ·£¬ÒòΪHTTP/2ͨ³£ÔÚHTTPS»·¾³ÏÂʹÓá£http2_max_concurrent_streams£ºÉèÖÃÿ¸öTCPÁ¬½ÓÉÏÔÊÐíµÄ×î´ó²¢·¢Á÷Êý£¬¿É¸ù¾Ý·þÎñÆ÷ÄÜÁ¦½øÐе÷Õû¡£
http2_push£º¿ªÆô·þÎñÆ÷ÍÆË͹¦ÄÜ£¬¿ÉÒÔÌáǰ½«Óû§¿ÉÄÜÐèÒªµÄ×ÊÔ´£¨ÈçCSS¡¢JS£©ÍÆË͵½¿Í»§¶Ë£¬¼õÉÙºóÐøÇëÇó¡£
Nginx²¢·ÇÍ£ÖͲ»Ç°£¬Æä¿ª·¢ÕßÉçÇøºÍÉÌÒµ°æ±¾NginxPlus¶¼ÔÚ³ÖÐøÍÆ¶¯ÆäÔÚÊÓÆµÁìÓòµÄÄÜÁ¦±ß½ç¡£
HTTP/3µÄ?È«ÃæÆÕ¼°£ºËæ×ÅQUICÐÒéµÄ³ÉÊìºÍä¯ÀÀÆ÷Ö§³ÖµÄÆÕ¼°£¬HTTP/3½«³ÉΪNginx´¦ÀíÊÓÆµÁ÷Á¿µÄ±ê×¼ÐÒ飬´øÀ´¸ü¿ìµÄÁ¬½Ó½¨Á¢ËٶȺ͸üÇ¿µÄÍøÂçÊÊÓ¦ÐÔ¡£WebRTCµÄÉî¶È¼¯³É£º¶ÔÓÚµÍÑÓ³ÙÖ±²¥¡¢ÊµÊ±»¥¶¯ÊÓÆµµÈ³¡¾°£¬WebRTCµÄ¼¯³É½«ÊÇÖØÒªµÄ·¢Õ¹·½Ïò¡£
NginxÓÐÍû³ÉΪWebRTCýÌå·þÎñÆ÷µÄÖØÒª×é³É²¿·Ö£¬Ìṩ¸üÇ¿´óµÄÐÅÁýÌåת·¢ºÍ¹ÜÀíÄÜÁ¦¡£AIÓëÊÓÆµ·ÖÎöµÄ½áºÏ£ºËæ×ÅAI¼¼ÊõµÄ·¢Õ¹£¬ÊÓÆµÄÚÈÝ·ÖÎö£¨ÈçÄÚÈÝʶ±ð¡¢ÖÇÄÜÍÆ¼ö£©½«±äµÃ?Ô½À´Ô½ÖØÒª¡£Nginx¿ÉÒÔ×÷ΪÊý¾ÝÊÕ¼¯ºÍ³õ²½´¦ÀíµÄÈë¿Ú£¬ÓëAIÄ£ÐÍÐͬ¹¤×÷£¬ÎªÊÓÆµÄÚÈÝÆ½Ì¨Ìṩ¸üÖÇÄܵķþÎñ¡£
ÔÆÔÉúÓë΢·þÎñ¼Ü¹¹µÄÊÊÓ¦£ºÔÚÔÆÔÉúºÍ΢·þÎñÊ¢ÐеĽñÌ죬Nginx×÷Ϊ±ßÔµ´úÀí¡¢APIÍø¹ØµÄ½ÇÉ«½«Óú·¢ÖØÒª¡£ÆäÇáÁ¿¼¶¡¢¸ßÉìËõÐÔµÄÌØµã£¬Ê¹ÆäÄܹ»ÍêÃÀÈÚÈë¸÷ÖÖÔÆÆ½Ì¨ºÍÈÝÆ÷»¯²¿Êð»·¾³ÖУ¬ÎªÊÓÆµ·þÎñµÄµ¯ÐÔÉìËõÌṩ֧³Ö¡£¸üÖÇÄܵÄÁ÷Á¿µ÷¶ÈÓëÓÅ»¯£ºÎ´À´£¬Nginx¿ÉÄܻἯ³É¸üÏȽøµÄÁ÷Á¿µ÷¶ÈËã·¨£¬Äܹ»¸ù¾ÝÊµÊ±ÍøÂç×´¿ö¡¢Óû§É豸ÄÜÁ¦ÒÔ¼°ÄÚÈÝÀàÐÍ£¬¶¯Ì¬µ÷Õû´«Êä²ßÂÔ£¬ÊµÏÖ¡°100%ÊÓÆµÁ÷Á¿¡±µÄÖÇÄÜÓÅ»¯¡£
NginxÇ¿´óµÄ»º´æ»úÖÆÊÇʵÏÖÊÓÆµÓÅ»¯µÄ¹Ø¼üÖ®Ò»¡£Í¨¹ýÅäÖÃNginxµÄproxy_cache»òfastcgi_cacheµÈÄ£¿é£¬ÎÒÃÇ¿ÉÒÔ½«Óû§ÇëÇó¹ýµÄÊÓÆµÎļþ»º´æÔÚ·þÎñÆ÷±¾µØ»òCDN±ßÔµ½Úµã¡£µ±ÆäËûÓû§ÔÙ´ÎÇëÇóͬһÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖжÁÈ¡Êý¾Ý²¢?·µ»Ø£¬ÎÞÐèÔÙ´ÎÏòÔ´·þÎñÆ÷·¢ÆðÇëÇ󣬴ó´óËõ¶ÌÁËÏìӦʱ¼ä£¬¼õÇáÁËÔ´·þÎñÆ÷µÄѹÁ¦¡£
¸üÖØÒªµÄÊÇ£¬NginxµÄ»º´æ¿ÉÒÔÅäÖÃΪÖÇÄÜ»º´æ£¬ÀýÈç¸ù¾ÝÇëÇóÍ·ÐÅÏ¢£¨ÈçIf-Modified-Since£©À´ÅжÏ×ÊÔ´ÊÇ·ñÒѸüУ¬±ÜÃ⻺´æ¹ýÆÚʧЧ£¬Í¬Ê±Ò²ÄÜÓÐЧÀûÓûº´æ¿Õ¼ä¡£¶ÔÓÚÊÓÆµÕâÖÖÌåÁ¿´ó¡¢¸üÐÂÆµÂÊÏà¶Ô½ÏµÍµÄÄÚÈÝ£¬»º´æµÄ×÷ÓÃÓÈΪÏÔÖø¡£
ÔÙÕߣ¬Nginx¶ÔHTTP/2ºÍHTTP/3ÐÒéµÄÁ¼ºÃÖ§³Ö£¬ÎªÊÓÆµ´«Êä´øÀ´Á˸ïÃüÐÔµÄ?ÌáÉý¡£HTTP/2ÒýÈëÁ˶à·¸´Óã¨Multiplexing£©¼¼Êõ£¬ÔÊÐí¿Í»§¶Ëͨ¹ýµ¥¸öTCPÁ¬½Ó²¢Ðз¢ËͶà¸öÇëÇ󣬲¢ÔÚ·þÎñÆ÷¶Ë²¢Ðд¦Àí£¬È»ºóÔÚͬһ¸öÁ¬½ÓÉÏÒÔÂÒÐòµÄ·½Ê½·µ»ØÏìÓ¦¡£
ngxhttpflv_module(¿ÉÑ¡):¶ÔÓÚÐèÒªÖ±²¥ÍÆÁ÷ºÍµã²¥·þÎñµÄ³¡¾°£¬NginxµÄngx_http_flv_moduleÄ£¿é¿ÉÒÔÌṩFLV·â×°ºÍ·Ö·¢ÄÜÁ¦£¬µ«¶ÔÓÚHLS/DASHÕâÖÖ¸üÏÖ´ú¡¢¸üͨÓõÄÐÒ飬ͨ³£ÊÇÊ×Ñ¡¡£
1.5»º´æ²ßÂÔ£ºÁôס¾«»ª£¬¼ÓËÙ·ÃÎÊ»º´æÊÇNginxÓÅ»¯ÊÓÆµÁ÷ýÌåÐÔÄܵÄÁíÒ»¸öºËÐÄ»·½Ú¡£Í¨¹ýºÏÀíµØ»º´æÊÓÆµÇÐÆ¬ºÍ²¥·ÅÁÐ±í£¬¿ÉÒÔÏÔÖø¼õÉÙ»ØÔ´ÇëÇ󣬽µµÍ´ø¿í³É±¾£¬²¢ÌáÉýÓû§µÄ·ÃÎÊËÙ¶È¡£
proxy_cacheÖ¸Áî:NginxµÄproxy_cacheÖ¸Áî¿ÉÒÔÓÃÀ´»º´æÀ´×ÔÉÏÓηþÎñÆ÷µÄÏìÓ¦¡£¶ÔÓÚÊÓÆµµã²¥·þÎñ£¬¿ÉÒÔ½«ÊÓÆµÇÐÆ¬»º´æµ½Nginx·þÎñÆ÷µÄ±¾µØ´ÅÅÌÉÏ¡£proxy_cache_path/data/nginx/cachelevels=1:2keys_zone=my_cache:10mmax_size=10ginactive=60muse_temp_path=off;(¶¨Ò建´æÂ·¾¶¡¢ÇøÓò¡¢´óСºÍʧЧʱ¼ä)proxy_cachemy_cache;(ÔÚlocation¿éÖÐÆôÓûº´æ)expiresÖ¸Áî:ÉèÖÃHTTPÏìӦͷÖеÄExpiresºÍCache-Control£¬Ö¸µ¼ä¯ÀÀÆ÷»òCDN½Úµã½øÐб¾µØ»º´æ¡£
Nginx¿ÉÒÔͨ¹ýHTTPÐÒé¸ßЧµØ·Ö·¢ÕâЩÎļþ¡£DASHÓÅ»¯Òªµã£ºÄÚÈݶàÑùÐÔ£ºÈ·±£ÄãµÄNginx·þÎñÆ÷Äܹ»¸ù¾Ý¿Í»§¶ËÇëÇóµÄAcceptÍ·²¿»òURL²ÎÊý£¬Ìṩ²»Í¬·Ö±æÂʺͱÈ?ÌØÂʵÄÊÓÆµÆ¬¶Î£¬ÕâÊÇDASHʵÏÖ×ÔÊÊÓ¦µÄ¹Ø¼ü¡£µÍÑÓ³ÙDASH£¨LL-DASH£©£º¶ÔÓÚʵʱÐÔÒªÇó¸ü¸ßµÄ³¡¾°£¬¿ÉÒÔ¿¼ÂÇʵÏÖµÍÑÓ³ÙDASH¡£
Nginx¿ÉÒÔͨ¹ýÅäÖÃÀ´Ö§³Ö¸üСµÄ·ÖƬ´óСºÍ¸ü¿ìµÄ¸üÐÂÆµÂÊ£¬ÒÔ¼õÉÙÑÓ³Ù¡£Ê¹ÓÃngx_http_vhost_traffic_status_module£ºÕâ¸öÄ£¿é¿ÉÒÔ°ïÖúÄãʵʱ¼à¿ØNginxµÄÁ÷Á¿×´Ì¬£¬°üÀ¨ÇëÇóÊý¡¢Á¬½ÓÊý¡¢´ø¿íʹÓõȣ¬¶ÔÓÚÀí½âDASHÁ÷µÄ·Ö·¢Çé¿ö·Ç³£ÓаïÖú¡£
RTMP£¨Real-TimeMessagingProtocol£©£ºËäÈ»RTMPÔÚ¹ýÈ¥³£ÓÃÓÚÖ±²¥£¬µ«Æä»ùÓÚTCPµÄÌØÐÔÔÚÍøÂç²»Îȶ¨Ê±ÈÝÒ׳öÏÖ¿¨¶Ù£¬ÇÒ²»?ÊʺÏÒÆ¶¯¶Ë¡£²»¹ý£¬Nginx¿ÉÒÔͨ¹ýnginx-rtmp-moduleÄ£¿éÀ´Ö§³ÖRTMPÐÒ飬ʵÏÖÖ±²¥ÍÆÁ÷ºÍ²¥·Å¡£
Nginx100%ÊÓÆµ´«Ê䣺мÍÔªµÄ»ùʯ£¬¼«ÖÂÁ÷³©µÄ³Ð?ŵ
ÔÚÐÅÏ¢±¬Õ¨µÄ½ñÌ죬ÊÓÆµÒÑÈ»³ÉΪÎÒÃǹµÍ¨¡¢ÓéÀÖ¡¢Ñ§Ï°µÄºËÐÄÔØÌå¡£´Ó¸ßÇåµçÓ°¡¢ÊµÊ±Ö±²¥µ½ÔÚÏß½ÌÓý£¬Óû§¶ÔÊÓÆµÌåÑéµÄÒªÇó´ÓδÈç´ËÖ®¸ß¡ª¡ªÁ÷³©¡¢Îȶ¨¡¢µÍÑÓ³Ù£¬·Â·ðÉíÁÙÆä¾³¡£Ö§³ÅÆðÕâÅÓ´óÊÓÆµºéÁ÷µÄ¼¼ÊõÌôÕ½Ò²ÈÕÒæÑϾþ¡£´ø¿íµÄÏÞÖÆ¡¢·þÎñÆ÷µÄѹÁ¦¡¢ÒÔ¼°¸÷ÖÖÍøÂç»·¾³ÏµIJ»È·¶¨ÐÔ£¬¶¼¿ÉÄÜÈÃÓû§ÌåÑé˲¼ä±ÀËú¡£
ÔÚÕⳡ¶Ô¼«ÖÂÊÓÆµÌåÑéµÄ×·ÇóÖУ¬Nginx£¬Õâ¸öÒÔ¸ßÐÔÄܺÍÎȶ¨ÐÔÖø³ÆµÄWeb·þÎñÆ÷£¬ÕýÒÔÆä×îа汾µÄÇ¿´óÄÜÁ¦£¬³ÉΪʵÏÖ¡°100%ÊÓÆµÁ÷³©´«Ê䡱ÕâÒ»ºêΰĿ±êµÄ»ùʯ¡£
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµ´«ÊäÁìÓò´ó·ÅÒì²Ê£¬²¢·ÇżȻ¡£Ëü¾«ÇɵÄʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄ¼Ü¹¹£¬Ê¹ÆäÔÚ´¦Àí¸ß²¢·¢Á¬½Óʱ±íÏÖ³ö?׿ԽµÄÐÔÄÜ£¬Õâ¶ÔÓÚÐèҪͬʱ·þÎñº£Á¿Óû§¹Û¿´ÊÓÆµµÄÁ÷ýÌå·þÎñÆ÷À´ËµÖÁ¹ØÖØÒª¡£Ó봫ͳµÄ»ùÓÚ½ø³Ì»òÏ̵߳ķþÎñÆ÷Ïà±È£¬NginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬Î¬³Öº£Á¿µÄ²¢·¢Á¬½Ó£¬´Ó¶øÏÔÖø½µµÍÁË·þÎñÆ÷µÄÔËÐгɱ¾£¬²¢Ìá¸ßÁËÕûÌåµÄÍÌÍÂÁ¿¡£
ͨ¹ýÔÚNginxÖÐÆôÓÃHTTP/2£¨Í¨³£ÔÚlistenÖ¸ÁîÖÐÌí¼Óhttp2²ÎÊý£©£¬ÎÒÃÇ¿ÉÒÔÀûÓÃÕâЩÐÂÌØÐÔ£¬ÎªÊÓÆµÁ÷ýÌå·þÎñÌṩ¸ü¿ìµÄ¼ÓÔØËٶȺ͸üÁ÷³©µÄ¹Û¿´ÌåÑé¡£Õâ½ö½öÊÇNginxÊÓÆµÓÅ»¯Ö®ÂõĿª¶Ë£¬ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖ¸üÇ°ÑØµÄ¼¼ÊõºÍ²ßÂÔ£¬½«ÊÓÆµÌåÑéÍÆÏò¼«Ö¡£
Nginx100%ÊÓÆµÓÅ»¯£ºÓµ±§Î´À´£¬½âËø¼«ÖÂÁ÷ýÌåÌåÑé
ÔÚ¼áʵµÄ»ù´¡Ö®ÉÏ£¬NginxµÄÊÓÆµÓÅ»¯Ö®Â·²¢Î´Ö¹²½¡£ÎªÁËÓ¦¶ÔÈÕÒæÔö³¤µÄÁ÷ýÌåÐèÇóºÍ²»¶ÏÑݽøµÄÍøÂç¼¼Êõ£¬ÎÒÃÇ»¹ÐèÒªÒýÈë¸üÏȽøµÄÐÒé¡¢¸üÖÇÄܵÄÄÚÈÝ·Ö·¢²ßÂÔ£¬²¢?ÉîÈëÍÚ¾òNginxµÄÄ£¿é»¯Ç±Á¦¡£´ÓHTTP/3µÄ¸ïÃüÐÔÍ»ÆÆ£¬µ½±ßÔµ¼ÆËãµÄÇ¿´ó¸³ÄÜ£¬ÔÙµ½Õë¶Ô²»Í¬³¡¾°µÄ¶¨ÖÆ»¯ÅäÖã¬NginxÕýÒÔǰËùδÓеķ½Ê½£¬ÖØËÜ×ÅÁ÷ýÌåµÄδÀ´¡£
Nginx×îа汾ÒÔÆäÔÚCDN¡¢±ßÔµ¼ÆËã¡¢Ö±²¥¼¼Êõ¡¢ÊÓÆµ´¦ÀíµÈ¶à¸öά¶ÈµÄÈ«ÃæÍ»ÆÆ£¬ÕæÕýʵÏÖÁË¡°100%ÊÓÆµ²¥·Å100%¡±µÄ³Ðŵ¡£Ëü²»½öΪÓû§´ø?À´ÁËǰËùδÓеÄÁ÷³©¹ÛÓ°ÌåÑ飬¸üΪ¿ª·¢ÕߺÍÄÚÈÝÌṩÉÌÌṩÁ˹¹½¨ÏÂÒ»´úÊÓÆµÓ¦ÓõÄÇ¿´óƽ̨¡£ÎÞÂÛÄúÊÇÖÂÁ¦ÓÚÌṩ³¬¸ßÇåµã²¥·þÎñ£¬»¹Êǹ¹½¨ÊµÊ±»¥¶¯Ö±²¥Æ½Ì¨£¬Òà»òÊÇ̽Ë÷ÊÓÆµÄÚÈÝ´¦ÀíµÄÐÂģʽ£¬Nginx×îа汾¶¼½«ÊÇÄú²»¿É»òȱµÄÇ¿´óÖúÁ¦£¬ÒýÁìÄúÂõÏòÊÓÆµ¼¼ÊõÓ¦ÓõÄȫмÍÔª¡£
RTMP½ÓÊÕ£ºnginx-rtmp-module¼àÌýRTMP¶Ë¿Ú£¬½ÓÊÕÖ÷²¥µÄÍÆÁ÷¡£×ªÂë´¦Àí£ºNginx¿ÉÒÔ½«½ÓÊÕµ½µÄRTMPÁ÷ͨ¹ýexecÖ¸Áî´«µÝ¸øFFmpeg½ø³Ì½øÐÐתÂë¡£FFmpeg»á¸ù¾ÝÔ¤ÉèµÄתÂë¹æÔò£¬½«ÊÓÆµÊä³öΪHLS»òDASH¸ñʽµÄýÌåÇÐÆ¬ºÍ²¥·ÅÁÐ±í¡£
HTTP·Ö·¢£ºNginxÔÙÒÔHTTPÐÒ齫ÕâЩýÌåÇÐÆ¬ºÍ²¥·ÅÁбí·Ö·¢¸ø¹Û¿´Õß¡£
ÕâÖÖ¡°ÍÆ¡¢×ª¡¢·¢¡±Ò»Ì廯µÄ½â¾ö·½°¸£¬¼«´óµØ¼ò»¯ÁËÖ±²¥ÏµÍ³µÄ¼Ü¹¹£¬²¢ÇÒNginxµÄ¸ßÐÔÄÜÄܹ»±£Ö¤Ôڸ߲¢·¢ÍÆÁ÷ºÍתÂëÈÎÎñÏÂÒÀÈ»±£³Ö?Îȶ¨¡£µ±NginxµÄ´¦ÀíÄÜÁ¦´ïµ½¡°100¡±Ê±£¬ÕâÒâζ×ÅËü¿ÉÒÔͬʱ´¦ÀíÊýʮ·ÉõÖÁÉϰÙ·¸ßÇåRTMPÍÆÁ÷£¬²¢½«ÆäÁ÷³©?µØ×ªÂë³É¶àÖÖ×ÔÊÊÓ¦ÂëÂʵÄÁ÷ýÌ壬Ϊº£Á¿¹ÛÖÚÌṩÎÞ·ì¹Û¿´ÌåÑé¡£
µã²¥·þÎñÓëCDN·Ö·¢£ºNginxÇý¶¯µÄÈ«ÇòÊÓÆµÄÚÈÝ´¥´ï
¶ÔÓÚÊÓÆµµã²¥·þÎñ¶øÑÔ£¬µÍÑÓ³Ù¡¢¸ßËÙ¶ÈÊÇÓû§ÌåÑéµÄ¹Ø¼ü¡£NginxÔÚÕâÀï°çÑÝ×ÅÖÁ¹ØÖØÒªµÄ?½ÇÉ«£¬ÓÈÆäÊÇÔÚ¹¹½¨ÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©Ê±¡£
NginxÖ®ËùÒÔÄÜÔÚÊÓÆµÁ÷´«ÊäÁìÓòÍÑÓ±¶ø³ö£¬ÓëÆä¶ÀÌØµÄÉè¼Æ¼Ü¹¹Ãܲ»¿É·Ö¡£Ó봫ͳµÄ?»ùÓÚ½ø³ÌµÄWeb·þÎñÆ÷²»Í¬£¬Nginx²ÉÓÃÁËʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄI/OÄ£ÐÍ¡£ÕâÒâζ×ÅNginx¿ÉÒÔÓü«ÉٵĽø³Ì´¦Àí³ÉǧÉÏÍòµÄ²¢·¢Á¬½Ó£¬²¢ÇÒÿһ¸öÁ¬½ÓÔڵȴýI/O²Ù×÷ʱ£¬²¢²»»á×èÈûÕû¸ö½ø³Ì£¬¶øÊÇ¿ÉÒÔ¼ÌÐø´¦ÀíÆäËûÁ¬½ÓµÄÇëÇó¡£
¶ÔÓÚÊÓÆµÁ÷À´Ëµ£¬Õâ¼òÖ±ÊÇÁ¿Éí¶¨ÖÆ¡£ÊÓÆµÁ÷ÊdzÖÐøµÄ¡¢¸ß´ø¿íµÄ´«Ê䣬¶¯éüÐèҪά³ÖÊýǧÉõÖÁÊýÍò¸ö³¤Á¬½Ó¡£Èç¹ûʹÓô«Í³µÄ?»ùÓÚ½ø³Ì?µÄÄ£ÐÍ£¬Ã¿¸öÊÓÆµÁ¬½Ó¶¼¿ÉÄÜÏûºÄÒ»¸ö½ø³Ì£¬ºÜ¿ì¾Í»áºÄ¾¡·þÎñÆ÷×ÊÔ´£¬µ¼ÖÂÐÔÄÜÆ¿¾±¡£¶øNginxµÄʼþÇý¶¯Ä£ÐÍ£¬Äܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬ÇáËÉÓ¦¶Ôº£Á¿ÊÓÆµÁ¬½Ó¡£
ÏëÏóһϣ¬Ò»¸öNginx½ø³Ì¾ÍÏñÒ»¸ö¸ßЧµÄÖ¸»Ó¹Ù£¬Äܹ»Í¬Ê±´¦Àí³ÉǧÉÏÍò¸öÊ¿±ø£¨Á¬½Ó£©µÄÖ¸Á¶ø²»»áÒòΪij¸öÊ¿±øµÄÐÝÏ¢¶øÍ£ÖͲ»Ç°¡£
URIÖØÐ´Óë±äÁ¿£ºÀûÓÃNginxµÄrewriteÖ¸ÁîºÍ±äÁ¿£¬Áé»î´¦ÀíHLSµÄ?URL£¬ÀýÈ綯̬Éú³É´øÓÐʱЧÐԵIJ¥·ÅURL¡£×Ô¶¨ÒåÄ£¿é£º¶ÔÓÚ¸ü¸ß¼¶µÄHLS·Ö·¢ÐèÇó£¬È綯̬¼ÓÃÜ¡¢Ë®Ó¡Ìí¼ÓµÈ£¬¿ÉÒÔ¿¼ÂÇʹÓÃNginxµÄCÄ£¿é½øÐÐÀ©Õ¹¡£
DASH(DynamicAdaptiveStreamingoverHTTP)£ºDASHÐÒéÓëHLSÀàËÆ£¬Ò²Í¨¹ýһϵÁÐýÌ寬¶ÎÎļþ£¨Í¨³£ÊÇ.mp4»ò.webmƬ¶Î£©ºÍÒ»¸öMPD£¨MediaPresentationDescription£©ÎļþÀ´ÃèÊöýÌåÄÚÈÝ¡£
NginxµÄsendfileon;Ö¸Áî¿ÉÒÔ½øÒ»²½?ÓÅ»¯.tsÎļþµÄ´«ÊäЧÂÊ£¬Ö±½Ó½«Îļþ´Ó´ÅÅÌ·¢Ë͵½ÍøÂ磬¼õÉÙÄÚºË̬ºÍÓû§Ì¬Ö®¼äµÄ?Êý¾Ý¿½±´£¬ÌáÉýÍÌÍÂÁ¿¡£RangeÇëÇóÖ§³Ö£ºNginxÌìȻ֧³ÖHTTPRangeÇëÇó£¬Õâ¶ÔÓÚHLS²¥·ÅÆ÷ÔÚÐèÒªÊ±Ìøµ½ÊÓÆµµÄÌØ¶¨Î»Öã¨ÀýÈ磬µ±Óû§Í϶¯½ø¶ÈÌõʱ£©·Ç³£Óаï?Öú¡£
HTTP/2Ö§³Ö£ºÆôÓÃHTTP/2ÐÒé¿ÉÒÔÏÔÖøÌáÉýHLSµÄÐÔÄÜ£¬ÒòΪËüÖ§³Ö¶à·¸´Óã¬ÔÊÐíÔÚÒ»¸öTCPÁ¬½ÓÉÏͬʱ´«Êä¶à¸ö.tsÎļþ£¬¼õÉÙÁËÁ¬½Ó½¨Á¢µÄ¿ªÏúºÍÍøÂçÑÓ³Ù¡£
DynamicAdaptiveStreamingoverHTTP(DASH)£ºDASHÊÇHLSµÄ±ê×¼»¯°æ±¾£¬Í¬Ñù»ùÓÚHTTP£¬½«ÊÓÆµ·Ö¸î³ÉСƬ¶Î£¬²¢¸ù¾ÝÍøÂç×´¿öºÍÉ豸ÄÜÁ¦¶¯Ì¬µ÷Õû²¥·ÅÖÊÁ¿¡£NginxͬÑù¿ÉÒÔ¸ßЧµØ·Ö·¢DASHÁ÷¡£
NginxµÄDASHÖ§³Ö£ºÓëHLSÀàËÆ£¬NginxÖ÷Òª¸ºÔðDASHÁ÷µÄHTTP´«Êä¡£DASHʹÓÃ.mpd£¨MediaPresentationDescription£©Îļþ×÷Ϊ²¥·ÅÁÐ±í£¬²¢ÒýÓÃ.m4s£¨MPEG-4part14segment£©»òÆäËû¸ñʽµÄýÌ寬¶Î¡£
³ýÁË×÷Ϊ·Ö·¢ºÍ´«?ÊäµÄÇ¿´ó¹¤¾ß£¬Nginx×îа汾»¹ÎªÊÓÆµÄÚÈݵĴ¦ÀíºÍ¹ÜÀíÌṩÁ˸ü¶àµÄ¿ÉÄÜÐÔ¡£
ÓëFFmpegµÈ¹¤¾ßµÄ¼¯³É£ºNginx¿ÉÒÔͨ¹ý¸÷ÖÖ·½Ê½ÓëFFmpegµÈÇ¿´óµÄ?ÊÓÆµ´¦Àí¹¤¾ß¼¯³É¡£ÀýÈ磬¿ÉÒÔÔÚNginx×÷Ϊ·´Ïò´úÀíµÄǰ¶Ë£¬ÅäºÏFFmpegʵÏÖÊÓÆµµÄʵʱתÂë¡¢½ØÍ¼¡¢Ë®Ó¡Ìí¼ÓµÈ²Ù×÷¡£¶øÍ¨¹ýNginxµÄLuaÄ£¿é£¬ÉõÖÁ¿ÉÒÔÔÚÇëÇóµ½´ïºó¶Ë´¦Àí·þÎñ֮ǰ£¬½øÐÐһЩ³õ²½µÄÊÓÆµÔªÊý¾ÝÌáÈ¡»òУÑ飬Ìá¸ßÕûÌå´¦ÀíЧÂÊ¡£
APIÍø¹ØÓë΢·þÎñ¼Ü¹¹£ºÔÚÏÖ´ú»¯µÄÊÓÆµÆ½Ì¨¼Ü¹¹ÖУ¬Nginx³£³£°çÑÝAPIÍø¹ØµÄ?½ÇÉ«£¬¸ºÔðÇëÇóµÄ·ÓÉ¡¢ÈÏÖ¤¡¢ÏÞÁ÷µÈ¹¦ÄÜ¡£¶ÔÓÚÊÓÆµÉÏ´«¡¢×ªÂ롢ý×ʹÜÀíµÈ΢·þÎñ£¬NginxÄܹ»ÌṩͳһµÄÈë¿Ú£¬²¢¸ù¾Ý²»Í¬·þÎñµÄÌØµã½øÐÐÖÇÄÜ·Ö·¢¡£ÕâʹµÃ?ÊÓÆµÄÚÈݵĹÜÀí¸ü¼ÓÁé»îºÍ¸ßЧ¡£
ÖÇÄÜÊÓÆµ·ÖÎöÓëÄÚÈÝÉóºË£º½áºÏ»úÆ÷ѧϰºÍÈ˹¤ÖÇÄܼ¼Êõ£¬Nginx»¹¿ÉÒÔ×÷Ϊ±ß??Ôµ¼ÆËã½Úµã£¬²ÎÓëµ½ÊÓÆµÄÚÈݵÄÖÇÄÜ·ÖÎöºÍÉóºË¹ý³ÌÖС£ÀýÈ磬ÔÚÊÓÆµÁ÷´«Êä¹ý³ÌÖУ¬¿ÉÒÔÔÚ±ßÔµ½Úµã½øÐгõ²½µÄ»ÃæÊ¶±ð»òÉùÒô·ÖÎö£¬ÒÔ¼ì²â²»Á¼ÄÚÈÝ£¬²¢ÔÚµÚһʱ¼ä½øÐÐÀ¹½Ø»ò±ê¼Ç£¬´Ó¶ø±£ÕÏÆ½Ì¨ÄÚÈݵĽ¡¿µÉú̬¡£
http{#...otherhttpconfigurations...sendfileon;tcp_nopushon;tcp_nodelayon;}
BufferÅäÖãºNginxʹÓûº³å?ÇøÀ´´¦ÀíÇëÇóºÍÏìÓ¦¡£ºÏÀíµÄ»º³åÇøÅäÖöÔÓÚÊÓÆµ´«ÊäÐÔÄÜÖÁ¹ØÖØÒª¡£
client_body_buffer_size£º¿Í»§¶ËÇëÇóÌ壨ÀýÈçÉÏ´«ÊÓÆµ£©µÄ»º³åÇø´óС¡£client_header_buffer_size£º¿Í»§¶ËÇëÇóÍ·µÄ»º³åÇø´óС¡£large_client_header_buffers£ºÓÃÓÚ´¦Àí´óÐͿͻ§¶ËÇëÇóÍ·µÄ»º³åÇøÊýÁ¿ºÍ´óС¡£
output_buffers£ºÓÃÓÚÏò¿Í»§¶Ë·¢ËÍÏìÓ¦µÄ»º³åÇøÊýÁ¿ºÍ´óС¡£post_action£ºÔÊÐíÔÚ´¦ÀíÍêÇëÇóºó£¬Ö´ÐÐÒ»¸öPOSTÇëÇó¡£send_lowat£ºÉèÖÃsocketµÄlow-watermark¡£
¶ÔÓÚÊÓÆµ·þÎñ£¬¸üÖØÒªµÄÊÇoutput_buffersºÍaio_writeµÄÅäºÏ¡£ÔÚÆôÓÃsendfileʱ£¬aio_write£¨Èç¹ûϵͳ֧³Ö£©¿ÉÒÔ½øÒ»²½Ìá¸ßI/OЧÂÊ¡£
ÅäÖÃoriginserver£ºÔÚCDNÅäÖÃÖУ¬Nginx·þÎñÆ÷³äµ±×Å¡°Ô´Õ¾¡±µÄ½ÇÉ«¡£CDN½Úµã»á½«Óû§ÇëÇóµÄÊÓÆµÄÚÈÝ»º´æ?µ½±¾µØ£¬µ±Óû§·ÃÎÊʱ£¬Ê×ÏȴӾͽüµÄCDN½Úµã»ñÈ¡¡£Èç¹ûCDN½ÚµãûÓлº´æ£¬Ôò»áÏòNginxÔ´Õ¾·¢Æð»ØÔ´ÇëÇó£¬Nginx½ÓÊÕµ½ÇëÇóºó£¬½«ÊÓÆµÎļþ´«Ê䏸CDN½Úµã£¬CDN½ÚµãÔÙ½«ÄÚÈÝ·µ»Ø¸øÓû§¡£
proxy_cacheµÄÃîÓãºÔڴ˳¡¾°Ï£¬NginxµÄproxy_cache¹¦ÄܱäµÃÓÈÎªÖØÒª¡£Í¨¹ýÅäÖÃproxy_cache£¬Nginx¿ÉÒÔ»º´æÀ´×ÔCDNµÄÇëÇ󣬽øÒ»²½¼õÉÙԴվѹÁ¦£¬²¢¼ÓËÙCDN½ÚµãµÄ?»ØÔ´ËÙ¶È¡£
¸ßЧµÄ»º´æ»úÖÆ£ºNginxÓµÓÐÇ¿´óµÄ»º´æÄÜÁ¦£¬¿ÉÒÔ»º´æ¾²Ì¬Îļþ£¨°üÀ¨ÊÓÆµÆ¬¶Î£©ÒÔ¼°¶¯Ì¬Éú³ÉµÄÏìÓ¦¡£Í¨¹ý½«Æµ·±·ÃÎʵÄÊÓÆµÎļþ»º´æ?ÔÚÄÚ´æ»ò´ÅÅÌÖУ¬Nginx¿ÉÒÔ¼«´óµØ¼õÉÙ¶Ôºó¶Ë´æ´¢µÄ·ÃÎÊ´ÎÊý£¬´Ó¶øËõ¶ÌÏìӦʱ¼ä£¬Ìá¸ßÍÌÍÂÁ¿¡£¶ÔÓÚÊÓÆµ·þÎñ¶øÑÔ£¬ÕâÒâζ×ÅÓû§¿ÉÒÔ¸ü¿ìµØ»ñÈ¡µ½ËùÐèµÄÊÓÆµÄÚÈÝ£¬ÏÔÖøÌáÉýÁ˲¥·ÅÁ÷³©¶È¡£
Ä£¿é»¯Éè¼ÆÓë·á¸»µÄ?¹¦ÄÜ£ºNginxµÄÄ£¿é»¯Éè¼ÆÊ¹ÆäÓµÓм«Ç¿µÄ¿ÉÀ©Õ¹ÐÔ¡£³ýÁË»ù´¡µÄHTTP/HTTPS·þÎñ£¬Ëü»¹Ö§³ÖRTMP¡¢HLS¡¢DASHµÈ¶àÖÖÁ÷ýÌåÐÒ飬Äܹ»Ê¤ÈÎÖ±²¥ºÍµã²¥µÈ¶àÖÖÊÓÆµ·þÎñ³¡¾°¡£Æä·á¸»µÄÄ£¿é£¨Èçngx_http_flv_module¡¢ngx_http_mp4_moduleµÈ£©ÌṩÁ˶ÔÊÓÆµÎļþ¸ñʽµÄÉî¶ÈÖ§³Ö£¬Äܹ»½øÐÐÊÓÆµÁ÷µÄ·Ö¸î¡¢×ªÂ루ËäÈ»Nginx±¾Éí²»É󤸴ÔÓµÄ?תÂ룬µ«¿ÉÒÔÓëµÚÈý·½·þÎñ¼¯³É£©µÈ²Ù×÷£¬ÎªÊÓÆµ·þÎñÌṩÁËÇ¿´óµÄ¹¦ÄÜÖ§³Å¡£
server{listen443sslhttp2;server_nameyour_domain.com;#...sslconfigurations...#...otherconfigurations...}
ÅäÖÃʾÀý£¨HTTP/3£©£º£¨NginxÐèÒª±àÒëÖ§³ÖQUIC/HTTP/3£©
server{listen443sslhttp2quicreuseport;#QUICkeywordserver_nameyour_domain.com;#...sslconfigurations...#...otherconfigurations...}
GzipѹËõÓ뻺´æ²ßÂÔ£ºËäÈ»ÊÓÆµ±¾ÉíÊǶþ½øÖÆÊý¾Ý£¬Ö±½ÓGzipѹËõЧ¹ûÓÐÏÞ£¬µ«¶ÔÓÚÊÓÆµ²¥·ÅÒ³ÃæÖеÄHTML¡¢CSS¡¢JavaScriptÎļþ£¬ÒÔ¼°Ò»Ð©ÔªÊý¾Ý£¨Èç²¥·ÅÁÐ±í£©£¬GzipѹËõÄܹ»ÓÐЧµØ¼õС´«ÊäÌå»ý£¬¼Ó¿ìÒ³Ãæ¼ÓÔØËÙ¶È£¬¼ä½ÓÌáÉýÊÓÆµµÄÆô¶¯ÌåÑé¡£
¸üÖØÒªµÄÊÇ£¬NginxÇ¿´óµÄ?»º´æ»úÖÆ£¬¿ÉÒÔÓëGzip½áºÏʹÓ᣽«Ñ¹ËõºóµÄÄÚÈÝ»º´æÔÚä¯ÀÀÆ÷»òCDN±ßÔµ½Úµã£¬¿ÉÒÔʵÏÖ¸ü¿ìµÄ·ÃÎÊËÙ¶È¡£
worker_processesauto;#orsettoyourCPUcorecountevents{worker_connections4096;#Adjustbasedonyourserver'scapacity}
Keepalive_timeout£ºkeepalive_timeoutÓÃÓÚÉèÖÃHTTP³¤Á¬½ÓµÄ³¬Ê±Ê±¼ä¡£ÔÚÊÓÆµ²¥?·Å¹ý³ÌÖУ¬¿Í»§¶Ë»áƵ·±µØÏò·þÎñÆ÷ÇëÇóÊÓÆµÆ¬¶Î£¬±£³Ö³¤Á¬½Ó¿ÉÒÔ¼õÉÙ·´¸´½¨Á¢TCPÁ¬½ÓµÄ¿ªÏú£¬Ìá¸ß´«ÊäЧÂÊ¡£Ò»¸öºÏÊʵÄkeepalive_timeoutÖµ£¬±È?Èç60Ãë»ò75Ã룬¿ÉÒÔÆ½ºâÁ¬½ÓµÄ¸´ÓúͷþÎñÆ÷×ÊÔ´µÄÊÍ·Å¡£
HTTP-basedÊÓÆµÁ÷£¨HLS/DASH£©£ºNginx¶ÔHTTPÐÒéÓÐ×Å׿ԽµÄÖ§³Ö?¡£Í¨¹ýnginx-rtmp-module»òÆäËûµÚÈý·½Ä£¿é£¬Nginx¿ÉÒÔÇáËɵØ?½«RTMPÖ±²¥Á÷ת»»ÎªHLS»òDASH¸ñʽ£¬ÒÔ±ãÔÚWeb¶Ëͨ¹ýHTTPÐÒé½øÐв¥·Å¡£
HLSºÍDASHÐÒé¾ßÓÐ×ÔÊÊÓ¦ÂëÂʵÄÄÜÁ¦£¬¿ÉÒÔ¸ù¾ÝÓû§µÄÍøÂç×´¿ö×Ô¶¯µ÷ÕûÊÓÆµÖÊÁ¿£¬Ìṩ¸üÁ÷³©µÄ?¹Û¿´ÌåÑé¡£
HTTP/2ºÍHTTP/3£ºÉý¼¶µ½HTTP/2ÉõÖÁHTTP/3ÐÒ飬¿ÉÒÔ½øÒ»²½ÌáÉýÊÓÆµ´«ÊäµÄЧÂÊ¡£HTTP/2ͨ¹ý¶à·¸´Óá¢Í·²¿Ñ¹ËõµÈ¼¼Êõ£¬¼õÉÙÁËÁ¬½Ó¿ªÏúºÍÑÓ³Ù¡£HTTP/3»ùÓÚQUICÐÒ飬ÔÚÈõÍø»·¾³Ï±íÏÖ¸ü¼Ñ£¬Äܹ»ÓÐЧ½µµÍÊÓÆµ¿¨¶ÙµÄ¸ÅÂÊ¡£
Nginx¶ÔÕâЩÐÂÐÒéµÄÖ§³Ö£¬ÎªÊµÏÖ¼«ÖÂÁ÷³©µÄÊÓÆµÌåÑéÌṩÁ˸üÇ¿µÄ¼¼Êõ±£ÕÏ¡£
ÔÚʵ¼ÊµÄÊÓÆµ·þÎñÖУ¬½«¶¯¾²×ÊÔ´½øÐзÖÀ룬²¢½áºÏCDN£¨ContentDeliveryNetwork£©½øÐзַ¢£¬ÊÇÌáÉýÐÔÄܺÍÓû§ÌåÑéµÄ³£¼û²ßÂÔ¡£
¶¯¾²·ÖÀ룺Nginx¿ÉÒÔÇáËÉʵÏÖ¶¯¾²·ÖÀë¡£¶ÔÓÚÊÓÆµÎļþ£¨¾²Ì¬×ÊÔ´£©£¬¿ÉÒÔÖ±½ÓÓÉNginx¸ßЧµØÌṩ·þÎñ£»¶ø¶ÔÓÚÐèÒª·þÎñÆ÷¶Ë´¦ÀíµÄ¶¯Ì¬ÇëÇó£¨ÈçÓû§µÇ¼¡¢ÆÀÂ۵ȣ©£¬Ôò¿ÉÒÔ½«ÇëÇóת·¢¸øºó¶ËµÄÓ¦Ó÷þÎñÆ÷¡£ÕâÖÖ·ÖÀë²»½öÄܹ»¼õÇáÓ¦Ó÷þÎñÆ÷µÄѹÁ¦£¬Ò²ÄÜÈÃNginxרעÓÚÆä×îÉó¤µÄ¾²Ì¬Îļþ´«Êä¡£
CDN¼¯³É£ºNginxÊǹ¹½¨CDN±ßÔµ½ÚµãµÄºËÐÄ×é¼þÖ®Ò»¡£Í¨¹ýÔÚÈ«¹úÄËÖÁÈ«Çò²¿ÊðNginx½Úµã£¬¿ÉÒÔ½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄλÖᣵ±Óû§ÇëÇóÊÓÆµÊ±£¬ÇëÇó»á±»µ¼Ïò×î½üµÄCDN½Úµã£¬´Ó¶ø´ó´ó½µµÍÑÓ³Ù£¬ÌáÉý¼ÓÔØËÙ¶È£¬²¢¼õÇáÔ´Õ¾µÄѹÁ¦¡£
NginxµÄ¸ßÐÔÄܺ͵ͳɱ¾?£¬Ê¹Æä³ÉΪ¹¹½¨´ó¹æÄ£CDNÍøÂçµÄÀíÏëÑ¡Ôñ¡£
ÔÚÌṩÁ÷³©?ÊÓÆµÌåÑéµÄ±£ÕÏÊÓÆµÄÚÈݵݲȫºÍÎȶ¨·ÃÎÊͬÑùÖØÒª¡£NginxÌṩÁËÇ¿´óµÄ°²?È«¹¦ÄÜ¡£
HTTPS¼ÓÃÜ£ºÊ¹ÓÃSSL/TLSÖ¤ÊéΪÊÓÆµÁ÷ÌṩHTTPS¼ÓÃÜ£¬±£»¤Êý¾ÝÔÚ´«Êä¹ý³ÌÖеÄ?°²È«£¬·ÀÖ¹ÇÔÌýºÍ´Û?p¡£NginxµÄSSL/TLSÅäÖÃÊÇʵÏÖÕâÒ»µãµÄ¹Ø¼ü¡£·ÃÎÊ¿ØÖÆ£ºÍ¨¹ýallow¡¢denyÖ¸Á»òÕßÓëµÚÈý·½ÈÏ֤ϵͳ¼¯³É£¬¿ÉÒÔÏÞÖÆ¶ÔÌØ¶¨ÊÓÆµÄÚÈݵķÃÎÊ£¬·Àֹδ¾ÊÚȨµÄÏÂÔØ»ò·Ö·¢¡£
DDoS·À»¤£ºNginxµÄlimit_conn¡¢limit_reqÒÔ¼°Ò»Ð©°²È«Ä£¿é£¬¿ÉÒÔ°ïÖúµÖÓùDDoS¹¥»÷£¬È·±£ÊÓÆµ·þÎñµÄ¿ÉÓÃÐÔ¡£
ÎÒÃÇÐèÒªÀí½âNginxµÄºËÐÄÓÅÊÆ¡£NginxÒÔÆäʼþÇý¶¯¡¢Òì²½·Ç×èÈûµÄÍøÂçÄ£ÐͶøÎÅÃû£¬ÕâÒâζ×ÅËüÔÚ´¦Àí¸ß²¢·¢Á¬½Óʱ£¬Äܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬Ìṩ׿ԽµÄÐÔÄÜ¡£´«?ͳ·þÎñÆ÷ÔÚ´¦Àíÿ¸öÁ¬½Óʱ£¬¶¼ÐèÒª´´½¨Ò»¸ö¶ÀÁ¢µÄ½ø³Ì»òỊ̈߳¬ÕâÔڸ߲¢?·¢³¡?¾°Ï»áѸËٺľ¡ÏµÍ³×ÊÔ´¡£
¶øNginx²ÉÓõġ°¶à½ø³Ì/µ¥Ïß³Ì+ʼþÇý¶¯¡±Ä£Ê½£¬Ê¹µÃÒ»¸öÖ÷½ø³Ì¿ÉÒÔ¹ÜÀí¶à¸ö¹¤×÷½ø³Ì£¬Ã¿¸ö¹¤×÷½ø³ÌÓÖ¿ÉÒÔͨ¹ýepoll/kqueueµÈ¸ßЧµÄI/O¶à·¸´ÓûúÖÆ£¬Í¬Ê±´¦Àí³ÉǧÉÏÍòµÄÁ¬½Ó¡£
¶ÔÓÚÊÓÆµ·Ö·¢¶øÑÔ£¬ÕâÒâζ×Åʲô£¿ÊÓÆµÎļþͨ³£?½Ï´ó£¬Óû§²¢·¢¹Û¿´Á¿¾Þ´ó£¬¶Ô·þÎñÆ÷µÄÍÌÍÂÁ¿ºÍÁ¬½Ó¹ÜÀíÄÜÁ¦Ìá³öÁ˼«¸ßµÄÒªÇó¡£NginxµÄÕâÖּܹ¹£¬Ç¡ºÃÄܹ»¸ßЧµØÓ¦¶ÔÕâЩÌôÕ½¡£ËüÄܹ»ÇáËɵش¦ÀíÊýÍòÉõÖÁÊýÊ®ÍòµÄ²¢·¢Á¬½Ó£¬ÎªÃ¿¸ö¹Û¿´ÕßÌṩÎȶ¨¡¢¿ìËÙµÄ?ÊÓÆµÁ÷¡£
HTTPÐÒéϵÄÊÓÆµ·Ö·¢£ºÌôÕ½ÓëNginxµÄ½â¾ö·½°¸?
ÔçÆÚµÄÊÓÆµ·Ö·¢Ö÷ÒªÒÀÀµÓÚHTTPÐÒé¡£ËäÈ»HTTPÐÒéµÄÓ¦Óù㷺£¬µ«ÆäÔÚÊÓÆµÁ÷ýÌå´«Êä·½ÃæÒ²´æÔÚһЩ¹ÌÓеÄÌôÕ½£¬ÀýÈ磺
Nginx»¹ÌṩÁËÁ÷Á¿¿ØÖÆ£¨RateLimiting£©¹¦ÄÜ£¬ÕâÔÚÊÓÆµ·Ö·¢³¡¾°ÏÂÓÈÎªÖØÒª¡£Í¨¹ýÅäÖÃlimit_req_zoneºÍlimit_reqÖ¸ÁÎÒÃÇ¿ÉÒÔÏÞÖÆµ¥Î»Ê±¼äÄÚÀ´×ÔͬһIPµØÖ·µÄÇëÇóÊýÁ¿£¬ÓÐЧ·ÀÖ¹Òò¶ñÒâÅÀ³æ»òÍ»·¢Á÷Á¿¹¥»÷µ¼Ö·þÎñÆ÷¹ýÔØ£¬´Ó¶ø±£Ö¤Õý³£Óû§Äܹ»»ñµÃÎȶ¨Á÷³©µÄ¹Û¿´ÌåÑé¡£
¾«Ï¸µÄÁ÷Á¿¿ØÖÆÒ²¿ÉÒÔ°ïÖúÔËÓªÉ̸üºÃµØ¹ÜÀí´ø¿í×ÊÔ´£¬±Ü?ÃâijЩÓû§¹ý¶ÈÏûºÄ´ø¿í¶øÓ°ÏìÆäËûÓû§µÄ·þÎñÖÊÁ¿¡£
NginxÔÚHTTPS¼ÓÃÜ·½ÃæµÄÖ§³ÖÒ²ÊÇÊÓÆµÓÅ»¯µÄÒ»¸öÖØÒª×é³É²¿·Ö¡£ËäÈ»¼ÓÃÜ»á´øÀ´Ò»¶¨µÄÐÔÄÜ¿ªÏú£¬µ«?¶ÔÓÚ±£»¤Óû§Òþ˽ºÍÊý¾Ý°²È«ÖÁ¹ØÖØÒª¡£NginxÄܹ»¸ßЧµØ?´¦ÀíTLS/SSLÎÕÊÖ£¬²¢Í¨¹ýÖîÈçOCSPStapling¡¢SessionResumptionµÈ¼¼ÊõÀ´ÓÅ»¯HTTPSµÄÐÔÄÜ£¬×î´óÏ޶ȵؼõÉÙ¼ÓÃÜ´øÀ´µÄÑÓ³Ù£¬È·±£?ÊÓÆµ´«ÊäµÄ°²È«Óë¸ßЧ¡£
×ܶøÑÔÖ®£¬Nginxͨ¹ýÆäʼþÇý¶¯¼Ü¹¹¡¢Ç¿´óµÄ»º´æ»úÖÆ¡¢¶Ô×îÐÂHTTPÐÒéµÄ?Ö§³Ö?¡¢¸ßЧµÄѹËõËã·¨¡¢¾«Ï¸µÄÁ÷Á¿¿ØÖÆÒÔ¼°ÓÅ»¯µÄHTTPSʵÏÖ£¬Äܹ»È«ÃæÌáÉýÊÓÆµÄÚÈݵĴ«ÊäЧÂʺÍÓû§ÌåÑ飬ÊÇʵÏÖ¡°Nginx100%ÊÓÆµÓÅ»¯¡±²»?¿É»òȱµÄÀûÆ÷¡£
Nginx²¢·Ç½ö½öÊÇÒ»¸öͨÓõÄWeb·þÎñÆ÷£¬Ëü»¹ÓµÓÐÇ¿´ó?µÄÁ÷ýÌå´¦ÀíÄÜÁ¦¡£×îа汾ÔÚÁ÷ýÌåÄ£¿é·½Ãæ½øÐÐÁËÏÔÖøÔöÇ¿£¬Ê¹ÆäÄܹ»¸ü¸ßЧ¡¢¸üÁé»îµØ?´¦ÀíHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)µÈÖ÷Á÷µÄ×ÔÊÊÓ¦±ÈÌØÂÊÁ÷ýÌåÐÒé¡£
HLS/DASHµÄÉî¶ÈÓÅ»¯£ºNginxÄܹ»Ö±½Ó´¦ÀíÕâЩÐÒéÉú³ÉµÄ.m3u8ºÍ.mpd²¥·ÅÁбíÎļþ£¬²¢¸ßЧµØ?½«ÊÓÆµ·ÖƬ£¨.ts,.mp4µÈ£©´«Ê䏸¿Í»§¶Ë¡£×îа汾ÔÚ½âÎöºÍ·Ö·¢ÕâЩË÷ÒýÎļþʱ£¬½øÐÐÁËÐÔÄÜÓÅ»¯£¬¼õÉÙÁË·þÎñÆ÷¶ËµÄ´¦Àí¸ºµ£¡£
¶ÔÓÚÊÓÆµ·ÖƬ±¾ÉíµÄ»º´æºÍ¶ÁÈ¡£¬NginxҲͨ¹ý¸üÖÇÄܵÄËã·¨£¬Ìá¸ßÁË»º´æÃüÖÐÂÊ£¬¼õÉÙÁ˶Ժó¶Ë´æ´¢?µÄ·ÃÎÊѹÁ¦£¬´Ó¶ø¼Ó¿ìÁËÊÓÆµ²¥·ÅµÄÆô¶¯ËÙ¶È¡£¶¯Ì¬×ªÂëÓë·â×°µÄ¼¯³É£º¾¡¹ÜNginx±¾Éí²»ÊÇÒ»¸öרҵµÄתÂ빤¾ß£¬µ«Ëü¿ÉÒÔͨ¹ýÓëµÚÈý·½¹¤¾ß£¨ÈçFFmpeg£©µÄ¼¯³É£¬ÊµÏÖ¸ü¶¯Ì¬µÄ?ÊÓÆµ´¦ÀíÁ÷³Ì¡£
»º´æÊÇÌáÉýÊÓÆµ·ÃÎÊËÙ¶È×îÖ±½ÓÓÐЧµÄ·½Ê½Ö®Ò»¡£NginxÌṩÁËÇ¿´óµÄ»º´æ¹¦ÄÜ£¬¿ÉÒÔ¼«´ó?µØ¼õÇáÔ´·þÎñÆ÷µÄѹÁ¦£¬²¢Ëõ¶ÌÓû§·ÃÎÊÊÓÆµµÄÏìӦʱ¼ä¡£
Proxy_cache£ºµ±Nginx×÷Ϊ·´Ïò´úÀíʱ£¬proxy_cacheÖ¸ÁîÔÊÐíNginx»º´æºó¶Ë·þÎñÆ÷µÄÏìÓ¦¡£Í¨¹ýÅäÖÃproxy_cache_pathÀ´Ö¸¶¨»º´æÄ¿Â¼ºÍ²ÎÊý£¬²¢Ê¹ÓÃproxy_cacheÔÚlocation¿éÖÐÆôÓûº´æ¡£
»º´æ²ßÂÔ£º¿ÉÒÔ¸ù¾ÝURL¡¢ÇëÇóÍ·¡¢ÏìӦͷµÈ¶àÖÖÌõ¼þÀ´¶¨Ò建´æµÄ¼üÖµ£¬È·±£?»º´æµÄ׼ȷÐÔºÍÓÐЧÐÔ¡£»º´æ¹ýÆÚ£ºÀûÓÃproxy_cache_validÖ¸ÁîÉèÖò»Í¬HTTP״̬ÂëµÄ»º´æÊ±¼ä£¬È·±£»º´æµÄʱЧÐÔ¡£
BrowserCache(ä¯ÀÀÆ÷»º´æ)£º³ýÁË·þÎñÆ÷¶ËµÄ»º´æ£¬Òýµ¼Óû§ä¯ÀÀÆ÷»º´æÊÓÆµ×ÊԴͬÑùÖØÒª¡£Í¨¹ýexpiresºÍCache-ControlµÈHTTPÍ·£¬¿ÉÒÔָʾä¯ÀÀÆ÷»º´æÊÓÆµÎļþ£¬¼õÉÙÖØ¸´ÏÂÔØ¡£