ÔÚÊÓÆµÁ÷ýÌå´«ÊäÀú³ÌÖУ¬Êý¾ÝÇå¾²ºÍÓû§Òþ˽ÊDz»¿ÉºöÊӵĻ·½Ú¡£Nginx×îа汾ÔÚÇå¾²·½ÃæÍ¬ÑùÈ«Á¦ÒÔ¸°£¬ÖÜȫӵ±§TLS1.3£¬ÎªÓû§Ìṩ¸üÇå¾²¡¢¸ü˽ÃܵĹÛÓ°ÌåÑé¡£
TLS1.3µÄÐÔÄÜÓÅÊÆ£ºTLS1.3×÷ΪÐÂÒ»´úµÄ´«Êä²ãÇå¾²ÐÒ飬ÔÚ¼ÓÃÜËã·¨¡¢ÎÕÊÖÀú³ÌµÈ·½Ãæ¾ÙÐÐÁË´ó?·ù¶ÈµÄÓÅ»¯¡£Nginx¶ÔTLS1.3µÄÖÜȫ֧³Ö£¬²»µ«ÌṩÁ˸üÇ¿µÄ¼ÓÃÜÄÜÁ¦£¬µÖÓù¸üÖØ´óµÄÍøÂç¹¥»÷£¬¸üÖ÷ÒªµÄÊÇ£¬Æä¼ò»¯µÄÎÕÊÖÀú³Ì´ó·ùËõ¶ÌÁËÅþÁ¬½¨Éèʱ¼ä£¬¹ØÓÚÊÓÆµÁ÷µÄÆô¶¯ËÙÂÊÓÐ×ÅÆð¾¢µÄÓ°Ïì¡£
ÕâÒâζ×Å£¬Óû§ÔÚÌᳫÊÓÆµ²¥·ÅÇëÇóʱ£¬Äܹ»¸ü¿ìµØ½¨ÉèÇå¾²ÅþÁ¬£¬ïÔÌÆÚ´ýʱ¼ä¡£Ó²¼þ¼ÓËÙÓëÐÔÄÜÓÅ»¯£ºNginxÍŽáÏÖ´úÓ²¼þµÄ¼ÓÃܼÓËÙÄÜÁ¦£¬½øÒ»²½ÓÅ»¯ÁËTLS¼ÓÃÜÏ¢ÕùÃÜÀú³ÌµÄÐÔÄÜ¡£Í¨¹ýʹÓÃCPUµÄAES-NIµÈÖ¸Á£¬NginxÄܹ»ÒÔ¼«µÍµÄCPU¿ªÏúÍê³ÉTLS¼ÓÃܲÙ×÷£¬È·±£ÔÚÌṩǿʢÇå¾²±£»¤µÄ?²î³ØÊÓÆµ²¥·ÅµÄÁ÷ͨ¶ÈÔì³ÉÏÔ×ÅÓ°Ïì¡£
ÕâÖÖÈíӲ͎áµÄÓÅ»¯£¬ÊÇʵÏÖ¡°100%ÊÓÆµ²¥·Å¡±²»¿É»òȱµÄÒ»»·¡£
ҪʵÏÖ¡°100%¡±µÄÊÓÆµÐÔÄÜ£¬Àë²»¿ªÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©µÄÐ×÷¡£Nginx×÷ΪCDN±ßÑØ½ÚµãµÄ½¹µã×é¼þ£¬°ç?ÑÝ×ÅÖÁ¹ØÖ÷ÒªµÄ½ÇÉ«¡£
CDNµÄ½¹µãÍ·ÄÔÊǽ«Ô´Õ¾µÄÄÚÈݸ´ÖƵ½È«Çò¸÷µØµÄ¶à¸ö·þÎñÆ÷ÉÏ£¬µ±Óû§ÇëÇóÊÓÆµÊ±£¬CDN»á½«ÇëÇóµ¼ÏòÀëÓû§×î½üµÄ±ßÑØ½Úµã¡£NginxÔÚÕâЩ±ßÑØ½ÚµãÉÏ£¬Í¨¹ýÇ°ÃæÌáµ½?µÄ»º´æ»úÖÆ£¬Äܹ»¿ìËÙµØÏòÓû§ÌṩÊÓÆµ¡£
¼õÇáԴվѹÁ¦£º´ó²¿·ÖÁ÷Á¿ÓɱßÑØ½Úµã¼ç¸º£¬Ô´Õ¾Ö»ÐèÈÏÕæÄÚÈݵĸüкÍÉÙÁ¿Î´ÖÀÖлº´æµÄÇëÇó¡£½µµÍÑÓ³Ù£ºÓû§»á¼û×î½üµÄ½Úµã£¬´ó´óËõ¶ÌÁËÍøÂç´«Êä¾àÀ룬ÏÔÖø½µµÍÁËÊÓÆµ¼ÓÔØºÍ²¥·ÅµÄÑÓ³Ù¡£Ìá¸ß¿ÉÓÃÐÔ£º×ÝȻij¸ö±ßÑØ½Úµã·ºÆð¹ÊÕÏ£¬Óû§µÄÇëÇóÒ²¿ÉÒÔ±»µ¼ÏòÆäËû¿ÉÓýڵ㣬ȷ±£·þÎñµÄÒ»Á¬ÐÔ¡£
ÔÚCDN¼Ü¹¹ÖУ¬Nginxͨ³£×÷Ϊ·´Ïò´úÀí°²ÅÅÔÚ±ßÑØ½Úµã£¬ÎüÊÕÀ´×ÔÓû§µÄÇëÇó£¬È»ºóƾ֤»º´æÕ½ÂÔ¾ÙÐд¦Öóͷ£¡£ÈôÊÇ»º´æÖÀÖУ¬ÔòÖ±½ÓÏìÓ¦£»ÈôÊÇ»º´æÎ´ÖÀÖУ¬Ôò½«ÇëÇóת·¢¸øÉÏÒ»¼¶µÄ»º´æ·þÎñÆ÷»òÔ´Õ¾£¬²¢½«»ñÈ¡µ½µÄÄÚÈÝ»º´æÆðÀ´£¬ÒÔ±¸ºóÐøÊ¹Óá£
ÊÓÆµÄÚÈÝ£¬ÓÈÆäÊÇÖ±²¥ºÍVOD£¨VideoOnDemand£©£¬ÍùÍùÉæ¼°µ½¶¯Ì¬ÌìÉúºÍ·Ö·¢¡£Nginx×îа汾ÔÚ¶¯Ì¬ÄÚÈݵĴ¦Öóͷ£»ººÍ´æÕ½ÂÔÉϾÙÐÐÁËÏÔÖøµÄˢУ¬ÒÔ½øÒ»²½ÌáÉýÊÓÆµµÄ¼ÓÔØËÙÂʺͲ¥·ÅÁ÷ͨ¶È¡£
¸üÖÇÄܵĻº´æ»úÖÆ£ºNginxǿʢµÄ»º´æÄÜÁ¦Ò»Ö±±¸ÊÜÔÞÓþ¡£×îаæ?±¾ÔÚ´Ë»ù´¡ÉÏ£¬ÒýÈëÁËÔ½·¢ÖÇÄܵĻº´æÕ½ÂÔ¡£ÀýÈ磬ËüÄܹ»¸üºÃµØÊ¶±ðÊÓÆµÎļþµÄÌØÕ÷£¬Èç·ÖƬÊÓÆµ£¨HLS,DASH£©µÄ¸÷¸öƬ¶Ï£¬²¢Æ¾Ö¤ÕâЩƬ¶ÏµÄ»á¼ûƵÂʺÍʱЧÐÔ£¬¾ÙÐиüϸÄ廯µÄ»º´æ¹ÜÀí¡£
ÕâʹµÃÓû§ÔÚÇëÇóÊÓÆµÆ¬¶Ïʱ£¬Äܹ»ÓÅÏÈ´ÓÍâµØ»ò±ßÑØ½Úµã»º´æÖлñÈ¡£¬´ó´ó½µµÍÁË»ØÔ´Ñ¹Á¦£¬Ò²ÏÔÖøËõ¶ÌÁËÊÓÆµµÄ¼ÓÔØÊ±¼ä¡£
¸ßЧµÄÁ÷ýÌåÖ§³Ö?£ºNginxºã¾ÃÒÔÀ´¶¼ÊÇÁ÷ýÌå´«ÊäµÄÀûÆ÷£¬Ö§³ÖRTMP¡¢HLS¡¢DASHµÈ¶àÖÖÁ÷ýÌåÐÒé¡£×îа汾½øÒ»²½ÔöÇ¿Á˶ÔÕâЩÐÒéµÄÆÊÎöºÍ·Ö·¢ÄÜÁ¦£¬ÓÅ»¯ÁËÊÓÆµÖ¡µÄ´ò°ü?ºÍ´«ÊäÀú³Ì£¬ïÔÌÁ˲»ÐëÒªµÄÑӳٺͿ¨¶Ù¡£ÎÞÂÛÊÇÖ±²¥Õվɵ㲥£¬Nginx¶¼ÄÜÌṩÎȹ̡¢µÍÑӳٵĴ«Êä°ü¹Ü¡£
4.Ä£¿é»¯Éè¼ÆÓë¿ÉÀ©Õ¹ÐÔ£ºÎªÊÓÆµ³¡¾°Á¿Éí¶¨ÖÆµÄÎÞаÐÔ
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Ò²»á´ÓÔ´Õ¾ÀÈ¡£¬²¢½«Æä»º´æÆðÀ´£¬¹©ºóÐøÓû§Ê¹Óá£
HTTP/2ºÍHTTP/3Ö§³Ö£ºNginx¶ÔHTTP/2ºÍHTTP/3ÐÒéµÄÖ§³Ö£¬½øÒ»²½ÌáÉýÁËÊÓÆµ´«ÊäµÄЧÂÊ¡£HTTP/2ÒýÈëÁ˶à·¸´ÓúÍÍ·²¿Ñ¹Ëõ£¬ïÔÌÁËÅþÁ¬¿ªÏú£»¶øHTTP/3Ôò»ùÓÚQUICÐÒ飬½â¾öÁËTCPµÄ¶ÓÍ·ÛÕ±ÕÎÊÌ⣬¹ØÓÚÊÓÆµÁ÷ÕâÖÖ¶ÔÑÓ³ÙÃô¸ÐµÄÓ¦ÓÃÓÈÆäÓÐÀû¡£
¶¯Ì¬ÄÚÈݼÓËÙ£º×ÝÈ»ÊǶ¯Ì¬ÌìÉúµÄÄÚÈÝ£¬NginxÒ²¿ÉÒÔͨ¹ý¸ßЧµÄÅþÁ¬ÊÜÀíºÍ·´Ïò´úÀíÄÜÁ¦£¬½«Æä¿ìËÙµØ×ª´ï¸øÓû§¡£
ͨ¹ýÔÚÈ«Çò¸÷µØ?°²ÅÅ´ó×ÚµÄNginx½Úµã£¬²¢ÅäºÏ¸ßЧµÄ·ÓÉÕ½ÂÔ£¬NginxÄܹ»½«ÊÓÆµÄÚÈÝ¡°ÍÆËÍ¡±µ½ÀëÓû§×î½üµÄµØ?·½£¬¹¹½¨Ò»¸öÁýÕÖÈ«ÇòµÄÊÓÆµ·Ö·¢ÍøÂç¡£µ±NginxµÄÄÜÁ¦±»?¡°100¡±±¶ÊÍ·Åʱ£¬ËüÒâζ×ÅÊýÒÔÍò¼ÆµÄ±ßÑØ½ÚµãÄܹ»ÒÔ¼«¸ßµÄЧÂÊ»º´æºÍ·Ö·¢º£Á¿ÊÓÆµÄÚÈÝ£¬ÈÃÌìϸ÷µØµÄÓû§¶¼ÄÜÏíÊܵ½ÈçË¿°ã˳»¬µÄԢĿÌåÑé£¬ËÆºõÊÓÆµÄÚÈݾ͡°×¡¡±ÔÚËûÃǼÒÃſڡ£
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Ö®ÒÔÊÇÄܹ»ÊµÏÖ¡°100%ÊÓÆµÐÔÄÜ¡±£¬²¢·ÇÒ»¸ö¼òÆÓµÄ±ê?Ç©£¬¶øÊÇÆä±³ºóǿʢÊÖÒռܹ¹¡¢ÎÞаµÄÄ£¿é»¯Éè¼ÆÒÔ¼°Ï¸Ä廯µ÷ÓŵÄЧ¹û¡£´Ó¸ßЧ´¦Öóͷ£º£Á¿²¢·¢ÅþÁ¬£¬µ½ÖÇÄÜ»¯µÄ»º´æÕ½ÂÔ£¬ÔÙµ½¶ÔRTMP¡¢HLS¡¢DASHµÈ?Á÷ýÌåÐÒéµÄÓÐÁ¦Ö§³Ö£¬NginxΪÊÓÆµ·Ö·¢ÁìÓòÌṩÁ˼áʵµÄ»ù´¡¡£
ͨ¹ý½«Nginx°²ÅÅÔÚCDN±ßÑØ½Úµã£¬²¢ÍŽáÆäǿʢµÄÁ÷ýÌå´¦Öóͷ£ÄÜÁ¦ºÍÒ»Á¬µÄÐÔÄܵ÷ÓÅ£¬ÎÒÃÇ¿ÉÒÔ¹¹½¨³öÕæÕý×öµ½µÍÑÓ³Ù¡¢¸ß¿ÉÓᢸßÍÌÍÂÁ¿µÄÊÓÆµ·Ö·¢ÏµÍ³¡£ÎÞÂÛÄúÊÇÐèÒª´î½¨Ò»¸öÃæÏòÈ«ÇòÓû§µÄÊÓÆµµã²¥Æ½Ì¨£¬ÕÕ¾ÉÒ»¸öʵʱ»¥¶¯µÄÖ±²¥·þÎñ£¬Nginx¶¼½«ÊÇÄúʵÏÖÁ÷ͨ¡¢×¿Ô½ÊÓÆµÌåÑéµÄµÃÁ¦ÖúÊÖ£¬ÎªÄúÕ¹ÏÖ²¢ÊµÏÖÊÓÆµÐÔÄܵÄÎÞÏÞ¿ÉÄÜ¡£
·ÖƬ¾ÞϸºÍ¾àÀ룺HLS/DASHµÄ²¥·ÅÌåÑéºÜºéÁ÷ƽÉÏÈ¡¾öÓÚýÌåÇÐÆ¬µÄÌìÉú¡£ºÏÀíÉèÖÃÇÐÆ¬¾ÞϸºÍ¾àÀ룬¿ÉÒÔÆ½ºâÆô¶¯ËÙÂʺͲ¥·ÅÁ÷ͨ¶È¡£GOP£¨GroupofPictures£©½á¹¹£ºÊÓÆµ±àÂëÖеÄGOP½á¹¹¶ÔÒªº¦Ö¡µÄÂþÑÜÓÐÓ°Ï죬ӰÏìHLS/DASHµÄÇÐÆ¬½çÏߣ¬´Ó¶øÓ°Ïì¿ì½ø¿ìÍ˵ÄÌåÑé¡£
Adaptivity£¨×Ô˳Ӧ£©£ºNginx¿ÉÒÔÅäºÏFFmpegµÈ?¹¤¾ß£¬ÌìÉú²î±ðÂëÂʺÍÇø·ÖÂʵÄýÌåÁ÷£¬¹©¿Í»§¶Ë¾ÙÐÐ×Ô˳ӦÇл»£¬Ìṩ¸üºÃµÄԢĿÌåÑé¡£
WebRTCµÄ¼¯³É£º¹ØÓÚÐèÒªµÍÑÓ³Ùʵʱ½»»¥µÄÓ¦Óó¡¾°£¬WebRTCµÄ¼¯³É±ä?µÃÔ½À´Ô½Ö÷Òª¡£ËäÈ»Nginx×Ô¼º²»Ö±½ÓÖ§³ÖWebRTC£¬µ«¿ÉÒÔͨ¹ýµÚÈý·½Ä£¿é£¨Èçnginx-rtsp-to-webrtc£©»òÓëÆäËûWebRTC·þÎñÆ÷ÅäºÏʹÓã¬ÊµÏÖÊÓÆµÁ÷µÄWebRTC´«Êä¡£
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¶ÔÊÓÆµ´«ÊäÐÔÄܵÄÓ°Ïì¡£
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µÄ×î¼Ñʵ¼ù
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ÄÜÁ¦µÄÖÜÈ«ÊÍ·Å¡£
NginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµÓÅ»¯ÁìÓò´ó·ÅÒì²Ê£¬Àë²»¿ªÆäµ×²ã¼Ü¹¹µÄ¾«ÃîÉè¼Æ¡£Óë¹Å°åµÄÛÕ±ÕʽI/OÄ£×Ó²î±ð£¬Nginx½ÓÄÉÁË·ÇÛÕ±Õ¡¢ÊÂÎñÇý¶¯µÄI/O¶à·¸´ÓÃÊÖÒÕ¡£ÕâÒâζ×Å£¬Nginx¿ÉÒÔͬʱ´¦Öóͷ£³ÉǧÉÏÍòµÄ²¢·¢ÅþÁ¬£¬¶øÎÞÐèΪÿ¸öÅþÁ¬½¨Éè×ÔÁ¦µÄÀú³Ì»òÏ̡߳£
ÕâÖÖ¸ßЧµÄ×ÊԴʹÓ÷½·¨£¬¼«´óµØÌáÉýÁË·þÎñÆ÷µÄ²¢·¢´¦Öóͷ£ÄÜÁ¦£¬¹ØÓÚÐèҪͬʱÏò´ó×ÚÓû§·Ö·¢ÊÓÆµÊý¾ÝµÄÁ÷ýÌå·þÎñÆ÷¶øÑÔ£¬ÆäÓÅÊÆ²»ÑÔ¶øÓ÷¡£
¸üÖ÷ÒªµÄÊÇ£¬NginxÔÚ¾²Ì¬Îļþ´«Êä·½ÃæÓµÓм«¸ßµÄЧÂÊ¡£ÊÓÆµÎļþ£¬ÓÈÆäÊǾÓÉÓÅ»¯µÄýÌåÎļþ£¬ÊµÖÊÉÏÊÇ´óÐ͵ľ²Ì¬×ÊÔ´¡£Nginxͨ¹ýÆäϸÄåµÄ»º´æ»úÖÆ¡¢¸ßЧµÄ·¢ËÍÎļþ£¨sendfile£©ÏµÍ³Å²ÓÃÒÔ¼°¾«¼òµÄHTTPÍ·²¿´¦Öóͷ££¬Äܹ»ÒÔ¼«¿ìµÄËÙÂʽ«ÊÓÆµÊý¾Ý´Ó´ÅÅÌ·¢Ë͵½¿Í»§¶Ë¡£
ÕâÖ±½Óת»¯Îª¸ü¶ÌµÄ¼ÓÔØÊ±¼ä£¬¸üÉٵķþÎñÆ÷CPUÕ¼Óã¬ÒÔ¼°¸ü¸ßµÄÍÌÍÂÁ¿¡£
ͨ¹ýÔÚÐÒé¡¢ÐÔÄܺÍÇå¾²µÈ½¹µã²ãÃæµÄÖÜÈ«Éý¼¶£¬Nginx×îа汾ÒѾΪʵÏÖ¡°100%ÊÓÆµ²¥·Å100%¡±´ò?ÏÂÁ˼áʵµÄ»ù´¡¡£Ëü²»µ«½öÊÇÒ»¸öWeb·þÎñÆ÷£¬¸üÊÇÒ»¸öΪÊÓÆµÁ÷ýÌåÁ¿Éí´òÔìµÄǿʢÒýÇæ£¬ÕýÒÔØ¨¹ÅδÓеÄ×Ë̬£¬ÒýÁì×ÅÊÓÆµ²¥·ÅÌåÑéµÄˢС£
Nginx100%ÊÓÆµ²¥·Å100%£º¸³ÄܶàÔª»¯³¡¾°£¬½âËøÎÞÏÞ¿ÉÄÜ
Nginx×îа汾ÔÚÊÓÆµÁ÷ýÌåÁìÓòÕ¹ÏÖ³öµÄǿʢʵÁ¦£¬²»µ«½öÌåÏÖÔڵײãÊÖÒÕµÄÓÅ»¯£¬¸üÔÚÓÚÆäÄܹ»¸³ÄÜÖÖÖÖ¶àÔª»¯µÄÊÓÆµÓ¦Óó¡¾°£¬Îª¿ª·¢ÕߺÍÄÚÈÝÌṩÉ̽âËøÁËÎÞÏ޵ĿÉÄÜ¡£´Ó¸ßÇåµã²¥µ½µÍÑÓ³Ù?Ö±²¥£¬´Ó±ßÑØÅÌËãµ½CDN¹¹½¨£¬NginxÕý³ÉΪÇý¶¯ÏÂÒ»´úÊÓÆµÌåÑéµÄÒªº¦Á¦Á¿¡£
¹ØÓÚÁ÷ýÌåÊÓÆµ£¬ÓÈÆäÊǵ㲥ºÍÖ±²¥£¬Í¨³£½ÓÄÉ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¿ÉÒÔͨ¹ý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ÐÒ飬ʵÏÖÖ±²¥ÍÆÁ÷ºÍ²¥·Å¡£
Nginx»¹¿ÉÒÔÅäºÏHLS(HTTPLiveStreaming)»òDASH(DynamicAdaptiveStreamingoverHTTP)µÈ×Ô˳ӦÂëÂÊÁ÷ýÌåÐÒ飬½«ÊÓÆµÇзֳÉС¶Î£¬²¢ÌìÉú²¥·ÅÁÐ±í¡£Nginx¿ÉÒÔ¸ßЧµØ·Ö·¢ÕâЩÊÓÆµÆ¬¶ÏºÍ²¥·ÅÁÐ±í£¬Ê¹²¥·ÅÆ÷Äܹ»Æ¾Ö¤Óû§µÄÍøÂç״̬¶¯Ì¬µ÷½âÊÓÆµÂëÂÊ£¬ÌṩÁ÷ͨ?µÄԢĿÌåÑ飬ÓÐÓýâ¾öÒòÍøÂ粨¶¯µ¼ÖµĿ¨¶ÙÎÊÌâ¡£
CDNÄÚÈÝ·Ö·¢ÍøÂ磺ÔÚ¹¹½¨CDNʱ£¬NginxÊÎÑÝ×ÅÖÁ¹ØÖ÷ÒªµÄ½ÇÉ«¡£CDNµÄ½¹µãÔÚÓÚ½«ÄÚÈÝ·Ö·¢µ½ÀëÓû§×î½üµÄ±ßÑØ½Úµã£¬ÒÔËõ¶Ì»á¼ûÑÓ³Ù£¬Ìá¸ß»á¼ûËÙÂÊ¡£Nginx¿ÉÒÔ°²ÅÅÔÚ¸÷¸öCDN±ßÑØ½ÚµãÉÏ£¬×÷ΪÄÚÈÝ»º´æ·þÎñÆ÷ºÍÁ÷Á¿½ÓÈëµã¡£µ±Óû§ÇëÇóÊÓÆµÊ±£¬ÇëÇó»áÊ×Ïȵִï¾Í½üµÄCDN½Úµã£¬ÈôÊÇÄÚÈÝÒÑ»º´æ£¬Nginx»áÖ±½ÓÌṩ·þÎñ£»ÈôÊÇûÓлº´æ£¬Nginx»á»ØÔ´Õ¾»ñÈ¡£¬²¢ÔÚÍâµØ»º´æ£¬¹©ºóÐøÓû§Ê¹Óá£
NginxµÄ¸ßÐÔÄܺ͵Í×ÊÔ´ÏûºÄ£¬Ê¹Æä³ÉΪ¹¹½¨´ó¹æÄ£¡¢¸ßЧÂÊCDNµÄÀíÏëÑ¡Ôñ£¬´Ó¶øÊµÏÖ¡°100%ÊÓÆµ¡±µÄ¿ìËÙ´¥´ï¡£
¡°100%ÊÓÆµÐÔÄÜ¡±²»ÊÇÒ»õí¶ø¾ÍµÄ£¬ÐèÒªÒ»Á¬µÄ¼à¿ØºÍµ÷ÓÅ¡£
NginxStatusÄ£¿é£ºÆôÓÃNginxµÄstub_statusÄ£¿é£¬¿ÉÒÔʵʱÉó²éNginxµÄÅþÁ¬Êý¡¢ÇëÇóÊýµÈÒªº¦Ö¸±ê¡£µÚÈý·½¼à¿Ø¹¤¾ß£º¼¯³ÉPrometheus¡¢Grafana¡¢ELK(Elasticsearch,Logstash,Kibana)µÈ¹¤¾ß£¬¶ÔNginxµÄÐÔÄÜÖ¸±ê¡¢¹ýʧÈÕÖ¾¡¢»á¼ûÈÕÖ¾¾ÙÐÐÖÜÈ«µÄÍøÂç¡¢ÆÊÎöºÍ¿ÉÊÓ»¯£¬ÊµÊ±·¢Ã÷ÐÔÄÜÆ¿¾±¡£
ѹÁ¦²âÊÔ£º°´ÆÚ¾ÙÐÐѹÁ¦²âÊÔ£¬Ä£ÄâÕæÊÊÓû§³¡?¾°£¬ÕÒ³öNginxÔڸ߸ºÔØÏµÄÐÔÄܼ«ÏÞ£¬²¢Æ¾Ö¤²âÊÔЧ¹û¾ÙÐвÎÊýµ÷½â¡£
HLS/DASHÁ÷ʽ´«ÊäµÄÉèÖ㺹ØÓÚ¸ü¸ß¼¶µÄÁ÷ýÌå´«ÊäÐÒ飬ÈçHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)£¬Nginx¿ÉÒÔͨ¹ýÉèÖÃlocation¿éÀ´´¦Öóͷ£.m3u8ºÍ.mpdÎļþ£¬²¢ÌṩÏìÓ¦µÄ?ýÌåÇÐÆ¬£¨.ts»ò.m4s£©¡£
M3u8/MpdÎļþµÄ»º´æ£ºHLS/DASHµÄ²¥·ÅÒÀÀµÓÚË÷ÒýÎļþ£¨.m3u8/.mpd£©ºÍýÌåÇÐÆ¬¡£¶ÔÕâЩÎļþ¾ÙÐÐÓÐÓõÄ?»º´æ¿ÉÒÔ¼«´óµØÌá¸ß²¥·ÅµÄÆô¶¯ËÙÂÊ¡£ÇÐÆ¬ÎļþµÄ»º´æ£ºÃ½ÌåÇÐÆ¬ÊÇÊÓÆµ²¥·ÅµÄ½¹µã£¬¶ÔÆä¾ÙÐиßЧ»º´æÖÁ¹ØÖ÷Òª¡£
ËäÈ»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ÐÒéµÄ¸ºÔØÆ½ºâ£¬¿ÉÒÔδÀ´×Ô²»?Í¬ÍÆÁ÷¶ËµÄÖ±²¥?Á÷·ÖÅɵ½²î±ðµÄºó¶Ë·þÎñÆ÷£¬»òÕßδÀ´×Ô¶à¸öԢĿ¶ËµÄÇëÇó·Ö·¢µ½²î±ðµÄÁ÷ýÌå·þÎñÆ÷£¬È·±£·þÎñµÄÎȹÌÐԺ͸߿ÉÓÃÐÔ¡£
С½á£ºNginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµÓÅ»¯ÁìÓòÍÑÓ±¶ø³ö£¬ÕýÊÇÓÉÓÚËüÔÚÍøÂç´«Êä¡¢ÐÒéÖ§³Ö¡¢Îļþ·þÎñ»ººÍ´æÕ½ÂԵȷ½Ãæ¶¼¾ß±¸Ç¿Ê¢µÄÄÜÁ¦¡£Í¨¹ý¶Ôsendfile¡¢HTTP/2¡¢BBR¡¢HLS/DASHÖ§³ÖÒÔ¼°proxy_cacheµÈ½¹µãÉèÖõÄÉîÈëÃ÷È·ºÍºÏÀíÔËÓã¬ÎÒÃÇÒѾΪ¹¹½¨¸ßЧµÄÊÓÆµÁ÷ýÌå·þÎñ´òÏÂÁ˼áʵµÄ»ù´¡¡£
Õâ½ö½öÊÇ×îÏÈ¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«½øÒ»²½Ì½Ë÷NginxÔÚCDN¼¯³É¡¢Á÷Á¿µ÷Àí¡¢Çå¾²·À»¤ÒÔ¼°¶¯Ì¬ÓÅ»¯·½ÃæµÄ½ø½×¼¼ÇÉ£¬ÒÔÆÚµÖ´ï¡°100%ÊÓÆµÓÅ»¯¡±µÄ×îÖÕÄ¿µÄ¡£
µ±Êý¾ÝµÖ´ïʱ£¬Nginx»áÁ¬Ã¦´¦Öóͷ££¬¶ø²»?ÊÇÆÚ´ýÊý¾Ý´«ÊäÍê±Ï¡£ÕâʹµÃNginxÔÚ´¦Öóͷ£´ó×ÚСÎļþ´«Ê䣬»òÕßÏñÊÓÆµÁ÷ÕâÑùÒ»Á¬±¬·¢Êý¾ÝµÄ³¡¾°Ï£¬ÌåÏÖÓÈΪ¾«²Ê£¬×èÖ¹ÁËÒòÛÕ±ÕI/OÔì³ÉµÄÐÔÄÜÆ¿¾±¡£WorkerÀú³ÌÉè¼Æ£ºNginxµÄMasterÀú³ÌÈÏÕæ¹ÜÀíWorkerÀú³Ì?£¬¶øWorkerÀú³ÌÔòÈÏÕæ´¦Öóͷ£ÏÖʵµÄÍøÂçÇëÇó¡£
ÕâÖÖÊèÉ¢Éè¼ÆÊ¹µÃNginxÄܹ»³ä·ÖʹÓöàºËCPUµÄÓÅÊÆ£¬Ã¿¸öWorkerÀú³Ì¿ÉÒÔÔËÐÐÔÚÒ»¸öCPU½¹µãÉÏ£¬ÊµÏÖÕæÕýµÄ²¢Ðд¦Öóͷ£¡£¹ØÓÚÊÓÆµ´«ÊäÕâÖÖÐèҪǿʢÅÌËãÄÜÁ¦ºÍI/OÄÜÁ¦µÄʹÃü£¬¶àWorkerÀú³ÌµÄ?ÐͬÊÂÇéÄܹ»ÏÔÖøÌáÉýÕûÌåÍÌÍÂÁ¿¡£
¶þ¡¢½¹µã¹¦Ð§ÓÅ»¯£ºNginxÔõÑùʵÏÖ¡°100%ÊÓÆµÐÔÄÜ¡±
NginxÄܹ»ÊµÏÖ¿¿½ü¡°100%ÊÓÆµÐÔÄÜ¡±²¢·ÇÎÞÒ⣬¶øÊÇÆäÄÚÖõÄ?ǿʢ¹¦Ð§ÓëϸÄ廯ÉèÖÃÅäºÏ×÷ÓõÄЧ¹û¡£
¸ßЧµÄ¾²Ì¬Îļþ·þÎñ£ºÊÓÆµÎļþͨ³£ÊǾ²Ì¬ÄÚÈÝ£¬NginxÔÚ¾²Ì¬Îļþ·þÎñ·½ÃæÓµÓÐÎÞ¿ÉÏà±ÈµÄÓÅÊÆ¡£ËüÄܹ»ÒÔ¼«¿ìµÄËÙÂÊÖ±½Ó´Ó´ÅÅ̶ÁÈ¡Îļþ£¬²¢Í¨¹ýsendfileϵͳŲÓ㬽«ÎļþÊý¾ÝÖ±½Ó´ÓÄں˿ռ䴫Êäµ½ÍøÂçÌ×½Ó×Ö£¬ÈƹýÁËÓû§¿Õ¼ä£¬¼«´ó?µØïÔÌÁËCPUºÍÄÚ´æµÄ¿½±´¿ªÏú£¬ÏÔÖøÌáÉýÁËÎļþ´«ÊäЧÂÊ¡£
³ýÁË»ù´¡ÉèÖã¬NginxÔÚ´¦Öóͷ£Ìض¨ÊÓÆµÁ÷ÐæÅºÍ³¡¾°Ê±£¬ÉÐÓиü½øÒ»²½µÄ?ÓÅ»¯ºÍÓ¦Óá£
RTMPÄ£¿é£ºNginx²¢²»Ö±½ÓÖ§³ÖRTMPÐÒ飬µ«¿ÉÒÔͨ¹ýµÚÈý·½Ä£¿é£¨Èçnginx-rtmp-module£©À´ÊµÏÖÖ±²¥Á÷µÄÍÆÀ¡£¸ÃÄ£¿éÔÊÐíNginx×÷ΪRTMP·þÎñÆ÷£¬ÎüÊÕÀ´×ÔÖ±²¥?Ô´µÄÊÓÆµÁ÷£¬²¢½«Æä·Ö·¢¸ø´ó×Ú¹ÛÖÚ¡£ÕâʹµÃNginxÄܹ»³ÉΪһ¸öǿʢÇÒÎÞаµÄÖ±²¥½â¾ö¼Æ»®¡£
HLS/DASHÁ÷ýÌåÖ§³Ö£ºNginx¿ÉÒÔºÜÊǸßЧµØ·Ö·¢HLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)ÕâÁ½ÖÖÖ÷Á÷µÄ×Ô˳Ӧ±ÈÌØÂÊÁ÷ýÌåÐÒé¡£
ÕâЩÐÒ齫ÊÓÆµÖ§½â³ÉСƬ¶Ï£¬²¢Ê¹ÓÃHTTP¾ÙÐд«Ê䣬NginxµÄ¸ßÍÌÍÂÁ¿ºÍµÍÑÓ³ÙÌØÕ÷ʹÆä³ÉΪ·Ö·¢ÕâЩƬ¶ÏµÄÀíÏëÑ¡Ôñ¡£CDN¼¯³É?£ºNginx¾³£×÷ΪCDN(ContentDeliveryNetwork)µÄ±ßÑØ½Úµã¡£Í¨¹ýÔÚÈ«Çò°²ÅÅNginx·þÎñÆ÷£¬½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄ½Úµã£¬¿ÉÒÔÏÔÖø½µµÍÑÓ³Ù?£¬ÌáÉýԢĿÌåÑ飬²¢ÊèÉ¢Ô´Õ¾µÄѹÁ¦¡£
*¸ß¼¶ÓÅ»¯¼¼ÇÉ£ºÈÃNginxÊÓÆµÐÔÄܸüÉÏÒ»²ãÂ¥*
°²ÅÅ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ÐÒ飬¿ÉÒÔʵÏÖ¶à·¸´Óá¢Í·²¿Ñ¹ËõµÈÌØÕ÷£¬½øÒ»²½ÌáÉý´«ÊäЧÂÊ¡£
²î±ðµÄÊÓÆµÃûÌöԴ«ÊäºÍ²¥·ÅÓÐ×Ųî±ðµÄÒªÇó¡£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ÐÔÄÜÓÅ»¯µÄ½¹µã¡£
workerprocessesÓëworkerconnections£ºworker_processes:½¨ÒéÉèÖÃΪCPU½¹µãÊý£¬»òÂÔ¶àÓÚCPU½¹µãÊý£¬ÒÔ³ä·ÖʹÓöàºËÓÅÊÆ£¬ÊµÏÖ²¢Ðд¦Öóͷ£¡£ÀýÈ磬ÈôÊÇ·þÎñÆ÷ÓÐ8¸öCPU½¹µã£¬¿ÉÒÔÉèÖÃworker_processes8;¡£
worker_connections:Õâ¸ö²ÎÊý¾öÒéÁËÿ¸öWorkerÀú³ÌÄܹ»Í¬Ê±´¦?ÀíµÄ×î´ó?ÅþÁ¬Êý¡£Æäֵͨ³£ÐèҪƾ֤·þÎñÆ÷µÄÄÚ´æºÍ²¢·¢ÅþÁ¬ÐèÇóÀ´É趨¡£Ò»¸öÂÄÀú¹«Ê½ÊÇ£ºworker_connections*worker_processesÓ¦¸Ã´óÓÚÄãÔ¤ÆÚµÄ×î´ó²¢·¢ÅþÁ¬Êý¡£
¹ØÓÚÊÓÆµ´«Ê䣬Õâ¸öÖµ¿ÉÄÜÐèÒªÉèÖõýϸߣ¬ÀýÈçworker_connections4096;»ò¸ü¸ß¡£keepalivetimeoutÓëkeepaliverequests£ºkeepalive_timeout:ÉèÖó¤ÅþÁ¬µÄ³¬Ê±Ê±¼ä¡£
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ÔÚÊÓÆµÐÔÄܵÄ?ʵÏÖÉÏ£¬ÒÀ¸½Æä¸ßЧµÄ²¢·¢´¦Öóͷ£ÄÜÁ¦¡¢Ç¿Ê¢µÄ»º´æ»úÖÆÒÔ¼°¶ÔÁ÷ýÌåÐÒéµÄÓÅÒìÖ§³Ö£¬ÒѾ³ÉΪ¹¹½¨¸ßÐÔÄÜÊÓÆµ·Ö·¢ÏµÍ³µÄÊ×Ñ¡¼Æ»®¡£´Ó?¾²Ì¬ÎļþµÄ¿ìËÙ¶ÁÈ¡£¬µ½¶¯Ì¬ÄÚÈݵÄÖÇÄÜ»º´æ£¬ÔÙµ½ÓëCDNµÄÎ޷켯³É£¬NginxÕýÔÚÓÃËüµÄ·½·¨£¬ÎªÎÒÃÇÃè»æ×ÅÒ»·ùÁ÷ͨÎÞ¿¨¶ÙµÄÊÓÆµÌåÑéÀ¶Í¼¡£
NginxÊÓÆµÐÔÄܵĽø½×£º¸ßÐÔÄÜÁ÷ýÌå·þÎñÓëϸÄ廯µ÷ÓÅ
ÔÚǰһ²¿?·Ö£¬ÎÒÃÇÒѾÉîÈëÏàʶÁËNginxÔÚʵÏÖ100%ÊÓÆµÐÔÄÜ·½ÃæµÄ»ù´¡ÄÜÁ¦£¬°üÀ¨Æä¸ßЧµÄ²¢·¢´¦Öóͷ£Ä£×Ó¡¢Ç¿Ê¢µÄ»º´æ»úÖÆÒÔ¼°ÓëCDNµÄ¼¯³É¡£ÒªÕæÕýÈÃNginxÔÚÊÓÆµ·Ö·¢ÁìÓòʩչ¼«ÖµÄÐÔÄÜ£¬»¹ÐèÒª¸üÉîÈëµØÌ½Ë÷ÆäÔÚÁ÷ýÌå·þÎñ·½ÃæµÄ½ø½×Ó¦ÓÃÒÔ¼°Ï¸Ä廯µÄÐÔÄܵ÷ÓÅÕ½ÂÔ¡£
CDN¼¯³É£º¹ØÓÚÃæÏòÈ«ÇòÓû§µÄÊÓÆµ·þÎñ£¬½«Nginx°²ÅÅÔÚCDNµÄ±ßÑØ½ÚµãÉÏÊÇʵÏÖµÍÑÓ³Ù¡¢¸ß¿ÉÓÃÐÔµÄ?Òªº¦¡£Nginx¿ÉÒÔ×÷ΪCDN±ßÑØ½ÚµãµÄ½¹µã£¬´¦Öóͷ£À´×ÔÓû§µÄÇëÇ󣬲¢´Ó×î½üµÄ½ÚµãÌṩ»º´æÄÚÈÝ¡£ÈôÊDZßÑØ½Úµã»º´æÎ´ÖÀÖУ¬Nginx»á»ØÔ´µ½ÖÐÐÄ´æ´¢?»òÔ´Õ¾»ñÈ¡ÄÚÈÝ£¬²¢½«Ê״λá¼ûµÄÄÚÈÝ»º´æµ½±ß??Ôµ½Úµã£¬¹©ºóÐøÓû§Ê¹Óá£
ÕâÖÖÂþÑÜʽ»º´æÕ½ÂÔ¼«´óµØËõ¶ÌÁËÓû§»á¼ûµÄÎïÀí¾àÀ룬ÏÔÖøÌáÉýÁ˼ÓÔØËÙÂÊ¡£
ä¯ÀÀÆ÷»º´æ¿ØÖÆ£ºNginx»¹¿ÉÒÔͨ¹ýÉèÖÃExpiresºÍCache-ControlÏìӦͷ£¬Ö¸µ¼Óû§µÄä¯ÀÀÆ÷¾ÙÐлº´æ¡£Õâ¹ØÓÚһЩ²»?¾³£±ä»»µÄÊÓÆµÔªÊý¾Ý»ò²¥·ÅÆ÷×ÊÔ´ºÜÊÇ?ÓÐÓã¬Äܹ»½øÒ»²½ïÔÌÍøÂçÇëÇó´ÎÊý¡£
ͨÏ꾡Ä廯µÄ»º´æÕ½ÂÔÉèÖã¬NginxÄܹ»ÓÐÓõؽ«´ó?Á¿Öظ´µÄÊÓÆµÇëÇó×èµ²ÔÚ±ßÑØ£¬½«Ãû¹óµÄ·þÎñÆ÷×ÊÔ´Áô¸ø´¦Öóͷ£ÕæÕýÐèÒª¶¯Ì¬ÌìÉúµÄÄÚÈÝ£¬´Ó¶øÎªÓû§Ìṩ¿¿½ü¡°Ã뿪¡±µÄ¹ÛÓ°ÌåÑé¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖNginxÔÚ´«ÊäÐæÅºÍʵʱÁ÷ýÌå·½ÃæµÄÓÅ»¯£¬½øÒ»²½½âËø100%Á÷ͨÊÓÆµµÄÉñÃØ¡£
NginxÊÓÆµÓÅ»¯½¹µãÕ½ÂÔ¶þ£ºÐÒéµÄÑݽøÓë´«ÊäµÄ¼«Ö¡ª¡ªÈÃÊÓÆµ¡°ÅÜ¡±µÃ¸ü¿ì
Nginx²¢·Ç½ö½öÊÇÒ»¸öͨÓõÄWeb·þÎñÆ÷£¬Ëü»¹ÓµÓÐǿʢµÄÁ÷ýÌå´¦Öóͷ£ÄÜÁ¦¡£×îа汾ÔÚÁ÷ýÌåÄ£¿é·½Ãæ¾ÙÐÐÁËÏÔÖøÔöÇ¿£¬Ê¹ÆäÄܹ»¸ü¸ßЧ¡¢¸üÎÞаµØ´¦?ÀíHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)µÈÖ÷Á÷µÄ×Ô˳Ӧ±ÈÌØÂÊÁ÷ýÌåÐÒé¡£
HLS/DASHµÄÉî¶ÈÓÅ»¯£ºNginxÄܹ»Ö±½Ó´¦Öóͷ£ÕâЩÐÒéÌìÉúµÄ.m3u8ºÍ.mpd²¥·ÅÁбíÎļþ£¬²¢¸ßЧµØ½«ÊÓÆµ·ÖƬ£¨.ts,.mp4µÈ£©´«Ê䏸¿Í»§¶Ë¡£×îа汾ÔÚÆÊÎöºÍ·Ö·¢ÕâЩË÷ÒýÎļþʱ£¬¾ÙÐÐÁËÐÔÄÜÓÅ»¯£¬ïÔÌÁË·þÎñÆ÷¶ËµÄ´¦Öóͷ£¼ç¸º¡£
¹ØÓÚÊÓÆµ·ÖƬ×Ô¼ºµÄ»º´æºÍ¶ÁÈ¡£¬NginxҲͨ¹ý¸üÖÇÄܵÄËã·¨£¬Ìá¸ßÁË»º´æÖÀÖÐÂÊ£¬ïÔÌÁ˶Ժó¶Ë´æ´¢µÄ?»á¼ûѹÁ¦£¬´Ó¶ø¼ÓËÙÁËÊÓÆµ²¥·ÅµÄÆô¶¯ËÙÂÊ¡£¶¯Ì¬×ªÂëÓë·â×°µÄ¼¯³É£ºÖ»¹ÜNginx×Ô¼º²»ÊÇÒ»¸öרҵµÄתÂ빤¾ß£¬µ«Ëü¿ÉÒÔͨ¹ýÓëµÚÈý·½¹¤¾ß£¨ÈçFFmpeg£©µÄ¼¯³É£¬ÊµÏÖ¸ü¶¯Ì¬µÄÊÓÆµ´¦?ÀíÁ÷³Ì¡£
È·±£ÄúµÄ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ÉèÖÃ...}}
ÆôÓÃTCPNODELAYºÍTCPNOPUSH£ºtcp_nodelayon;²Î?Êý¿ÉÒÔ½ûÓÃNagleËã·¨£¬Ëü»áʵÑ齫СµÄÊý¾Ý°ü¾ÛºÏÆðÀ´Ò»Æð·¢ËÍ£¬ÕâÔÚÍøÂçÑӳٽϸßʱ¿ÉÄܵ¼ÖÂÐÂÎÅÑÓ³Ù¡£¹ØÓÚÊÓÆµÁ÷£¬×ÝÈ»ÊÇСµÄÊý¾Ý¿éÒ²ÐèÒª¾¡¿ì·¢ËÍ£¬ÒÔ±£?֤ʵʱÐÔ¡£
tcp_nopushon;ÔòÔÊÐíNginxÔÚ·¢ËÍÎļþÄÚÈÝ֮ǰ£¬¾¡¿ÉÄÜ¶àµØ½«ÏìӦͷһ´ÎÐÔ·¢ËͳöÈ¥£¬ÕâÒ²ÄÜÓÅ»¯ÐÔÄÜ¡£
¶þ¡¢ÊÓÆµÁ÷ýÌåרÏîÓÅ»¯£ºHLS/DASHÓëRTMPµÄÉî¶ÈÕûºÏ
¹ØÓÚÊÓÆµÁ÷ýÌ壬NginxµÄÉèÖû¹ÐèÒªÕë¶ÔÐÔµØË¼Á¿HLS/DASHºÍRTMPµÈÐÒéµÄÌØµã¾ÙÐÐÓÅ»¯¡£
¡°Nginx100ÊÓÆµ¡±²»µ«½öÊÇÒ»¸öÊý×Ö£¬Ëü´ú±í×ÅNginxÔÚÊÓÆµÈö²¥ÊäÁìÓòËùÄִܵï?µÄáÛ·å״̬¡ª¡ª¼«ÖµÄÐÔÄÜ¡¢ÎÞÏÞµÄÀ©Õ¹ÐÔ¡¢Ç¿Ê¢µÄÎÞаÐÔÒÔ¼°ÖÇÄÜ»¯µÄÄÜÁ¦¡£´ÓÖ±²¥µ½µã²¥£¬´ÓCDNµ½±ßÑØÅÌË㣬NginxÕýÔÚÒÔÆäÎÞ¿ÉÆ¥µÐµÄÓÅÊÆ£¬Çý¶¯×ÅÊÓÆµÐÐÒµµÄÿһ´ÎˢС£
ÕÆÎÕNginxµÄÊÓÆµ´«ÊäÊÖÒÕ£¬¾ÍÓÌÈçÕÆÎÕÁË·¿ªÎ´À´ÊÓÆµÌìÏ´óÃŵÄÔ¿³×¡£Ëæ×ÅÊÖÒÕµÄÒ»Ö±Éú³¤£¬ÎÒÃÇ¿ÉÒÔÔ¤¼û£¬Nginx½«ÔÚ¹¹½¨Ô½·¢ÌÕ×íʽ¡¢ÖÇÄÜ»¯¡¢¸öÐÔ»¯µÄÊÓÆµÌåÑéÖУ¬°ç?ÑÝÔ½À´Ô½Ö÷ÒªµÄ½ÇÉ«¡£Nginx100ÊÓÆµ£¬ÕýÊÇÕâ¹ÉÇ¿¶¦Á¦´ó¾ÙÁ¿µÄÉú¶¯Ð´ÕÕ£¬ËüµãȼÁËÊÓÆµÈö²¥ÊäµÄÒýÇæ£¬ÕýÒýÁìÎÒÃÇÊ»ÏòÒ»¸öÔ½·¢¾«²Ê?µÄÊÓÆµÐÂʱ´ú¡£
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¼ÓÃÜ£¬ÌṩÁ˸üµÍµÄÅþÁ¬ÑÓ³Ù?ºÍ¸ü¸ßµÄ´«ÊäЧÂÊ¡£
¹ØÓÚÃæÏòÈ«ÇòÓû§µÄÊÓÆµ·þÎñ£¬ÓëCDN(ContentDeliveryNetwork)¼¯³ÉÊDZز»¿ÉÉٵġ£Nginx¿ÉÒÔ×÷ΪCDNµÄ»ØÔ´·þÎñÆ÷£¬»òÕßÖ±½Ó×÷Ϊ±ßÑØ½Úµã°²ÅÅ¡£
×÷Ϊ»ØÔ´·þÎñÆ÷:ÉèÖÃNginxµÄproxy_cacheÖ¸ÏòCDNµÄ»º´æ½Úµã£¬µ±CDN½Úµã»º´æÊ§Ð§Ê±£¬ÇëÇó»á»ØÔ´µ½Nginx¡£×÷Ϊ±ßÑØ½Úµã:Ö±½Ó°²ÅÅNginx×÷ΪCDNµÄ±ßÑØ½Úµã£¬³ä·ÖʹÓÃNginxµÄ¸ßÐÔÄÜ»ººÍ´æÄÜÁ¦£¬ÎªÓû§Ìṩ×î¿ìËÙÂʵÄÊÓÆµ·þÎñ¡£
Nginx×îа汾ÔÚÊÓÆµ´«Êä·½ÃæµÄÍ»ÆÆ£¬Àë²»¿ªÆäÔڵײã¼Ü¹¹ÉϵÄÒ»Á¬¾«½ø¡£¸ßЧµÄI/O¶à·¸´ÓûúÖÆÊÇNginxÄܹ»´¦Öóͷ£¸ß²¢·¢ÅþÁ¬µÄÒªº¦¡£Í¨¹ýepoll£¨Linux£©»òkqueue£¨BSD£©µÈ»úÖÆ£¬NginxÄܹ»ÔÚÒ»¸öÏß³ÌÖмàÊÓ´ó×ÚµÄÎļþÐÎò·û£¬µ±ÓÐÊÂÎñ±¬·¢Ê±£¬ÔÙÓÉÊÂÇéÏ߳̾ÙÐд¦Öóͷ£¡£
ÕâÒâζ×ÅNginx¿ÉÒÔÔÚ¼«µÍµÄCPUÕ¼ÓÃÂÊÏ£¬¸ßЧµØ´¦Öóͷ£³ÉǧÉÏÍòµÄÊÓÆµÊý¾Ý´«ÊäÇëÇó£¬×èÖ¹ÁË´«?ͳ·þÎñÆ÷ÒòÏß³Ì/Àú³Ì½¨ÉèºÍÇл»´øÀ´µÄÐÔÄÜÏûºÄ¡£
NginxµÄÁ㿽±´£¨Zero-copy£©ÊÖÒÕÔÚÊÓÆµ´«ÊäÖÐÊÎÑÝ×ÅÖÁ¹ØÖ÷ÒªµÄ½ÇÉ«¡£ÔڹŰåµÄI/OÄ£×ÓÖУ¬Êý¾ÝÔÚÄں˿ռäºÍÓû§¿Õ¼äÖ®¼äÐèÒª¶à´Î¸´ÖÆ£¬Õâ»áÏûºÄ´ó×ÚµÄCPU×ÊÔ´ºÍÄÚ´æ´ø¿í¡£Nginxͨ¹ýsendfile()ϵͳŲÓ㬿ÉÒÔÖ±½Ó½«Êý¾Ý´ÓÄں˵ÄÎļþ»º³åÇø·¢Ë͵½ÍøÂçÌ×½Ó×Ö£¬ÈƹýÁËÓû§¿Õ¼äµÄ¿½±´?»·½Ú£¬¼«´óµØÌá¸ßÁËÊý¾Ý´«ÊäµÄЧÂÊ£¬ïÔÌÁËÑÓ³Ù£¬ÓÈÆäÊÇÔÚ´«Êä´óÎļþ£¨ÈçÊÓÆµÆ¬¶Ï£©Ê±£¬Ð§¹ûÓÈΪÏÔÖø¡£
Õâ¹ØÓÚһЩ²¥·ÅÆ÷»á»º´æÊÓÆµÆ¬¶ÏµÄ³¡¾°ºÜÊÇÓÐÓã¬Äܹ»ïÔÌÖØ¸´ÏÂÔØ£¬ÌáÉýÓû§ÔÚ²î±ðÊÓÆµ¼äÇл»µÄÁ÷ͨ¶È¡£CDN¼¯³É£º¹ØÓÚ´ó¹æÄ£µÄÊÓÆµ·þÎñ£¬Nginx¾³£ÓëCDNÐͬÊÂÇé¡£Nginx¿ÉÒÔ×÷ΪCDNµÄ±ßÑØ½Úµã£¬»òÕß×÷ΪԴվµÄ¸ºÔØÆ½ºâÆ÷£¬½«Á÷Á¿·Ö·¢µ½¶à¸öCDN½Úµã¡£
CDNµÄÂþÑÜ?Ê½ÌØÕ÷Äܹ»½«ÊÓÆµÄÚÈÝÍÆË͵½ÀëÓû§¸ü½üµÄµØÀíλÖ㬽øÒ»²½½µµÍÑÓ³Ù?£¬ÊµÏÖÈ«Çò¹æÄ£ÄڵĿìËÙ»á¼û¡£NginxÔÚ´ËÀú³ÌÖУ¬ÈÏÕæÓëCDN¾ÙÐиßЧµÄͨѶ£¬²¢¿ÉÄÜÊÎÑÝÄÚÈÝÔ¤ÈÈ¡¢»º´æ¹ÜÀíµÈ½ÇÉ«¡£
ÔÚÖØ´óµÄÁ÷ýÌå¼Ü¹¹ÖУ¬NginxµÄ×÷ÓÃÔ¶²»Ö¹ÓÚ¼òÆÓ?µÄÎļþ·Ö·¢¡£
CDN±ßÑØ½Úµã°²ÅÅ£ºÔÚCDN¼Ü¹¹ÖУ¬Nginx±»ÆÕ±éÓÃ×÷±ßÑØ½ÚµãµÄ·þÎñÆ÷¡£ËüÈÏÕæ»º´æÔ´Õ¾µÄÄÚÈÝ£¬²¢Ö±½Ó·þÎñÓÚÖÕ¶ËÓû§¡£Í¨¹ýÓëCDN³§É̵ÄÉî¶È¼¯³É£¬Nginx¿ÉÒÔʵÏÖÖÇÄܵÄÁ÷Á¿µ÷ÀíºÍ»ØÔ´Õ½ÂÔ£¬È·±£ÄÚÈÝÄܹ»ÒÔ×î¿ìµÄËÙÂÊ´¥´ïÓû§¡£
¸ºÔØÆ½ºâ£º¹ØÓÚ¸ßÐÔÄܵÄÁ÷ýÌå·þÎñ£¬Í¨³£ÐèÒª¶ą̀·þÎñÆ÷ÐͬÊÂÇé¡£NginxµÄupstreamÄ£¿é¿ÉÒÔʵÏÖǿʢ?µÄ¸ºÔØÆ½ºâ¹¦Ð§£¬Î´À´×ÔÓû§µÄ?ÇëÇóÔȳƵطַ¢µ½?ºó¶ËµÄ¶ą̀Á÷ýÌå·þÎñÆ÷»òAPI·þÎñÆ÷ÉÏ¡£Ö§³Ö¶àÖÖ¸ºÔØÆ½ºâËã·¨£¬ÈçÂÖѯ£¨roundrobin£©¡¢×îÉÙÅþÁ¬£¨leastconn£©¡¢IP¹þÏ££¨iphash£©µÈ£¬¿ÉÒÔÆ¾Ö¤ÓªÒµÐèÇóÑ¡Ôñ×îÊʺϵÄÕ½ÂÔ¡£
ÐÂÎÅÊèÉ¢£ºÔÚÊÓÆµ·þÎñÖУ¬ÍùÍù»á»ìÏý¾²Ì¬µÄÊÓÆµÎļþºÍ¶¯Ì¬µÄAPIÇëÇó£¨ÈçÓû§µÇ¼¡¢ËÑË÷¡¢Ì¸Â۵ȣ©¡£Nginx¿ÉÒÔͨ¹ýlocationÖ¸Á½«¾²Ì¬×ÊÔ´£¨ÈçÊÓÆµÎļþ¡¢Í¼Æ¬¡¢CSS¡¢JS£©Ö±½ÓÓÉNginx´¦Öóͷ££¬¶ø½«¶¯Ì¬ÇëÇóת·¢¸øºó¶ËµÄÓ¦Ó÷þÎñÆ÷¡£
ÕâÖÖ¡°ÐÂÎÅÊèÉ¢¡±µÄ?¼Ü¹¹¿ÉÒÔ¼«´ó?µØ¼õÇáºó¶ËÓ¦Ó÷þÎñÆ÷µÄѹÁ¦£¬ÌáÉýÕûÌåµÄÏìÓ¦ËÙÂʺÍÍÌÍÂÁ¿¡£
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ÌṩÁËǿʢµÄÇå¾²¹¦Ð§¡£
HTTPS¼ÓÃÜ£ºÊ¹ÓÃSSL/TLSÖ¤ÊéΪÊÓÆµÁ÷ÌṩHTTPS¼ÓÃÜ£¬±£»¤Êý¾ÝÔÚ´«ÊäÀú³ÌÖеÄ?Çå¾²£¬±ÜÃâÇÔÌýºÍ´Û?p¡£NginxµÄSSL/TLSÉèÖÃÊÇʵÏÖÕâÒ»µãµÄÒªº¦¡£»á¼û¿ØÖÆ£ºÍ¨¹ýallow¡¢denyÖ¸Á»òÕßÓëµÚÈý·½ÈÏ֤ϵͳ¼¯³É£¬¿ÉÒÔÏÞÖÆ¶ÔÌØ¶¨ÊÓÆµÄÚÈݵĻá¼û£¬±ÜÃâδ¾ÊÚȨµÄÏÂÔØ»ò·Ö·¢¡£
DDoS·À»¤£ºNginxµÄlimit_conn¡¢limit_reqÒÔ¼°Ò»Ð©Ç徲ģ¿é£¬¿ÉÒÔ×ÊÖúµÖÓùDDoS¹¥»÷£¬È·±£ÊÓÆµ·þÎñµÄ¿ÉÓÃÐÔ¡£
ÔÚpart1ÖУ¬ÎÒÃÇÉîÈëÏàʶÁËNginxµÄ½¹µãÓÅÊÆ£¬ÒÔ¼°ËüΪºÎÄܹ»³ÉΪÊÓÆµÈö²¥?ÊäÁìÓòµÄ?ٮٮÕß¡£ÏÖÔÚ£¬ÊÇʱ¼ä½«ÀíÂÛ¸¶Öîʵ¼ù£¬¿´¿´Nginx100ÊÓÆµÊÇÔõÑùÔÚÕæÊµ³¡¾°Öдó·ÅÒì²ÊµÄ¡£´ÓÖ±²¥ÍÆÁ÷µ½µã²¥·þÎñ£¬´ÓCDN±ßÑØ½Úµãµ½±ßÑØÅÌË㣬NginxÒÀ¸½ÆäǿʢµÄ¹¦Ð§ºÍÎÞаÐÔ£¬ÕýÔÚÖØËÜ×ÅÊÓÆµÄÚÈݵÄ?´«Êä·½·¨£¬ÎªÓû§´øÀ´Ø¨¹ÅδÓеÄÁ÷ͨ¡¢Îȹ̡¢¸ßÖÊÁ¿µÄԢĿÌåÑé¡£
Ö±²¥ÍÆÁ÷ÓëתÂ룺Nginx´î½¨RTMPÖ±²¥·þÎñÆ÷µÄ»Æ½ð»ï°é
¹ØÓÚÐí¶àÖ±²¥Æ½Ì¨¶øÑÔ£¬RTMPÐÒéÒÀÈ»ÊÇÖ÷ÒªµÄÍÆÁ÷·½·¨¡£NginxÅäºÏnginx-rtmp-module£¬¿ÉÒÔÇáËɴһ¸ö¸ßÐÔÄܵÄRTMP·þÎñÆ÷£¬ÎüÊÕÀ´×ÔÖ÷²¥µÄÍÆÁ÷¡£¸üÁîÈËÐ˷ܵÄÊÇ£¬Nginx»¹¿ÉÒÔʹÓÃÆäǿʢµÄ´¦?ÀíÄÜÁ¦£¬ÊµÏÖÊÓÆµÁ÷µÄʵʱתÂë¡£
ÏëÏóһϣ¬Ö÷²¥Ê¹ÓÃÒ»Ì×±àÂë²ÎÊýÍÆÁ÷£¬¶ø¹ÛÖÚÔò¿ÉÄÜʹÓÃÖݪֲî±ðµÄ×°±¸ºÍÍøÂçÇéÐÎԢĿ¡£ÎªÁËÖª×ã²î±ðÓû§µÄÐèÇó£¬ÎÒÃÇÐèÒª½«ÔʼÊÓÆµÁ÷תÂë³É¶àÖÖÂëÂÊ¡¢Çø·ÖÂʵÄHLS»òDASHÇÐÆ¬¡£NginxÍŽáFFmpegµÈ¹¤¾ß£¬¿ÉÒÔʵÏÖÕâÒ»Àú³Ì£º
¸ß²¢·¢´¦?ÀíÄÜÁ¦£ºÊÓÆµÁ÷µÄ´«Êäͨ³£Éæ¼°´ó×ÚµÄ?ÅþÁ¬£¬NginxÄܹ»ÇáËÉÓ¦¶ÔÊýÒÔÍò¼ÆÉõÖÁÊýÊ®Íò¼ÆµÄ²¢·¢ÅþÁ¬£¬°ü¹Üÿ¸öÓû§¶¼ÄÜ»ñµÃÎȹÌÁ÷ͨµÄ²¥·Å·þÎñ¡£¸ßЧµÄ¾²Ì¬Îļþ·þÎñ£ºÊÓÆµÎļþ×Ô¼º¾ÍÊǾ²Ì¬×ÊÔ´£¬NginxÔÚ¾²Ì¬Îļþ·þÎñ·½ÃæÓµÓÐÎÞ¿ÉÏà±ÈµÄÓÅÊÆ£¬ÆäÓÅ»¯µÄÎļþI/OºÍÄÚ´æ¹ÜÀí£¬Äܹ»ÒÔ×î¿ìµÄËÙÂʽ«ÊÓÆµÊý¾ÝÍÆË͸ø¿Í»§¶Ë¡£
ÎÞаµÄÄ£¿é»¯Éè¼Æ£ºNginxÓµÓи»ºñµÄÄ£¿é£¬¿ÉÒÔÆ¾Ö¤ÏÖʵÐèÇó¾ÙÐмÓÔØºÍÉèÖã¬ÀýÈçngx_http_flv_module¡¢ngx_http_mp4_moduleµÈ£¬ÕâЩģ¿éרÃÅÕë¶ÔÊÓÆµÁ÷µÄ´«Êä¾ÙÐÐÁËÓÅ»¯¡£·´Ïò´úÀíÓë¸ºÔØÆ½ºâ£ºÍŽáCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩»òÄÚ²¿¸ºÔØÆ½ºâ£¬Nginx¿ÉÒÔ½«ÊÓÆµÇëÇó·Ö·¢µ½¶ą̀·þÎñÆ÷£¬ÊèɢѹÁ¦£¬Ìá¸ßÕûÌåµÄ¿ÉÓÃÐÔºÍÐÔÄÜ¡£
NginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµÈö²¥ÊäÁìÓòÍÑÓ±¶ø³ö£¬ÓëÆäÆæÒìµÄÉè¼Æ¼Ü¹¹Ãܲ»¿É·Ö¡£Óë¹Å°åµÄ»ùÓÚÀú³ÌµÄWeb·þÎñÆ÷²î±ð£¬Nginx½ÓÄÉÁËÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕµÄI/OÄ£×Ó¡£ÕâÒâζ×ÅNginx¿ÉÒÔÓÃÉÙÉÙµÄÀú³Ì´¦Öóͷ£³ÉǧÉÏÍòµÄ²¢·¢ÅþÁ¬£¬²¢ÇÒÿһ¸öÅþÁ¬ÔÚÆÚ´ýI/O²Ù×÷ʱ£¬²¢²»»áÛÕ±ÕÕû¸öÀú³Ì£¬¶øÊÇ¿ÉÒÔ¼ÌÐø´¦Öóͷ£ÆäËûÅþÁ¬µÄÇëÇó¡£
¹ØÓÚÊÓÆµÁ÷À´Ëµ£¬Õâ¼òÖ±ÊÇÁ¿Éí¶¨ÖÆ¡£ÊÓÆµÁ÷ÊÇÒ»Á¬µÄ¡¢¸ß´ø¿íµÄ´«Ê䣬¶¯éüÐèҪά³ÖÊýǧÉõÖÁÊýÍò¸ö³¤ÅþÁ¬¡£ÈôÊÇʹÓùŰåµÄ»ùÓÚÀú³ÌµÄÄ£×Ó£¬Ã¿¸öÊÓÆµÅþÁ¬¶¼¿ÉÄÜÏûºÄÒ»¸öÀú³Ì£¬ºÜ¿ì¾Í»áºÄ¾¡·þÎñÆ÷×ÊÔ´£¬µ¼ÖÂÐÔÄÜÆ¿¾±¡£¶øNginxµÄÊÂÎñÇý¶¯Ä£×Ó£¬Äܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬ÇáËÉÓ¦¶Ôº£Á¿ÊÓÆµÅþÁ¬¡£
ÏëÏóһϣ¬Ò»¸öNginxÀú³Ì¾ÍÏñÒ»¸ö¸ßЧµÄÖ¸»Ó¹Ù£¬Äܹ»Í¬Ê±´¦Öóͷ£³ÉǧÉÏÍò¸öÊ¿±ø£¨ÅþÁ¬£©µÄÖ¸Á¶ø²»»áÓÉÓÚij¸öÊ¿±øµÄÐÝÏ¢¶øÕϰ²»Ç°¡£
SSL/TLS¼ÓÃÜ£ºÎªÊÓÆµ´«ÊäÆôÓÃSSL/TLS¼ÓÃÜ£¬±£»¤Óû§Êý¾ÝÇå¾²£¬½¨ÉèÐÅÈΡ£»á¼û¿ØÖÆ£ºÉèÖÃIP»á¼ûÏÞÖÆ¡¢Referer¼ì²éµÈ£¬±ÜÃâδ¾ÊÚȨµÄ»á¼ûºÍµÁÁ´¡£¼à¿ØÓëÈÕÖ¾£ºÊ¹ÓÃNginxµÄ»á¼ûÈÕÖ¾ºÍ¹ýʧÈÕÖ¾£¬ÍŽáµÚÈý·½¼à¿Ø¹¤¾ß(ÈçPrometheus,Grafana)£¬ÊµÊ±¼à¿Ø·þÎñÆ÷ÐÔÄÜ¡¢ÅþÁ¬Êý¡¢Á÷Á¿µÈÒªº¦Ö¸±ê£¬ÊµÊ±·¢Ã÷Ï¢Õù¾öDZÔÚÎÊÌâ¡£
ngx_http_vhost_traffic_status_moduleÄ£¿é¿ÉÒÔÌṩÏêϸµÄÁ÷Á¿Í³¼ÆÐÅÏ¢¡£
ͨ¹ýÒÔÉÏ¶à·½ÃæµÄϸÄ廯ÉèÖúÍÓÅ»¯£¬NginxÄܹ»ÕæÕýÊÍ·ÅÆäÔÚÊÓÆµ´«ÊäÁìÓòµÄËùÓÐDZÁ¦£¬ÊµÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µÄÄ¿µÄ¡£´Ó»ù´¡¼Ü¹¹µ½½¹µã¹¦Ð§£¬ÔÙµ½¸ß¼¶ÓÅ»¯Õ½ÂÔ£¬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±¨ÎĵÄÊýÄ¿£¬Ìá¸ß´«ÊäЧÂÊ¡£
Õ¹ÍûδÀ´£¬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ǿʢµÄ»º´æÄÜÁ¦»ù´¡ÉÏ£¬ÎÒÃÇ»¹ÐèÒª¹Ø×¢ÊÓÆµÁ÷ýÌå´«ÊäµÄЧÂʺÍÐÒéµÄÓÅ»¯£¬ÒÔÈ·±£ÊÓÆµÔÚÍøÂçÖеĴ«ÊäÀú³ÌͬÑù˳³©ÎÞ×è¡£
HTTP/2ºÍHTTP/3µÄ¸³ÄÜ£º¹Å°åµÄHTTP/1.1ÐÒéÔÚ´¦Öóͷ£´ó×ÚСÎļþÇëÇóʱ±£´æÐÔÄÜÆ¿¾±£¬ÀýÈç¶à·¸´ÓÃЧÂʲ»¸ß¡¢ÇëÇóÍ·¿ªÏú´óµÈ¡£¶øHTTP/2ÐÒéµÄÒýÈ룬ͨ¹ýÍ·²¿Ñ¹Ëõ¡¢¶à·¸´ÓᢷþÎñÆ÷ÍÆË͵ÈÌØÕ÷£¬¼«´óµØÌáÉýÁËWeb×ÊÔ´µÄ´«ÊäЧÂÊ£¬¹ØÓÚÊÓÆµÁ÷ýÌåÖÐÆµÈÔµÄСÎļþÇëÇó£¨ÈçHLSµÄts·ÖƬ£©ÓÐÏÔÖøµÄÐÔÄÜÌáÉý¡£
Nginx¶ÔHTTP/2µÄÖ§³ÖºÜÊdzÉÊ죬ֻÐè¼òÆÓµÄ?ÉèÖü´¿ÉÆôÓá£
ÉèÖÃÒªµã£ºÔÚlistenÖ¸ÁîÖÐÌí¼Óhttp2²ÎÊý¡£È·±£SSLÖ¤ÊéÉèÖÃ׼ȷ£¬ÓÉÓÚHTTP/2ͨ³£ÔÚHTTPSÇéÐÎÏÂʹÓá£http2_max_concurrent_streams£ºÉèÖÃÿ¸öTCPÅþÁ¬ÉÏÔÊÐíµÄ×î´ó²¢·¢Á÷Êý£¬¿Éƾ֤·þÎñÆ÷ÄÜÁ¦¾ÙÐе÷½â¡£
http2_push£º¿ªÆô·þÎñÆ÷ÍÆË͹¦Ð§£¬¿ÉÒÔÌáǰ½«Óû§¿ÉÄÜÐèÒªµÄ×ÊÔ´£¨ÈçCSS¡¢JS£©ÍÆË͵½¿Í»§¶Ë£¬ïÔ̺óÐøÇëÇó¡£
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µÄ»º´æ»úÖÆÊÇʵÏÖÕâһĿµÄµÄÒªº¦¡£Í¨¹ýºÏÀíÉèÖÃHTTP»º´æ£¬ÎÒÃÇ¿ÉÒÔ½«ÆµÈÔ»á¼ûµÄÊÓÆµÎļþ£¨ÈçÈÈÃÅÓ°Ï·¡¢¶ÌÊÓÆµÆ¬¶Ï£©»º±£´æNginx·þÎñÆ÷ÍâµØ»òCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩½ÚµãÉÏ¡£
ProxyCache£ºµ±Nginx×÷Ϊ·´Ïò´úÀíʱ£¬¿ÉÒÔÉèÖÃproxy_cacheÖ¸Á½«ºó¶ËÊÓÆµ·þÎñÆ÷µÄÏìÓ¦ÄÚÈÝ»º´æµ½ÍâµØ´ÅÅÌ¡£ÕâÒâζ×Å£¬µ±µÚÒ»¸öÓû§ÇëÇóij¸öÊÓÆµÊ±£¬Nginx»á½«ÊÓÆµÎļþÏÂÔØ²¢»º´æ¡£ºóÐøÓû§ÇëÇóͳһ¸öÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬¼«´óµØïÔÌÁ˺ó¶Ë·þÎñÆ÷µÄѹÁ¦£¬²¢ÏÔÖøËõ¶ÌÁËÓû§µÄÏìӦʱ¼ä¡£
proxy_cache_pathÖ¸ÁîÓÃÓÚÖ¸¶¨»º´æÄ¿Â¼ºÍÏà¹Ø²ÎÊý£¬¶øproxy_cacheÖ¸ÁîÔòÆôÓûº´æ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýproxy_cache_keyÖ¸Áî×Ô½ç˵»º´æ¼ü£¬ÒÔÈ·±£²î±ðÇëÇó¶ÔÓ¦µÄÄÚÈÝÄܹ»±»×¼È·»º´æºÍ¼ìË÷¡£BrowserCache£º³ýÁË·þÎñÆ÷¶Ë»º´æ£¬ÎÒÃÇ»¹¿ÉÒÔͨ¹ýexpiresºÍCache-ControlÏìӦͷÀ´Ö¸µ¼¿Í»§¶Ëä¯ÀÀÆ÷»º´æÊÓÆµ×ÊÔ´¡£
Nginx100%ÊÓÆµÐÔÄÜ£º²»Ö¹ÊÇ·þÎñÆ÷£¬¸üÊÇÁ÷ͨÌåÑéµÄÊØ»¤Õß
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒѳÉΪÈËÃÇ»ñÊØÐÅÏ¢¡¢ÓéÀÖÐÝÏеÄÖ÷ÒªÔØÌå¡£ÎÞÂÛÊÇÖ±²¥»¥¶¯¡¢ÔÚÏß½ÌÓý£¬ÕÕ¾ÉÓ°Êӵ㲥?£¬Á÷ͨ¡¢¸ßÇåµÄÊÓÆµÌåÑéÊÇÓû§×î»ù±¾µÄÐèÇó¡£±³ºóÖ§³ÖÕâÒ»ÇеķþÎñÆ÷ÐÔÄÜ£¬È´¾³£³ÉÎªÖÆÔ¼Óû§ÌåÑéµÄÆ¿¾±¡£´«?ͳµÄ·þÎñÆ÷¼Ü¹¹ÔÚ´¦Öóͷ£º£Á¿ÊÓÆµÇëÇóʱ£¬ÍùÍù»á·ºÆð¼ÓÔØ»ºÂý¡¢¿¨¶ÙÑÓ³ÙµÈÎÊÌ⣬ÈÃÓû§ÌåÑé´ó´òÕÛ¿Û¡£
¶øNginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢?·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÕýÒÔÆä׿ԽµÄÄÜÁ¦£¬³ÉΪԽÀ´Ô½¶àÊÓÆµ·þÎñÌṩÉ̵ÄÊ×Ñ¡¡£Ëü²»µ«½öÊÇÒ»¸ö¼òÆÓµÄÎļþ·þÎñÆ÷£¬¸üÊÇÒ»¸öÄܹ»Éî¶ÈÓÅ»¯ÊÓÆµÈö²¥ÊäµÄÀûÆ÷¡£½ñÌ죬ÎÒÃǾÍÀ´½Ò¿ªNginxʵÏÖ100%ÊÓÆµÐÔÄܵÄ?ÉñÃØÃæÉ´£¬¿´¿´ËüÊÇÔõÑù´Óµ×²ã¼Ü¹¹µ½ÏêϸÉèÖã¬Ò»²½²½´òÔì³ö¼«ÖÂÁ÷ͨµÄÊÓÆµ²¥·ÅÌåÑéµÄ?¡£
Ò»¡¢NginxµÄÓÅÊÆ£ºÎªºÎËüÄÜʤÈÎÊÓÆµ´«ÊäµÄÖØÈΣ¿
ÒªÃ÷È·NginxÔõÑùʵÏÖÊÓÆµÐÔÄܵı¼ÌÚ£¬Ê×ÏÈÐèÒªÏàʶËüÔÚÉè¼ÆÖ®³õ¾Í¾ß±¸µÄ½¹µãÓÅÊÆ¡£
Nginx100%ÊÓÆµÓÅ»¯£º²»Ö¹Óڿ죬¸üÔÚÓÚ¡°Ë¿»¬¡±µÄ½»»¥ÌåÑ飡
ÔÚÐÅÏ¢±¬Õ¨µÄÊý×Öʱ´ú£¬ÊÓÆµÄÚÈÝÔçÒѳÉΪÎÒÃÇÉúÑÄÖв»¿É»òȱµÄÒ»²¿·Ö¡£´ÓÔÚÏß½ÌÓýµ½ÓéÀÖÖ±²¥£¬´ÓÔ¶³Ì¾Û»áµ½ÄÚÈÝ·ÖÏí£¬Á÷ͨ?¡¢¸ßÇå¡¢µÍÑÓ³ÙµÄÊÓÆµÌåÑ飬ÊÇÓû§×î»ù±¾?Ò²ÊÇ×î½¹µãµÄÐèÇó¡£¶øÖ§³ÖÕâÒ»Çеģ¬Àë²»¿ªÇ¿Ê¢µÄ·þÎñÆ÷ÊÖÒÕ¡£Nginx£¬×÷Ϊһ¿î¸ßÐÔÄܵÄHTTPºÍ·´Ïò´úÀí·þÎñÆ÷£¬ÒÀ¸½Æä׿ԽµÄ²¢·¢´¦Öóͷ£ÄÜÁ¦ºÍÎȹÌÐÔ£¬ÔçÒѳÉΪȫÇòÖÚ¶àÍøÕ¾ºÍÓ¦ÓõÄÊ×Ñ¡¡£
ÏÖÔÚ£¬NginxµÄ×îа汾¸üÊǽ«ÊÓÆµÓÅ»¯ÍÆÏòÁËеĸ߶ȣ¬ÊµÏÖÁË¡°100%ÊÓÆµÓÅ»¯¡±µÄ¾ªÈËÄ¿µÄ£¬ÎªÓû§´øÀ´Ø¨¹ÅδÓеġ°Ë¿»¬¡±ÊÓÌýÏíÊÜ¡£
Ò»¡¢Nginx×îа汾£ºÎªÊÓÆµ´«ÊäÁ¿Éí´òÔìµÄÐÔÄÜ¡°ºË¶¯Á¦¡±
ÎÒÃdz£Ëµ£¬Ò»¸öÓÅÒìµÄ·þÎñÆ÷£¬Êǰü¹ÜÓû§ÓÅÒìÌåÑéµÄ»ùʯ¡£¶øNginxÔÚÊÓÆµ´«ÊäÁìÓò£¬¸üÊÇÊÎÑÝ×Å¡°ºË¶¯Á¦¡±µÄ½ÇÉ«¡£×îа汾µÄNginx£¬ÔÚ¼ÌÐøÁËÆäÒ»Ö±µÄ¸ß²¢·¢¡¢µÍÄÚ´æÕ¼ÓõÄÓÅÊÆ»ù´¡ÉÏ£¬Õë¶ÔÊÓÆµÁ÷µÄÌØÕ÷¾ÙÐÐÁËÉî¶ÈÓÅ»¯¡£Õâ²»µ«½öÊǼòÆÓµÄ¹¦Ð§µþ¼Ó£¬¶øÊÇ´Óµ×?²ã¼Ü¹¹µ½½¹µãËã·¨µÄÈ«·½Î»Ë¢Ð¡£
1.epollÄ£×ӵļ«ÖÂÔËÓãºÓ¦¶Ôº£Á¿ÊÓÆµÇëÇóµÄ?¡°¶¨º£ÉñÕ롱
ÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕÄ£×Ó£ºÕâÊÇNginx×îΪÈ˳Æ?µÀµÄÌØÕ÷¡£Óë¹Å°åµÄÀú³Ì/Ïß³ÌÄ£×Ó²î±ð£¬Nginx½ÓÄÉÒ»¸öÖ÷Àú³ÌºÍ¶à¸öÊÂÇéÀú³ÌµÄģʽ¡£Ö÷Àú³ÌÈÏÕæ¶ÁÈ¡ÉèÖÃÎļþ¡¢¹ÜÀíÊÂÇéÀú³Ì£¬¶øÊÂÇéÀú³ÌÔòͨ¹ýÊÂÎñÇý¶¯µÄ»úÖÆ£¬¸ßЧµØ´¦Öóͷ£´ó×ڵIJ¢·¢ÅþÁ¬¡£µ±Ò»¸öÅþÁ¬ÓÐI/O²Ù×÷ʱ£¬Nginx²»»áÛÕ±Õ£¬¶øÊǽ«¸ÃÅþÁ¬µÄÊÂÎñ½»¸ø²Ù×÷ϵͳ£¬ÐÐÖ¹ÖÃÆäËûÅþÁ¬£¬±È¼°I/O²Ù×÷Íê³Éºó£¬ÔÙ»ØÀ´´¦Öóͷ£¡£
ÕâÖÖÄ£×Ó¼«´óµØïÔÌÁËCPUºÍÄÚ´æµÄÏûºÄ£¬Ê¹µÃNginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´Õ¼Óã¬Ö§³ÖÆðº£Á¿µÄ²¢·¢ÅþÁ¬£¬Õâ¹ØÓÚÐèҪͬʱ´¦Öóͷ£³ÉǧÉÏÍò¸öÊÓÆµÁ÷ÇëÇóµÄ³¡¾°ÖÁ¹ØÖ÷Òª¡£
ÄÚ´æÁ㿽±´£¨Zero-copy£©£ºÔÚÎļþ´«ÊäÀú³ÌÖУ¬¹Å°å·½·¨ÍùÍùÐèÒª¶à´ÎÊý¾Ý¸´ÖÆ£¬´Ó´ÅÅ̵½Äں˻º³å?Çø£¬ÔÙµ½Óû§»º³åÇø£¬×îºóµ½ÍøÂ绺³åÇø¡£Nginxͨ¹ýsendfile()ϵͳŲÓã¬ÊµÏÖÁËÄÚ´æÁ㿽±´¡£ÕâÒâζ×ÅÊý¾Ý¿ÉÒÔÖ±½Ó´Ó´ÅÅ̵ÄÒ³»º´æ¸´ÖƵ½ÍøÂçÕ»µÄ?Ì×½Ó×Ö»º³åÇø£¬ÎÞÐè¾ÓÉÓû§¿Õ¼äµÄ¸´ÖÆ£¬´ó´óÌá¸ßÁËÊý¾Ý´«ÊäµÄЧÂÊ£¬½µµÍÁËCPU¸ºÔØ¡£
¹ØÓÚ´«Êä´ó×ÚÊÓÆµÊý¾ÝµÄ³¡¾°£¬ÕâÄÜ´øÀ´ÏÔÖøµÄÐÔÄÜÌáÉý¡£
ÕâÒâζ×Å×ÝÈ»ÔÚ´«ÊäÊÓÆµµÄ¸÷¸ö·ÖƬʱ£¬ÆäËû×ÊÔ´£¨ÈçͼƬ¡¢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ÌṩµÄstub_statusÄ£¿é»òµÚÈý·½¼à¿Ø¹¤¾ß£¨ÈçPrometheus+Grafana£©£¬ÊµÊ±¼à¿ØNginxµÄÅþÁ¬Êý¡¢ÇëÇóÊý¡¢´ø¿íʹÓÃÇéÐεÈ?Òªº¦Ö¸±ê¡£
ÈÕÖ¾ÆÊÎö£ºNginxµÄ»á¼ûÈÕÖ¾¼Í¼ÁËÏêϸµÄÇëÇóÐÅÏ¢£¬Í¨¹ý¶ÔÈÕÖ¾¾ÙÐÐÆÊÎö£¬¿ÉÒÔ·¢Ã÷DZÔÚµÄÐÔÄÜÆ¿¾±¡¢Òì³£?ÇëÇóºÍÓû§»á¼ûģʽ¡£Ê¹ÓÃÈÕÖ¾ÆÊÎö¹¤¾ß£¨ÈçELKStack£©¿ÉÒÔ¸üÓÐÓõؾÙÐÐÈÕÖ¾¾ÛºÏ¡¢ËÑË÷ºÍ¿ÉÊÓ»¯£¬ÎªÐÔÄÜÓÅ»¯ÌṩÊý¾ÝÖ§³Ö¡£
ͨ¹ýÉÏÊöһϵÁеÄÓÅ»¯ÉèÖúÍÕ½ÂÔ£¬NginxÄܹ»³ä·ÖÑéÕ¹Æä¸ßÐÔÄܵÄÓÅÊÆ£¬ÎªÊÓÆµÁ÷ýÌåÌṩÎȹ̡¢¸ßЧ¡¢µÍÑӳٵķþÎñ£¬ÕæÕýʵÏÖ¡°Nginx100%ÊÓÆµ£¬100%ÐÔÄÜ¡±µÄÄ¿µÄ£¬ÈÃÓû§¾¡Ïí¼«ÖÂÁ÷ͨµÄÊÓÌýÊ¢Ñç¡£
ÉèÖÃoriginserver£ºÔÚCDNÉèÖÃÖУ¬Nginx·þÎñÆ÷³äµ±×Å¡°Ô´Õ¾¡±µÄ½ÇÉ«¡£CDN½Úµã»á½«Óû§ÇëÇóµÄÊÓÆµÄÚÈÝ»º´æµ½ÍâµØ£¬µ±Óû§»á¼ûʱ£¬Ê×ÏȴӾͽüµÄCDN½Úµã»ñÈ¡¡£ÈôÊÇCDN½ÚµãûÓлº´æ£¬Ôò»áÏòNginxÔ´Õ¾Ìᳫ»ØÔ´ÇëÇó£¬NginxÎüÊÕµ½ÇëÇóºó£¬½«ÊÓÆµÎļþ´«Ê䏸CDN½Úµã£¬CDN½ÚµãÔÙ½«ÄÚÈÝ·µ»Ø¸øÓû§¡£
proxy_cacheµÄÃîÓãºÔڴ˳¡¾°Ï£¬NginxµÄproxy_cache¹¦Ð§±äµÃÓÈΪÖ÷Òª¡£Í¨¹ýÉèÖÃproxy_cache£¬Nginx¿ÉÒÔ»º´æÀ´×ÔCDNµÄÇëÇ󣬽øÒ»²½ïÔÌԴվѹÁ¦£¬²¢¼ÓËÙCDN½ÚµãµÄ»ØÔ´ËÙÂÊ¡£
workerprocessesºÍworkerconnections£ºÌáÉý²¢·¢´¦Öóͷ£ÄÜÁ¦
worker_processes£º½ç˵NginxÊÂÇéÀú³ÌµÄÊýÄ¿¡£Í¨³£ÉèÖÃΪCPU½¹µãÊý»òÁ½±¶CPU½¹µãÊý£¬ÒÔ³ä·ÖʹÓöàºË´¦Öóͷ£Æ÷µÄÓÅÊÆ¡£worker_connections£ºÉèÖÃÿ¸öÊÂÇéÀú³ÌÄܹ»´¦Öóͷ£µÄ×î´ó²¢·¢ÅþÁ¬Êý¡£Õâ¸öÖµÐèҪƾ֤·þÎñÆ÷µÄÏÖʵÄÚ´æºÍ´¦Öóͷ£ÄÜÁ¦¾ÙÐе÷½â£¬µ«¹ØÓÚÊÓÆµ·þÎñ¶øÑÔ£¬ÄþÔ¸ÉèÖõøßһЩ£¬Ò²²»ÒªÈÃÅþÁ¬Êý³ÉΪƿ¾±¡£
keepalivetimeoutºÍkeepaliverequests£ºÓÅ»¯ÅþÁ¬¸´ÓÃ
keepalive_timeout£ºÖ¸¶¨¿Í»§¶ËÅþÁ¬µÄ?³¬Ê±Ê±¼ä¡£Êʵ±ÑÓÉì¸ÃÖµ¿ÉÒÔÃãÀø¿Í»§¶Ë¸´ÓÃÒѽ¨ÉèµÄÅþÁ¬£¬ïÔÌÅþÁ¬½¨ÉèºÍÏú»ÙµÄ¿ªÏú¡£keepalive_requests£ºÉèÖÃÒ»¸ö³¤ÆÚÅþÁ¬ÉÏÔÊÐíµÄ×î¶àÇëÇóÊý¡£ºÏÀíµÄÉèÖÿÉÒÔÆ½ºâÅþÁ¬¸´ÓúͷþÎñÆ÷×ÊÔ´Õ¼Óá£
sendfileºÍtcpnopush/tcpnodelay£º¼ÓËÙÎļþ´«Êä
Nginx100%ÊÓÆµÓÅ»¯£º¶´Ï¤Á÷ýÌåʱ´úµÄÐÔÄÜÒýÇæ
ÔÚÐÅÏ¢±¬Õ¨µÄÊý×ÖÀ˳±ÖУ¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪÏàͬ¡¢ÓéÀÖºÍѧϰµÄ½¹µãÔØÌå¡£ÎÞÂÛÊǸßÇåÓ°Ï·µÄµã²¥?£¬ÕÕ¾Éʵʱ¾«²ÊµÄÖ±²¥£¬Óû§¶ÔÁ÷ͨ¡¢ÎÞ¿¨¶ÙµÄԢĿÌåÑéÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£ÃæÁÙÈÕÒæÔöÌíµÄÊÓÆµÁ÷Á¿ºÍÓû§ÆÚÍû£¬·þÎñÆ÷µÄÐÔÄÜÆ¿¾±¡¢´ø¿íµÄ?ÏÞÖÆÒÔ¼°ÍøÂç´«ÊäµÄÑÓ³Ù£¬¾³£ÈÃÓÅÃÀµÄ?¹ÛӰ˲¼ä»¯ÎªÅÝÓ°¡£
´Ëʱ£¬Ò»¿îǿʢ¶øÎÞаµÄ·þÎñÆ÷Èí¼þ¾ÍÏÔµÃÓÈΪÖ÷Òª¡£Nginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄ?Web·þÎñÆ÷£¬ÔçÒѲ»µ«½öÊǾ²Ì¬ÎļþµÄ°áÔ˹¤£¬Ëü¸üÊÇÁ÷ýÌåÁìÓòµÄÒþÐÎÍõÕߣ¬Í¨¹ýһϵÁо«ÃîµÄÉèÖÃÓëÓÅ»¯£¬Äܹ»½«ÊÓÆµ²¥·ÅµÄÌåÑéÌáÉýÖÁب¹ÅδÓеĸ߶ȣ¬ÊµÏÖ¡°Nginx100%ÊÓÆµÓÅ»¯¡±µÄ×îÖÕÄ¿µÄ¡£
TURN/STUN·þÎñÆ÷µÄ°²ÅÅ£ºÔÚÖØ´óµÄÍøÂçÇéÐÎÖУ¬Ö±½ÓµÄP2PÅþÁ¬¿ÉÄÜÊÜÏÞÓÚNAT£¨NetworkAddressTranslation£©ºÍ·À»ðǽ¡£Nginx¿ÉÒÔ×÷ΪSTUN£¨SessionTraversalUtilitiesforNAT£©·þÎñÆ÷£¬×ÊÖú¿Í»§¶Ë·¢Ã÷Æä¹«ÍøIPµØÖ·ºÍ¶Ë¿Ú¡£
¸üÖ÷ÒªµÄÊÇ£¬Nginx¿ÉÒÔ°²ÅÅTURN£¨TraversalUsingRelaysaroundNAT£©·þÎñÆ÷£¬×÷ΪýÌåÁ÷µÄÖм̣¬È·±£Í¨Ñ¶µÄ¿É¿¿ÐÔ¡£Í¨¹ýÉèÖÃNginxµÄ·´Ïò´úÀíÄÜÁ¦£¬¿ÉÒÔÇáËɵؽ«STUN/TURNÐÒéµÄÁ÷Á¿×ª·¢µ½×¨ÃŵÄýÌå·þÎñÆ÷¡£
ÐÔÄÜÓëÇå¾²ÐÔ£ºNginxµÄ¸ß²¢·¢´¦Öóͷ£ÄÜÁ¦£¬Ê¹ÆäÄܹ»Îȹ̵ØÖ§³Ö´ó¹æÄ£Óû§Í¬Ê±¾ÙÐÐWebRTCͨѶ¡£NginxµÄSSL/TLS¼ÓÃÜÄÜÁ¦£¬Ò²ÄÜΪWebRTCͨѶÌṩ¶Ëµ½¶ËµÄÇå¾²°ü¹Ü¡£
ÔÚ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£ººÏÀíµ÷½âÕâЩ»º³åÇø¾Þϸ£¬¿ÉÒÔ×èÖ¹ÔÚ´¦Öóͷ£´óÊÓÆµÎļþÉÏ´«»òÖØ´óÇëÇóʱ·ºÆðÄÚ´æÒç³ö»òЧÂÊϽµµÄÎÊÌâ¡£
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";}}
Ëæ×ÅÊÓÆµÏûºÄµÄ±¬Õ¨Ê½ÔöÌí£¬´«?ͳµÄÖÐÐÄ»¯ÄÚÈÝ·Ö·¢Ä£Ê½ÃæÁÙÖØ´óÌôÕ½¡£NginxÔÚ¹¹½¨¸ßЧ¡¢µÍÑÓ³ÙµÄCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩ÒÔ¼°Íƶ¯±ßÑØÅÌËãÓ¦Ó÷½Ã棬ÊÎÑÝ×ÅÖÁ¹ØÖ÷ÒªµÄ?½ÇÉ«¡£
¹¹½¨¸ßÐÔÄÜCDN½Úµã£ºNginxÒÀ¸½Æä¾«²ÊµÄ¸ºÔØÆ½ºâÄÜÁ¦¡¢¸ßЧµÄ»º´æ»úÖÆºÍÆÕ±éµÄÐÒéÖ§³Ö£¬Êǹ¹½¨CDN±ßÑØ½ÚµãµÄ²»¶þ֮ѡ¡£×îа汾½øÒ»²½ÔöÇ¿ÁËÆä×÷ΪCDN½ÚµãµÄÄÜÁ¦£¬Äܹ»¸ü¸ßЧµØ»º´æº£Á¿ÊÓÆµÄÚÈÝ£¬²¢Í¨¹ýÖÇÄܵÄ·ÓÉÕ½ÂÔ£¬½«ÄÚÈÝ·Ö·¢µ½ÀëÓû§×î½üµÄ½Úµã¡£
Õâ´ó´óËõ¶ÌÁËÊÓÆµµÄ´«Êä·¾¶£¬½µµÍÁËÑÓ³Ù£¬ÏÔÖøÌáÉýÁËÓû§Ô¢Ä¿¸ßÇåÊÓÆµµÄÌåÑ飬տÕýʵÏÖ¡°100%ÊÓÆµ²¥·Å¡±¡£¸³ÄܱßÑØÅÌË㣬ʵÏÖÖÇÄÜ·Ö·¢£º±ßÑØÅÌËãÊÇδÀ´ÄÚÈÝ·Ö·¢µÄÖ÷ÒªÇ÷ÊÆ¡£Nginx×îа汾ͨ¹ýÓëLua¡¢JavaScriptµÈ¾ç±¾ÓïÑÔµÄ?ϸ÷缯³É£¬ÒÔ¼°¶ÔWebAssemblyµÄÖ§³Ö?£¬Ê¹µÃÔÚCDN±ßÑØ½ÚµãÖ´ÐÐÖØ´óµÄÓªÒµÂß¼³ÉΪ¿ÉÄÜ¡£
ÕâÒâζ×Å£¬ÊÓÆµÄÚÈݵÄÔ¤´¦Öóͷ£¡¢×ªÂë¡¢¼ÓÃÜ¡¢Óû§ÐÐΪÆÊÎöµÈʹÃü£¬¶¼¿ÉÒÔÔÚÀëÓû§¸ü½üµÄ±ßÑØ·þÎñÆ÷ÉÏÍê³É£¬½øÒ»²½½µµÍÁËÖÐÐÄ»¯·þÎñÆ÷µÄѹÁ¦£¬²¢ÎªÊµÏÖ¸ü¸öÐÔ»¯¡¢¸üÖÇÄÜ»¯µÄÊÓÆµÍƼöºÍÄÚÈÝ·þÎñÌṩÁË»ù´¡¡£ÀýÈ磬¿ÉÒÔÔÚ±ßÑØ½ÚµãʵʱÆÊÎöÓû§Ô¢Ä¿Æ«ºÃ£¬¶¯Ì¬µ÷½âÊÓÆµÁ÷µÄÇåÎú¶È»ò±àÂëÃûÌã¬ÒÔµÖ´ï×î¼ÑµÄ²¥·ÅЧ¹û¡£
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%Á÷ͨµÄ¹ÛӰмÍÔª£¡
Nginx½ÓÄÉÁËÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕµÄI/OÄ£×Ó£¬ÌØÊâ?ÊÇ»ùÓÚepoll»úÖÆ£¬Äܹ»¸ßЧµØ´¦Öóͷ£´ó×Ú²¢·¢ÅþÁ¬¡£¹ØÓÚÊÓÆµ´«?Êä¶øÑÔ£¬ÕâÒâζ×Åʲô£¿ÏëÏóһϣ¬µ±³ÉǧÉÏÍòµÄÓû§Í¬Ê±Ô¢Ä¿Í³Ò»³¡Ö±²¥£¬»òÕßÏÂÔØ¸ßÇåӰϷʱ£¬·þÎñÆ÷ÐèҪͬʱά³Ö´ó×ÚµÄÅþÁ¬£¬²¢ÊµÊ±´«ÊäÊý¾Ý¡£
¹Å°åµÄÛÕ±ÕʽI/OÄ£×ÓÔÚÕâÖÖ³¡¾°Ï»᲻¿°Öظº£¬µ¼ÖÂÅþÁ¬³¬Ê±¡¢ÏìÓ¦»ºÂý£¬Óû§ÌåÑéÖ±ÏßϽµ¡£¶øNginxµÄepollÄ£×Ó£¬Äܹ»ÔÚÒ»¸öÏß³ÌÖйÜÀí³É°ÙÉÏǧµÄÅþÁ¬£¬µ±Ä³¸öÅþÁ¬ÓÐÊý¾Ý¿É¶Á»ò¿Éдʱ£¬ÏµÍ³»á֪ͨ¸ÃỊ̈߳¬´Ó¶ø×èÖ¹ÁË´ó×ÚµÄÏ߳̽¨ÉèºÍÉÏÏÂÎÄÇл»¿ªÏú¡£
×îа汾?µÄNginx£¬ÔÚepollµÄµ÷ÀíËã·¨ºÍ×ÊÔ´·ÖÅÉÉϾÙÐÐÁ˽øÒ»²½µÄϸÄåµ÷ÓÅ£¬Ê¹µÃÔÚ´¦Öóͷ£ÊÓÆµÕâÀàÒ»Á¬¡¢´óÊý¾ÝÁ¿µÄ´«Êäʱ£¬Äܹ»Ô½·¢ÓÎÈÐÓÐÓ࣬ȷ±£Ã¿¸öÓû§µÄÅþÁ¬¶¼ÄÜ»ñµÃ?ʵʱÏìÓ¦£¬ÊµÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÄÎȹ̻ùʯ¡£
2.HTTP/2ºÍHTTP/3µÄÖÜȫӵ±§£ºÌáËÙÊÓÆµ¼ÓÔØµÄÒªº¦
HTTPÐÒéÊÇ»¥ÁªÍøÍ¨Ñ¶µÄ»ù´¡£¬¶øHTTP/2ºÍHTTP/3µÄ?·ºÆð£¬¸üÊÇÎªÍøÂç´«Êä´øÀ´Á˸ïÃüÐÔµÄÌáÉý¡£Nginx×îа汾¶ÔÕâЩÐÂÐÒéµÄÖ§³Ö£¬ÊÇʵÏÖÊÓÆµÓÅ»¯µÄÁíÒ»ÏîÖ÷ÒªÐж¯¡£
ÔÚÏÖʵµÄÊÓÆµ·þÎñÖУ¬½«ÐÂÎÅ×ÊÔ´¾ÙÐÐÊèÉ¢£¬²¢ÍŽáCDN£¨ContentDeliveryNetwork£©¾ÙÐзַ¢£¬ÊÇÌáÉýÐÔÄܺÍÓû§ÌåÑéµÄ³£¼ûÕ½ÂÔ¡£
ÐÂÎÅÊèÉ¢£ºNginx¿ÉÒÔÇáËÉʵÏÖÐÂÎÅÊèÉ¢¡£¹ØÓÚÊÓÆµÎļþ£¨¾²Ì¬×ÊÔ´£©£¬¿ÉÒÔÖ±½ÓÓÉNginx¸ßЧµØÌṩ·þÎñ£»¶ø¹ØÓÚÐèÒª·þÎñÆ÷¶Ë´¦?ÀíµÄ¶¯Ì¬ÇëÇó£¨ÈçÓû§µÇ?¼¡¢Ì¸Â۵ȣ©£¬Ôò¿ÉÒÔ½«ÇëÇóת·¢¸øºó¶ËµÄÓ¦Ó÷þÎñÆ÷¡£ÕâÖÖÊèÉ¢²»µ«Äܹ»¼õÇáÓ¦Ó÷þÎñÆ÷µÄѹÁ¦£¬Ò²ÄÜÈÃNginxרעÓÚÆä×îÉÆÓڵľ²Ì¬Îļþ´«Êä¡£
CDN¼¯³É£ºNginxÊǹ¹½¨CDN±ßÑØ½ÚµãµÄ½¹µã×é¼þÖ®Ò»¡£Í¨¹ýÔÚÌìÏÂÒÔÖÂÈ«Çò°²ÅÅNginx½Úµã£¬¿ÉÒÔ½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄλÖᣵ±Óû§ÇëÇóÊÓÆµÊ±£¬ÇëÇó»á±»µ¼Ïò×î½üµÄCDN½Úµã£¬´Ó?¶ø´ó´ó½µµÍÑÓ³Ù£¬ÌáÉý¼ÓÔØËÙÂÊ£¬²¢¼õÇáÔ´Õ¾µÄ?ѹÁ¦¡£
NginxµÄ¸ßÐÔÄܺ͵ͱ¾Ç®£¬Ê¹Æä³ÉΪ¹¹½¨´ó¹æÄ£CDNÍøÂçµÄÀíÏëÑ¡Ôñ¡£
ÊÓÆµÈö²¥ÊäÉæ¼°¶àÖÖÐÒ飬ÈçRTSP(RealTimeStreamingProtocol)¡¢RTMP(Real-TimeMessagingProtocol)¡¢HLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)µÈ¡£
ÿÖÖÐÒé¶¼ÓÐÆäÌØ¶¨µÄÓ¦Óó¡¾°ºÍÊÖÒÕÌØµã¡£RTMPÔøÊÇÖ±²¥ÁìÓòµÄ¡°°ÔÖ÷¡±£¬ÒÔÆäµÍÑÓ³ÙµÄ?ÓÅÊÆÊܵ½Çàíù£»¶øHLSºÍDASHÔò»ùÓÚHTTP£¬Ò×ÓÚ°²ÅÅºÍ¿çÆ½Ì¨¼æÈÝ£¬³ÉΪµã²¥ºÍ×Ô˳ӦÂë̹Âʲ¥µÄÖ÷Á÷Ñ¡Ôñ¡£
NginxµÄÄ£¿é»¯Éè¼Æ£¬¸¶ÓëÁËËüǿʢµÄÎÞаÐÔ£¬Ê¹ÆäÄܹ»ÇáËɵؼ¯³ÉµÚÈý·½Ä£¿é£¬ÒÔÖ§³ÖÖÖÖÖÊÓÆµÐÒ顣ͨ¹ý¼ÓÔØÏìÓ¦µÄÄ£¿é£¬Nginx¾Í¿ÉÒÔÒ¡ÉíÒ»±ä£¬³ÉΪһ¸öרҵµÄ?Á÷ýÌå·þÎñÆ÷¡£ÀýÈ磬nginx-rtmp-module¼´ÊÇNginxÉçÇøÖкÜÊÇ?Ê¢ÐеÄÓÃÓÚÖ§³ÖRTMPÐÒéµÄÄ£¿é£¬ËüÔÊÐíNginxÖ±½ÓÎüÊÕRTMPÍÆÁ÷£¬²¢½«Æäת»»ÎªHLS»òDASHµÈÃûÌþÙÐзַ¢¡£
ÕâÖÖÄ£¿é»¯µÄÄÜÁ¦£¬Ê¹µÃNginxÄܹ»Ë³Ó¦Ò»Ö±×ª±äµÄÁ÷ýÌåÊÖÒÕÉú³¤£¬³ÉΪһ¸ö¡°Íò½ðÓÍ¡±Ê½µÄÁ÷ýÌå½â¾ö¼Æ»®¡£
Îļþ¾ä±úÏÞÖÆ£¨ulimit£©£ºNginxµÄÊÂÇéÀú³ÌÐèÒª·¿ª´ó×ÚµÄÎļþ¾ä±úÀ´´¦Öóͷ£ÍøÂçÅþÁ¬ºÍÎļþ¶Áд¡£ÔÚLinuxϵͳÖУ¬ÐèҪͨ¹ýulimit-nÏÂÁîÀ´Ìá¸ßÿ¸öÀú³ÌÄܹ»·¿ªµÄ×î´óÎļþ¾ä±ú?Êý¡£Í¨³£½¨Ò齫ÆäÉèÖÃΪһ¸ö½Ï´óµÄÖµ£¬ÀýÈç65535»ò¸ü¸ß£¬ÒÔ×èÖ¹ÒòÎļþ¾ä±úºÄ¾¡¶øµ¼ÖµÄÅþÁ¬Ê§°Ü¡£
Õâͨ³£ÐèÒªÔÚ/etc/security/limits.confÎļþÖоÙÐÐÉèÖ㬲¢È·±£NginxÆô¶¯Óû§Äܹ»¼ÌÐøÕâЩÉèÖá£
ÆôÓÃkeepalive£ºkeepalive_timeoutºÍkeepalive_requests²ÎÊý¹ØÓÚïÔÌTCPÅþÁ¬µÄ½¨ÉèºÍ¹Ø±Õ¿ªÏúÖÁ¹ØÖ÷Òª¡£¹ØÓÚÊÓÆµÁ÷ýÌ壬¼á³ÖÅþÁ¬µÄ»îÔ¾ÐÔ¿ÉÒÔÏÔÖøÌá¸ßЧÂÊ¡£keepalive_timeoutÉèÖÃÁ˿ͻ§¶ËÅþÁ¬µÄ¼á³Öʱ¼ä£¬¶økeepalive_requestsÔòÏÞÖÆÁËÒ»¸öÅþÁ¬ÔÚ±»¹Ø±Õǰ¿ÉÒÔ´¦Öóͷ£µÄ×î´óÇëÇóÊý¡£
ÔÚÊÓÆµ²¥·Å³¡¾°Ï£¬Êʵ±ÑÓÉìkeepalive_timeout¿ÉÒÔÓÐÓÃïÔÌÖØ¸´ÅþÁ¬µÄ¿ªÏú£¬ÌáÉýÕûÌåÍÌÍÂÁ¿¡£
ÊÓÆµ¼ÓÔØËÙÂÊÊÇÓ°ÏìÓû§Áô´æÂʵÄÒªº¦ÒòËØ¡£Nginx×îа汾¶ÔHTTP/2ÉõÖÁ¸üÏȽøµÄHTTP/3ÐÒéÌṩÁ˾«²ÊµÄÔÉúÖ§³Ö£¬ÕâΪ¼ÓËÙÊÓÆµ¼ÓÔØ´øÀ´Á˸ïÃüÐԵĸı䡣HTTP/2ÒýÈëµÄ¶à·¸´ÓÃÊÖÒÕ£¬ÔÊÐíÔÚÒ»¸öTCPÅþÁ¬Éϲ¢Ðд«Êä¶à¸öÊÓÆµÎļþ»òÊý¾Ý¿é£¬ÏÔÖøïÔÌÁËÅþÁ¬½¨ÉèµÄ¿ªÏúºÍÒ³Ãæ¼ÓÔØÊ±¼ä¡£
¶øHTTP/3Ôò½øÒ»²½»ùÓÚQUICÐÒ飬ͨ¹ý¸ü¿ìµÄÅþÁ¬½¨ÉèËÙÂÊ¡¢Ïû³ý¶ÓÍ·ÛÕ±ÕÒÔ¼°¸üÖÇÄܵÄÓµÈû¿ØÖÆ£¬ÔÚ²»Îȹ̵ÄÍøÂçÇéÐÎÏÂÒ²ÄÜÌṩ¸ü¿É¿¿¡¢¸ü¿ìËÙµÄÊÓÆµ´«Êä¡£¹ØÓÚÊÓÆµµã²¥·þÎñ¶øÑÔ£¬ÕâÒâζ×ÅÓû§¿ÉÒÔÔÚ¼«¶ÌµÄʱ¼äÄÚ×îÏÈԢĿ£¬´ó´óÌáÉýÁËÓû§µÄÖª×ã¶ÈºÍת»¯ÂÊ¡£
×ܶøÑÔÖ®£¬NginxÒÀ¸½Æä׿ԽµÄÊÂÎñÇý¶¯¼Ü¹¹¡¢¸ßЧµÄI/O´¦Öóͷ£»úÖÆ¡¢Ç¿Ê¢µÄ¾²Ì¬Îļþ·þÎñÄÜÁ¦¡¢ÎÞаµÄ?»º´æÕ½ÂÔÒÔ¼°¶Ô×îÐÂÍøÂçÐÒéµÄÖ§³Ö£¬ÒѾ³ÉΪʵÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µÄÀíÏëÑ¡Ôñ¡£Ëü²»µ«ÄÜÌṩÎȹ̡¢¸ßËÙµÄÊÓÆµ´«Ê䣬¸üÄÜͨ¹ýÆä¸ß¶ÈµÄÀ©Õ¹ÐÔ£¬ÎªÒ»Ö±×ª±äµÄÁ÷ýÌåÓªÒµÌṩǿÓÐÁ¦µÄÊÖÒÕÖ§³Ö¡£
ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖNginxÔÚÏÖʵ°²ÅÅÖУ¬ÔõÑùͨÏ꾡Ä廯ÉèÖ㬽øÒ»²½Ñ¹Õ¥ÐÔÄÜ£¬ÊµÏÖÊÓÆµ´«ÊäµÄ¼«ÖÂÓÅ»¯¡£
NginxÊÓÆµÐÔÄÜÓÅ»¯ÊµÕ½£º´òÔ쳬·²Á÷ýÌåÌåÑéµÄϸ½Ú°Ñ¿Ø
ÔÚÉÏÒ»²¿·Ö£¬ÎÒÃÇÉîÈëÏàʶÁËNginxµÄ¼Ü¹¹ÓÅÊÆ¼°Æä½¹µã¹¦Ð§£¬ÕâЩΪʵÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µÓÚ¨Á˼áʵµÄ»ù´¡¡£ÀíÂÛÖÕ¾¿ÊÇÀíÂÛ£¬½«NginxµÄÐÔÄÜDZÁ¦ÍêÈ«ÊÍ·Å£¬»¹ÐèÒªÔÚÏÖʵ°²ÅÅÖоÙÐÐÏ꾡Èë΢µÄÉèÖÃÓÅ»¯¡£±¾²¿·Ö½«¾Û½¹ÓÚNginxÔÚÊÓÆµ´«ÊäÁìÓòµÄÐÔÄܵ÷ÓÅÕ½ÂÔ£¬´ÓÅþÁ¬ÊÜÀí¡¢»º´æ²ß?ÂÔ¡¢¸ºÔØÆ½ºâµ½´«ÊäÐÒéµÄÓÅ»¯£¬ÎªÄú·ºÆðÒ»·ÝÏ꾡µÄʵսָÄÏ¡£
HTTP/3ÊÇHTTPÐÒéµÄ×îÐÂÒ»´ú£¬Ëü×îÏÔÖøµÄÌØµãÊǽÓÄÉÁËQUIC£¨QuickUDPInternetConnections£©×÷ΪÆä´«Êä²ãÐÒ飬ȡ´úÁËTCP¡£QUICÐÒé»ùÓÚUDP£¬´øÀ´ÁËÖî¶à¸ïÃüÐÔµÄˢУ¬¹ØÓÚÊÓÆµÁ÷ýÌå¶øÑÔ£¬ÆäÓÅÊÆÓÈΪͻ³ö¡£
½â¾öTCP¶ÓÍ·ÛÕ±Õ(Head-of-LineBlocking)£ºÔÚHTTP/1.1ºÍHTTP/2ÖУ¬ÈôÊÇÒ»¸öTCPÅþÁ¬ÉϵÄij¸öÊý¾Ý°üɥʧ£¬Õû¸öÅþÁ¬ÉϵÄËùÓÐÊý¾Ý´«Êä¶¼»áÊܵ½Ó°Ï죬ֱµ½¸ÃÊý¾Ý°ü±»ÖØ´«¡£¶øQUICÔÚÓ¦ÓòãʵÏÖÁ˿ɿ¿ÐÔ´«Ê䣬×ÝȻһ¸öÁ÷ÖеÄÊý¾Ý°üɥʧ£¬Ò²²»»áÛÕ±ÕÆäËû×ÔÁ¦Á÷µÄÊý¾Ý´«Êä¡£
ÕâÒâζ×Å£¬ÔÚÒ»¸öÊÓÆµÁ÷·ÖƬ´«ÊäÀú³ÌÖУ¬×ÝȻij¸öÇÐÆ¬µÄÊý¾Ý°üɥʧ£¬ÆäËûÇÐÆ¬µÄÏÂÔØÒ²ÄܼÌÐø¾ÙÐУ¬¼«´óµØÌá¸ßÁËÊÓÆµ²¥·ÅµÄÎȹÌÐÔ£¬ÓÈÆäÊÇÔÚ²»?Îȹ̵ÄÍøÂçÇéÐÎÏ¡£¸ü¿ìµÄÅþÁ¬½¨É裺QUICÐÒéÄܹ»ÔÚ0-RTT£¨0Round-TripTime£©»ò1-RTTµÄÑÓ³ÙÄÚ½¨ÉèÅþÁ¬£¬ÏÔÖø¿ìÓÚTCPµÄ3-wayhandshake£¨Í¨³£ÐèÒª2-3¸öRTT£©¡£
³ýÁË×÷Ϊ·Ö·¢ºÍ´«ÊäµÄǿʢ¹¤¾ß£¬Nginx×îа汾»¹ÎªÊÓÆµÄÚÈݵĴ¦Öóͷ£ºÍ¹ÜÀíÌṩÁ˸ü¶àµÄ¿ÉÄÜÐÔ¡£
ÓëFFmpegµÈ¹¤¾ßµÄ¼¯³É£ºNginx¿ÉÒÔͨ¹ýÖÖÖÖ·½·¨ÓëFFmpegµÈǿʢµÄÊÓÆµ´¦?Àí¹¤¾ß¼¯³É¡£ÀýÈ磬¿ÉÒÔÔÚNginx×÷Ϊ·´Ïò´úÀíµÄǰ¶Ë£¬ÅäºÏFFmpegʵÏÖÊÓÆµµÄ?ʵʱתÂë¡¢½ØÍ¼¡¢Ë®Ó¡Ìí¼ÓµÈ²Ù×÷¡£¶øÍ¨¹ýNginxµÄLuaÄ£¿é£¬ÉõÖÁ¿ÉÒÔÔÚÇëÇóµÖ´ïºó¶Ë´¦Öóͷ£·þÎñ֮ǰ£¬¾ÙÐÐһЩÆðÔ´µÄÊÓÆµÔªÊý¾ÝÌáÈ¡»òУÑ飬Ìá¸ßÕûÌå´¦Öóͷ£Ð§ÂÊ¡£
APIÍø¹ØÓë΢·þÎñ¼Ü¹¹£ºÔÚÏÖ´ú»¯µÄÊÓÆµÆ½Ì¨¼Ü¹¹ÖУ¬Nginx¾³£ÊÎÑÝAPIÍø¹ØµÄ½ÇÉ«£¬ÈÏÕæÇëÇóµÄ·ÓÉ¡¢ÈÏÖ¤¡¢ÏÞÁ÷µÈ¹¦Ð§¡£¹ØÓÚÊÓÆµÉÏ´«¡¢×ªÂ롢ý×ʹÜÀíµÈ΢·þÎñ£¬NginxÄܹ»ÌṩͳһµÄÈë¿Ú£¬²¢Æ¾Ö¤²î±ð·þÎñµÄÌØµã¾ÙÐÐÖÇÄÜ·Ö·¢¡£ÕâʹµÃÊÓÆµÄÚÈݵĹÜÀíÔ½·¢ÎÞаºÍ¸ßЧ¡£
ÖÇÄÜÊÓÆµÆÊÎöÓëÄÚÈÝÉóºË£ºÍŽá»úеѧϰºÍÈ˹¤ÖÇÄÜÊÖÒÕ£¬Nginx»¹¿ÉÒÔ×÷Ϊ±ßÑØÅÌËã½Úµã£¬¼ÓÈëµ½ÊÓÆµÄÚÈݵÄÖÇÄÜÆÊÎöºÍÉóºËÀú³ÌÖС£ÀýÈ磬ÔÚÊÓÆµÈö²¥ÊäÀú³ÌÖУ¬¿ÉÒÔÔÚ±ßÑØ½Úµã¾ÙÐÐÆðÔ´µÄ»ÃæÊ¶±ð»òÉùÒôÆÊÎö£¬ÒÔ¼ì²â²»Á¼ÄÚÈÝ£¬²¢ÔÚµÚһʱ¼ä¾ÙÐÐ×èµ²»ò±ê¼Ç£¬´Ó¶ø°ü¹Üƽ̨ÄÚÈݵĿµ½¡Éú̬¡£
»º´æÊÇÌáÉýÊÓÆµ»á¼ûËÙÂÊ¡¢½µµÍÔ´·þÎñÆ÷ѹÁ¦µÄÒªº¦¡£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·ÖÖÓ¡£
NginxµÄǿʢ¹¦Ð§Ê¹ÆäÔÚÊÓÆµÁ÷ýÌåµÄ¸÷¸ö»·½Ú¶¼ÄÜʩչҪº¦×÷Óá£
µã²¥ÊÓÆµ·þÎñ£º¹ØÓÚÓû§ËæÊ±¿ÉÒÔԢĿµÄÊÓÆµÄÚÈÝ£¬Nginx¿ÉÒÔÖ±½Ó×÷Ϊ¸ßÐÔÄܵÄÎļþ·þÎñÆ÷¡£Í¨Ï꾡Ä廯µÄÉèÖã¬ÈçsendfileÖ¸ÁîµÄ¿ªÆô¡¢»º´æÕ½ÂÔµÄÓÅ»¯£¬NginxÄܹ»ÒÔ¼«¿ìµÄËÙÂʽ«ÊÓÆµÎļþ´«Ê䏸Óû§£¬´ó·ùËõ¶ÌÊÓÆµ¼ÓÔØÊ±¼ä£¬ÌáÉýÓû§Öª×ã¶È¡£
ÅäºÏCDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩µÄ°²ÅÅ£¬NginxÄܹ»½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄ½Úµã£¬ÊµÏÖÈ«Çò¹æÄ£ÄÚµÄÃë¼¶¼ÓÔØ¡£
Ö±²¥·þÎñ£ºÖ±²¥µÄ½¹µãÔÚÓÚʵʱÐÔÓëÎȹÌÐÔ¡£Nginx¿ÉÒÔͨ¹ýRTMPÄ£¿é£¨Èçnginx-rtmp-module£©À´ÎüÊպͷַ¢Ö±²¥Á÷¡£ËüÄܹ»×÷ΪRTMP·þÎñÆ÷£¬½«Ö÷²¥ÍÆË͵½Æ½Ì¨µÄÖ±²¥Á÷¾ÙÐд¦Öóͷ££¬²¢?½«Æä·Ö·¢¸ø³ÉǧÉÏÍòµÄԢĿÕß¡£NginxµÄ¸ß²¢·¢´¦Öóͷ£ÄÜÁ¦ÔÚÕâÀï»ñµÃ³ä·ÖÌåÏÖ£¬Äܹ»ÇáËÉÓ¦¶Ô´ó¹æÄ£Ö±²¥Ô˶¯µÄ¹ÛÖÚÓ¿Èë¡£
Nginx»¹¿ÉÒÔÅäºÏHLS£¨HTTPLiveStreaming£©»òDASH£¨DynamicAdaptiveStreamingoverHTTP£©ÐÒ飬½«Ö±²¥Á÷ת»»Îª±ê×¼µÄHTTPÁ÷£¬Àû±ãÓû§ÔÚÖÖÖÖ×°±¸ÉÏͨ¹ýä¯ÀÀÆ÷Ö±½ÓԢĿ£¬ÎÞÐè×°ÖÃÌØÁíÍâ²¥·ÅÆ÷²å¼þ¡£
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.¶¯Ì¬ÄÚÈݼÓËÙÓ뻺´æÕ½ÂԵľ«½ø£ºÈÃÊÓÆµ¡°Ã롱µ½Óû§ÑÛǰ
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}
»ù×¼²âÊÔ£ºÊ¹Óù¤¾ß£¨Èçab¡¢wrk£©¶ÔNginx¾ÙÐлù×¼²âÊÔ£¬Ä£Äâ¸ß²¢·¢³¡¾°£¬ÕÒ³ö?ÐÔÄÜÆ¿¾±¡£²ÎÊýµ÷½â£ºÆ¾Ö¤¼à¿ØÊý¾ÝºÍ²âÊÔЧ¹û£¬ÓÐÕë¶ÔÐԵص÷½âNginxµÄÉèÖòÎÊý£¬ÀýÈçworker_processes,worker_connections,buffer_size,keepalive_timeoutµÈ?¡£
²Ù×÷ϵͳÄں˲ÎÊýÓÅ»¯£ºÅäºÏ²Ù×÷ϵͳµÄTCP/IP²ÎÊýµ÷ÓÅ£¨Èçnet.core.somaxconn,net.ipv4.tcp_fin_timeoutµÈ£©£¬¿ÉÒÔ½øÒ»²½ÌáÉýNginxµÄÕûÌåÐÔÄÜ¡£
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;#...»º´æºÍÆäËû´úÀíÉèÖÃ...}}
Nginx100%ÊÓÆµÁ÷Á¿£ºÒýÇæË¢Ð£¬Á÷ͨÌåÑéµÄ»ùʯ
ÔÚÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪÏàͬ¡¢ÓéÀÖ¡¢Ñ§Ï°µÄÖ÷Á÷ÔØÌå¡£´Ó¸ßÇåÓ°Ï·µ½ÊµÊ±Ö±²¥£¬Óû§¶ÔÊÓÆµÌåÑéµÄÒªÇóÓëÈÕ¾ãÔö£¬Á÷ͨ¡¢Îȹ̡¢µÍÑÓ³Ù³ÉΪÁËȨºâ·þÎñÖÊÁ¿µÄ?Òªº¦Ö¸±ê¡£¶øÖ§³Ö?ÕâÒ»Çеģ¬ÍùÍùÊÇÒ»¸öǿʢ¶ø¸ßЧµÄWeb·þÎñÆ÷¡£Nginx£¬×÷Ϊҵ½çÁìÏȵĿªÔ´¸ßÐÔÄÜWeb·þÎñÆ÷£¬ÆäÔÚ´¦Öóͷ£¸ß²¢·¢ÅþÁ¬ºÍ¾²Ì¬Îļþ·þÎñ·½ÃæµÄ׿ԽÌåÏÖÔçÒÑÉîÈëÈËÐÄ¡£
Ëæ×ÅÊÓÆµÁ÷Á¿µÄ±¬Õ¨Ê½ÔöÌí£¬¹Å°åµÄNginxÉèÖú͹¦Ð§ÊÇ·ñ»¹ÄÜÖª×ã¡°100%ÊÓÆµÁ÷Á¿¡±µÄÑÏ¿ÁÐèÇó£¿NginxµÄ×îа汾£¬ÕýÒÔÆäÇ㸲ÐÔµÄˢУ¬¸ø³öÁËÏìÁÁµÄÃյס£
Nginx100ÊÓÆµ£ºµãȼÊÓÆµÈö²¥ÊäµÄÒýÇæ£¬ÊÍ·ÅÎÞÏÞDZÄÜ
ÔÚÕâ¸öÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÔçÒÑÉøÍ¸µ½ÎÒÃÇÉúÑĵķ½·½ÃæÃæ¡£´Óʵʱֱ²¥µÄ¾«²Ê˲¼ä£¬µ½µã²¥?ÄÚÈݵÄÌÕ×íÌåÑ飬ÊÓÆµÁ÷µÄÖÊÁ¿ºÍÎȹÌÐÔÖ±½Ó¹ØÏµµ½Óû§µÄÇéÐ÷ÅþÁ¬ºÍÉÌÒµ¼ÛÖµ¡£Òª¹¹½¨Ò»¸öÄܹ»³ÐÔØº£Á¿ÊÓÆµÁ÷Á¿£¬²¢°ü¹ÜµÍÑÓ³Ù¡¢¸ß²¢·¢¡¢¼«ÖÂÁ÷ͨµÄÁ÷ýÌåÆ½Ì¨£¬¾ø·ÇÒ×Ê¡£
¹Å°åµÄWeb·þÎñÆ÷ÔÚÃæÁÙÊÓÆµÁ÷µÄÑÏËàÌôսʱ£¬ÍùÍùÏÔµÃÁ¦ÓÐδ´þ¡£Õâʱ£¬Nginx£¬Õâ¸öÒÔÆä¸ßÐÔÄÜ¡¢¸ß²¢·¢ºÍÎÞаÐÔÖø³ÆµÄWeb·þÎñÆ÷£¬±ã³ÉΪÁËÁ÷ýÌåÁìÓòµÄ¡°³¬µÈÓ¢ÐÛ¡±¡£¶ø¡°Nginx100ÊÓÆµ¡±Õâ¸ö¿´·¨£¬¸üÊǽ«NginxÔÚÊÓÆµÈö²¥ÊäÉϵÄÄÜÁ¦ÍÆÏòÁËÒ»¸öеĸ߶ȣ¬ËƺõΪÆä×¢ÈëÁ˰ٱ¶µÄÄÜÁ¿£¬µãȼÁËÊÓÆµ´«ÊäµÄÒýÇæ£¬ÊͷųöÎÞÏÞµÄDZÄÜ¡£
NginxÊÂʵÊÇÔõÑù³ÉΪÊÓÆµÈö²¥ÊäµÄÍõÕߣ¿ÕâÆäÖÐÔ̺¬×ÅÔõÑùµÄÊÖÒÕÉñÃØ£¿ÈÃÎÒÃÇÒ»ÆðÉîÈëNginxµÄ½¹µã£¬½Ò¿ªËüÔÚÊÓÆµÈö²¥ÊäÁìÓòµÄÉñÆæÁ¶½ðÊõ¡£
Ëæ×ÅÁ÷ýÌåÊÖÒÕµÄÉú³¤£¬HLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)ÒѳÉΪÖ÷Á÷µÄÊÓÆµ´«ÊäÐÒé¡£ËüÃÇͨ¹ý½«ÊÓÆµÇзֳÉСƬ¶Ï£¬²¢Ìṩһ¸öË÷ÒýÎļþ£¨.m3u8»ò.mpd£©£¬ÔÊÐí²¥·ÅÆ÷Æ¾Ö¤ÍøÂç״̬¶¯Ì¬µ÷½âÊÓÆµÂëÂÊ£¬´Ó¶øÌṩԽ·¢Á÷ͨµÄ?ԢĿÌåÑé¡£
NginxÔÚÖ§³ÖHLSºÍDASH·½ÃæÌåÏÖ¾«²Ê¡£ËäÈ»Nginx×Ô¼º²¢²»Ö±½Ó¡°×ªÂ롱ÊÓÆµ£¬µ«Ëü¿ÉÒÔ×÷Ϊһ¸ö¸ßЧµÄWeb·þÎñÆ÷£¬½«ÕâЩÇÐÆ¬»¯µÄÊÓÆµÎļþºÍË÷ÒýÎļþ¿ìËٵطַ¢¸øÓû§¡£
M3U8/MPDÎļþ·Ö·¢£ºNginx¿ÉÒÔÇáËɵØÎªÕâЩË÷ÒýÎļþÌṩ·þÎñ¡£ÊÓÆµÆ¬¶Ï£¨.ts/.mp4£©·Ö·¢£ºNginxµÄ¸ß²¢·¢´¦Öóͷ£ÄÜÁ¦£¬Ê¹ÆäÄܹ»¿ìËÙÏìÓ¦²¥·ÅÆ÷¶Ô´ó×ÚСÊÓÆµÆ¬¶ÏµÄÇëÇó¡£RangeÇëÇó£ºNginx¶ÔHTTPRangeÇëÇóµÄÖ§³Ö£¬Ê¹µÃ?²¥·ÅÆ÷¿ÉÒÔ¾ÙÐжϵãÐø²¥¡¢¿ì½ø¿ìÍ˵È?²Ù×÷£¬¶øÎÞÐèÖØÐÂÏÂÔØÕû¸öÊÓÆµ¡£
ÔÚµ±½ñÕâ¸öÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÒѳÉΪÈËÃÇ»ñÊØÐÅÏ¢¡¢ÓéÀÖÏûDz¡¢Éç½»»¥¶¯µÄÖ÷ÒªÔØÌå¡£´Ó¸ßÇåÓ°Ï·µÄµã²¥µ½ÊµÊ±Ö±²¥µÄ»ð±¬?£¬ÊÓÆµÁ÷ýÌåµÄÐèÇó·ºÆð³ö¼¸ºÎ¼¶ÔöÌí¡£¶øÔÚÕâ±³ºó£¬Ö§³ÖÆðº£Á¿ÊÓÆµÁ÷ͨ´«ÊäµÄ£¬ÍùÍùÊÇÄÇЩĬĬÎÞÎÅÈ´ÖÁ¹ØÖ÷ÒªµÄÊÖÒÕ»ùʯ£¬Nginx¼´ÊÇÆäÖÐÇ̳þ¡£
Ðí¶àÈË¿ÉÄܶÔNginxµÄǿʢ?ÐÔÄÜÔçÓжúÎÅ£¬ÓÈÆäÊÇÔÚ´¦Öóͷ£¸ß²¢?·¢ÅþÁ¬ºÍ¾²Ì¬Îļþ´«Êä·½Ãæ£¬ËüÏÕЩÊÇÎÞ¿ÉÆ¥µÐµÄ±£´æ¡£µ±ÎÒÃǽ«ÑÛ¹âͶÏòÊÓÆµÁ÷ýÌåÕâ¸ö¶ÔÐÔÄÜÒªÇó¼«ÎªÑÏ¿ÁµÄ?ÁìÓòʱ£¬NginxÓÖ½«Õ¹ÏÖ³öÔõÑùµÄ¡°100%ÊÓÆµ100%ÐÔÄÜ¡±µÄʵÁ¦ÄØ£¿
Ò»¡¢NginxµÄ½¹µãÓÅÊÆ£ºÎªºÎËüÊÇÊÓÆµÁ÷ýÌåµÄÓÅÑ¡£¿
ÒªÃ÷È·NginxÔõÑùʵÏÖ¡°100%ÊÓÆµ100%ÐÔÄÜ¡±£¬ÎÒÃÇÊ×ÏÈÐèÒªÉîÈëÆä½¹µã¼Ü¹¹ºÍÉè¼ÆÀíÄî¡£Nginx½ÓÄɵÄ?ÊÇÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕµÄI/OÄ£×Ó£¬ÕâÓë¹Å°åµÄApache·þÎñÆ÷½ÓÄɵÄÀú³Ì/Ïß³ÌÄ£×ÓÓÐ×ÅʵÖʵÄÇø±ð?¡£
ÊÂÎñÇý¶¯ÓëÒì²½·ÇÛÕ±Õ£º¹Å°åµÄ·þÎñÆ÷Ä£×Ó£¬ÀýÈçApache£¬Ã¿¸öÇëÇóͨ³£»á½¨ÉèÒ»¸öеÄÀú³Ì»òÏß³ÌÀ´´¦Öóͷ£¡£µ±?²¢·¢ÇëÇóÁ¿Ôö´óʱ£¬´ó×ÚµÄÀú³Ì/Ï̻߳áÏûºÄ´ó×ÚµÄϵͳ×ÊÔ´£¨CPUºÍÄڴ棩£¬µ¼ÖÂÉÏÏÂÎÄÇл»ÆµÈÔ£¬ÐÔÄܼ±¾çϽµ£¬ÉõÖÁ·ºÆð¡°¾ªÈºÐ§Ó¦¡±¡£¶øNginxÔò½ÓÄɼòµ¥Ö÷Àú³Ì£¨masterprocess£©ºÍ¶à¸öÊÂÇéÀú³Ì£¨workerprocesses£©µÄģʽ¡£
ÊÓÆµÁ÷ýÌå¶Ô´ø¿íµÄÐèÇóÖØ´ó£¬µ«Ò²ÐèҪϸÄ廯µÄ¹ÜÀí£¬ÒÔ±ÜÃâµ¥¸öÓû§ºÄ¾¡´ø¿í£¬Ó°ÏìÕûÌå·þÎñÖÊÁ¿¡£NginxÌṩÁ˶àÖÖ¹¤¾ßÀ´¿ØÖÆÁ÷Á¿ºÍÅþÁ¬¡£
limit_rateºÍlimit_rate_after£ºlimit_rateÖ¸Áî¿ÉÒÔÏÞÖÆµ¥¸öÅþÁ¬µÄ×î´óÏÂÔØËÙÂÊ£¬±ÜÃâ¶ñÒâÓû§»òÒì³£ÇëÇóÕ¼Óùý¶à´ø¿í¡£limit_rate_afterÔò¿ÉÒÔÔÚµÖ´ïÒ»¶¨´«ÊäÁ¿ºó²Å×îÏÈÏÞËÙ£¬×èÖ¹¶ÔÕý³£´«ÊäÔì³É²»±Ø?ÒªµÄ×ÌÈÅ¡£
ÀýÈ磬¹ØÓÚÖ±²¥³¡¾°£¬ÎÒÃÇ¿ÉÒÔÉèÖÃÒ»¸öºÏÀíµÄ²¥·ÅËÙÂÊÏÞÖÆ£¬È·±£ËùÓйÛÖÚ¶¼ÄÜ»ñµÃÏà¶ÔÎȹ̵IJ¥·ÅÌåÑé¡£keepalive_timeoutºÍkeepalive_requests£º³¤ÅþÁ¬£¨Keep-Alive£©Äܹ»¸´ÓÃTCPÅþÁ¬£¬ïÔÌTCPÈý´ÎÎÕÊֵĿªÏú£¬¹ØÓÚÒ»Á¬²¥·Å¶à¸öÊÓÆµÆ¬¶Ï»òÖ±²¥Á÷À´Ëµ£¬Ð§ÂÊÌáÉýÏÔÖø¡£
ºÏÀíÉèÖÃkeepalive_timeout£¨ÅþÁ¬¼á³Ö³¬Ê±Ê±¼ä£©ºÍkeepalive_requests£¨Ò»¸öÅþÁ¬ÔÊÐíµÄ×î´óÇëÇóÊý£©£¬¿ÉÒÔÔÚïÔÌÅþÁ¬½¨É豾ǮºÍ×èÖ¹×ÊÔ´ÀÄÓÃÖ®¼äÈ¡µÃƽºâ¡£worker_connections£ºNginxµÄworker_processesºÍworker_connections²Î?ÊýÊÇÆä¸ß²¢·¢ÄÜÁ¦µÄ»ùʯ¡£
ÔÚÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÒѾ³ÉΪÎÒÃÇÉúÑÄÖв»¿É»òȱµÄÒ»²¿·Ö¡£ÎÞÂÛÊǾ«²ÊµÄÓ°Ï·¡¢Éú¶¯µÄÖ±²¥£¬Õվɸ»ÓнÌÓýÒâÒåµÄ½ÌѧÊÓÆµ£¬Á÷ͨµÄԢĿÌåÑé¶¼ÖÁ¹ØÖ÷Òª¡£ÊÓÆµÁ÷ýÌå·þÎñµÄ±³ºó£¬ÍùÍùÒþ²Ø×ÅÖØ´óµÄÊÖÒÕÌôÕ½¡£ÔõÑùÔڸ߲¢?·¢»á¼ûϰü¹ÜÊÓÆµµÄÁ÷ͨ²¥·Å£¿ÔõÑùÓÐÓýµµÍ·þÎñÆ÷ѹÁ¦£¬½ÚÔ¼±¾Ç®£¿Nginx£¬×÷Ϊһ¿î¸ßÐÔÄܵÄWeb·þÎñÆ÷ºÍ·´Ïò´úÀí·þÎñÆ÷£¬ÒÀ¸½Æä׿ԽµÄÐÔÄܺÍÎÞаµÄÉèÖ㬳ÉΪÏàʶ¾öÕâЩÎÊÌâµÄ?ÀûÆ÷£¬ÎªÊµÏÖ¡°Nginx100%ÊÓÆµ£¬100%ÐÔÄÜ¡±µÄÄ¿µÄÌṩÁ˼áʵµÄÊÖÒÕÖ§³Ö¡£
Ò»¡¢NginxµÄ½¹µãÓÅÊÆ£ºÎªÊ²Ã´Ñ¡ÔñËüÀ´´¦Öóͷ£ÊÓÆµ£¿
NginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµÁ÷ýÌåÁìÓòÍÑÓ±¶ø³ö£¬Ô´ÓÚÆäÆæÒìµÄÉè¼ÆÀíÄîºÍǿʢµÄ¹¦Ð§¼¯¡£
ÊÂÎñÇý¶¯£¬Òì²½·ÇÛÕ±ÕI/OÄ£×Ó£ºÕâÊÇNginxÐÔÄÜ׿ԽµÄ»ùʯ¡£¹Å°åµÄWeb·þÎñÆ÷£¨ÈçApache£©½ÓÄÉÀú³Ì?»òÏß³ÌÄ£×Ó£¬Ã¿¸öÇëÇó¶¼»áÏûºÄÒ»¸öÀú³Ì»òỊ̈߳¬Ôڸ߲¢·¢³¡¾°ÏÂÈÝÒ×Ôì³É×ÊÔ´ºÄ¾¡£¬ÐÔÄÜÆ¿¾±Í¹ÏÔ¡£¶øNginx½ÓÄÉÊÂÎñÇý¶¯Ä£×Ó£¬Ê¹ÓÃepoll¡¢kqueueµÈ¸ßЧµÄ?I/O¶à·¸´ÓÃÊÖÒÕ£¬Äܹ»ÓÃÉÙÉÙµÄÀú³ÌºÍÏ̴߳¦Öóͷ£º£Á¿²¢·¢ÅþÁ¬¡£
sendfileon;£ºÆôÓÃsendfileϵͳŲÓ㬿ÉÒÔÖ±½Ó½«Îļþ´ÓÄں˻º´æ¸´ÖƵ½ÍøÂçÌ×½Ó×Ö£¬×èÖ¹ÁËÓû§¿Õ¼äºÍÄں˿ռäÖ®¼äµÄÊý¾Ý¿½±´£¬ÏÔÖøÌá¸ßÁËÎļþ´«ÊäЧÂÊ¡£tcp_nopushon;ºÍtcp_nodelayon;£ºtcp_nopush¿ÉÒÔÔÚ·¢ËÍÏìӦͷºó£¬µÈ?´ýÊý¾Ý°üÌîÂú£¬ÒÔïÔÌTCP±¨ÎÄÊýÄ¿£»tcp_nodelayÔòÏà·´£¬ÔÊÐíÁ¬Ã¦·¢ËÍСÊý¾Ý°ü£¬¹ØÓÚÑÓ³ÙÃô¸ÐµÄÓ¦Óã¨ÈçijЩֱ²¥³¡¾°£©¿ÉÄܸüÓÐÀû¡£
ÐèҪƾ֤ÏêϸӪҵ³¡¾°¾ÙÐвâÊÔºÍÑ¡Ôñ¡£keepalive_timeout£ºÉèÖÃHTTP³¤ÅþÁ¬µÄ³¬Ê±Ê±¼ä¡£Êʵ±µÄ³¤ÅþÁ¬¿ÉÒÔïÔÌTCP½¨ÉèºÍ¹Ø±ÕµÄ¿ªÏú£¬Ìá¸ßÐÔÄÜ£¬µ«¹ý³¤µÄ³¬Ê±Ê±¼ä¿ÉÄÜ»áÕ¼Óò»ÐëÒªµÄÅþÁ¬×ÊÔ´¡£
µ±ÊÓÆµÁ÷Á¿¼¤Ôöʱ£¬¼òµ¥·þÎñÆ÷ÄÑÒÔÔâÊÜ¡£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(µÚ?Èý·½Ä£¿é)»òÆäËû·½·¨ÊµÏÖ¶Ôºó¶Ë·þÎñÆ÷µÄ¿µ½¡¼ì²é£¬µ±Ä³¸ö·þÎñÆ÷·ºÆð¹ÊÕÏʱ£¬×Ô¶¯½«Æä´Ó¸ºÔØÆ½ºâ³ØÖÐÒÆ³ý£¬È·±£·þÎñµÄ¿ÉÓÃÐÔ¡£
RTMPÎüÊÕ£ºnginx-rtmp-module¼àÌýRTMP¶Ë¿Ú£¬ÎüÊÕÖ÷²¥µÄÍÆÁ÷¡£×ªÂë´¦Öóͷ££ºNginx¿ÉÒÔ½«ÎüÊÕµ½µÄRTMPÁ÷ͨ¹ýexecÖ¸Áîת´ï¸øFFmpegÀú³Ì¾ÙÐÐתÂë¡£FFmpeg»áƾ֤ԤÉèµÄתÂë¹æÔò£¬½«ÊÓÆµÊä³öΪHLS»òDASHÃûÌõÄýÌåÇÐÆ¬ºÍ²¥·ÅÁÐ±í¡£
HTTP·Ö·¢£ºNginxÔÙÒÔHTTPÐÒ齫ÕâЩýÌåÇÐÆ¬ºÍ²¥·ÅÁбí·Ö·¢¸øÔ¢Ä¿Õß¡£
ÕâÖÖ¡°ÍÆ¡¢×ª¡¢·¢¡±Ò»Ì廯µÄ½â¾ö¼Æ»®£¬¼«´óµØ¼ò»¯ÁËÖ±²¥ÏµÍ³µÄ¼Ü¹¹£¬²¢ÇÒNginxµÄ¸ßÐÔÄÜÄܹ»°ü¹ÜÔڸ߲¢·¢ÍÆÁ÷ºÍתÂëʹÃüÏÂÒÀÈ»¼á³ÖÎȹ̡£µ±NginxµÄ´¦Öóͷ£ÄÜÁ¦µÖ´ï¡°100¡±Ê±£¬ÕâÒâζ×ÅËü¿ÉÒÔͬʱ´¦Öóͷ£Êýʮ·ÉõÖÁÉϰÙ·¸ßÇåRTMPÍÆÁ÷£¬²¢½«ÆäÁ÷ͨµØ×ªÂë³É¶àÖÖ×Ô˳ӦÂëÂʵÄÁ÷ýÌ壬Ϊº£Á¿¹ÛÖÚÌṩÎÞ·ìԢĿÌåÑé¡£
µã²¥·þÎñÓëCDN·Ö·¢£ºNginxÇý¶¯µÄÈ«ÇòÊÓÆµÄÚÈÝ´¥´ï
¹ØÓÚÊÓÆµµã²¥·þÎñ¶øÑÔ£¬µÍÑÓ³Ù¡¢¸ßËÙÂÊÊÇÓû§ÌåÑéµÄÒªº¦¡£NginxÔÚÕâÀïÊÎÑÝ×ÅÖÁ¹ØÖ÷ÒªµÄ½ÇÉ«£¬ÓÈÆäÊÇÔÚ¹¹½¨ÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©Ê±¡£
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Á÷ÌṩÎȹ̿ɿ¿µÄ·Ö·¢¡£
ÏêϸµÄ»á¼ûÈÕÖ¾¹ØÓÚ¼à¿ØºÍ¹ÊÕÏÅŲéºÜÊÇÖ÷Òª£¬µ«¹ý¶àµÄÈÕÖ¾¼Í¼»áÔöÌí´ÅÅÌI/O¼ç¸º¡£
Òì²½ÈÕÖ¾£ºNginxĬÈÏÊÇÒ첽дÈÕÖ¾µÄ?£¬ÕâÒѾºÜºéÁ÷ƽÉÏïÔÌÁ˶ÔÖ÷Àú³ÌµÄÓ°Ïì¡£¾«¼òÈÕÖ¾ÃûÌãºÆ¾Ö¤ÏÖʵÐèÇ󣬿ÉÒÔ¾«¼òlog_formatÖеÄ×ֶΣ¬Ö»¼Í¼ÐëÒªµÄÐÅÏ¢£¬ïÔÌÈÕÖ¾ÎļþµÄ¾Þϸ¡£ÈÕÖ¾ÂÖת£ºÊ¹ÓÃlogrotateµÈ¹¤¾ß°´ÆÚ¶ÔÈÕÖ¾Îļþ¾ÙÐÐÇиîºÍ¹éµµ£¬×èÖ¹µ¥¸öÈÕÖ¾Îļþ¹ý´ó£¬Ó°Ïì¶ÁдÐÔÄÜ¡£
Nginx100%ÊÓÆµ²¥·Å100%£ºÊÖÒÕË¢ÐÂÇý¶¯µÄÁ÷ͨÌåÑé
ÔÚÕâ¸öÄÚÈÝΪÍõµÄʱ´ú£¬ÊÓÆµÒÑÈ»³ÉΪÐÅÏ¢Èö²¥ºÍÓéÀÖÏûºÄµÄÖ÷Á÷ÔØÌå¡£Óû§¶ÔÊÓÆµ²¥·ÅµÄÁ÷ͨ¶È¡¢ÇåÎú¶ÈºÍÏìÓ¦ËÙÂÊÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£¶ø×÷Ϊ¸ßÐÔÄÜWeb·þÎñÆ÷ºÍ·´Ïò´úÀíµÄNginx£¬Ê¼ÖÕÕ¾ÔÚÊÖÒÕÇ°ÑØ£¬Ò»Ö±ÍƳÂ??³öУ¬ÎªÊÓÆµÁ÷ýÌåÐÐÒµµÄÉú³¤×¢ÈëǿʢµÄ¶¯Á¦¡£
×îа汾µÄNginx£¬¸üÊÇÒÔ¡°100%ÊÓÆµ²¥·Å100%¡±µÄ¿ÚºÅ£¬ÏòÒµ½çչʾÁËÆäÔÚÊÓÆµ´«ÊäÁìÓòµÄÉîֿʵÁ¦ÓëÎÞÏÞDZÁ¦¡£
Ò»¡¢º»Êµ»ù´¡£ºHTTP/2ÓëHTTP/3µÄÖÜÈ«Éý¼¶
ÊÓÆµÁ÷ýÌå´«ÊäµÄ½¹µãÔÚÓÚ¸ßЧµÄHTTPÐÒé¡£Nginx×îа汾ÔÚÐÒé²ãÃæµÄˢУ¬ÎªÊµÏÖ100%Á÷ͨ²¥·ÅµÓÚ¨Á˼áʵµÄ»ù´¡¡£
HTTP/2µÄ?Éî¶ÈÓÅ»¯£ºHTTP/2ÐÒéµÄÒýÈ룬ÒÔÆä¶à·¸´Óá¢Í·²¿Ñ¹Ëõ¡¢·þÎñÆ÷ÍÆË͵ÈÌØÕ÷£¬¼«´óµØÌáÉýÁËWeb´«ÊäЧÂÊ¡£NginxÉî¶ÈÓÅ»¯Á˶ÔHTTP/2µÄÖ§³Ö£¬ÏÔÖøïÔÌÁËÊÓÆµ¼ÓÔØÊ±µÄÑÓ³Ù£¬ÓÈÆäÊÇÔÚ´«Êä´ó×ÚСÊÓÆµÆ¬¶Ï»òÐèÒª¿ìËÙÇл»ÊÓÆµÊ±£¬ÆäÓÅÊÆÓÈΪÏÔ×Å¡£
nginx-rtmp-moduleµÄÓÅÊÆ£ºÕâ¸öÄ£¿éºÜÊÇǿʢ£¬ËüÔÊÐíNginx³äµ±RTMP·þÎñÆ÷£¬Ö§³ÖÖ±²¥ÍÆÁ÷¡¢Ö±²¥µã²¥?£¬ÉõÖÁ»¹¿ÉÒÔÌìÉúHLSºÍDASHÁ÷£¨Ò»ÖÖ¡°ÀÁ÷×ªÍÆ¡±µÄ»ìÏýģʽ£©£¬½øÒ»²½À©Õ¹ÁËNginxÔÚÁ÷ýÌåÁìÓòµÄÓ¦Óá£RTMPÓÅ»¯£ºµ÷½â»º³åÇø£ºÍ¨¹ýrtmp_bufferºÍrtmp_max_bufferÖ¸Á¿ÉÒÔµ÷½âRTMPµÄ»º³åÇø¾Þϸ£¬ÒÔÓ¦¶ÔÍøÂ粨¶¯¡£
ÍÆÁ÷Óë»ØÔ´£ºÈôÊÇNginx×÷ΪRTMP·þÎñÆ÷£¬ÐèÒª¹Ø×¢ÍÆÁ÷¶ËµÄ´ø¿íºÍÎȹÌÐÔ¡£ÈôÊÇ×÷ΪRTMP»ØÔ´£¬ÔòÐèҪȷ±£Ô´Õ¾µÄRTMP·þÎñÎȹ̡£
½¹µãÓÅ»¯Õ½ÂÔËÄ£ºÏ꾡Èë΢µÄ?HTTPÉèÖ㬽õÉÏÌí»¨£¡
³ýÁËÉÏÊö½¹µãÕ½ÂÔ£¬Ò»Ð©Ï꾡µÄHTTPÉèÖÃͬÑùÄÜΪÊÓÆµÓÅ»¯Ð¢Ë³Á¦Á¿¡£
Keep-AliveÅþÁ¬£ºÆôÓÃHTTPKeep-Alive£¨keepalive_timeoutÖ¸Á¿ÉÒÔ¸´ÓÃTCPÅþÁ¬£¬ïÔÌTCPÈý´ÎÎÕÊֵĿªÏú£¬¹ØÓÚÆµÈÔµÄСÎļþ´«Ê䣨ÈçHLSµÄ.tsƬ¶Ï£©Ð§Âʼ«¸ß¡£HTTP/2ÐÒ飺ÈçǰËùÊö£¬HTTP/2µÄÒýÈëÊÇÊÓÆµ´«ÊäµÄÒ»´ó±¼ÌÚ¡£
Õâ¸öÖµÐèҪƾ֤·þÎñÆ÷µÄÄÚ´æºÍ²Ù×÷ϵͳÏÞÖÆÀ´É趨¡£ÔÚ´¦Öóͷ£ÊÓÆµÁ÷Á¿Ê±£¬ÓÈÆäÐèÒª½«ÆäÉèÖõÃ×ã¹»´ó£¬ÒÔ×èÖ¹ÒòÅþÁ¬ÊýÏÞÖÆ¶øµ¼ÖµÄÇëÇóʧ°Ü¡£µ÷ÓŽ¨Ò飺ÍŽáulimit-nµ÷½âϵͳµÄÎļþÐÎò·ûÏÞÖÆ£¬È·±£worker_connectionsµÄÖµÄܹ»±»ÏµÍ³Ö§³Ö¡£
ÀýÈ磬ÈôÊÇworker_connectionsÉèÖÃΪ10240£¬ÄÇôϵͳµÄÎļþÐÎò·ûÏÞÖÆÖÁÉÙÓ¦´óÓÚ¼´ÊÇworker_processes*worker_connections¡£
2.ÊÓÆµÎļþ´«ÊäµÄЧÂÊÓÅ»¯£ºsendfile,tcpnopush,tcpnodelay
sendfileon;£º´ËÖ¸ÁîÔÊÐíNginxÖ±½Ó½«Îļþ´ÓÎļþϵͳµÄ»º³åÇø¸´ÖƵ½ÍøÂçÌ×½Ó×Ö»º³åÇø£¬ÈƹýÓû§¿Õ¼ä£¬¼«´óµØ?ïÔÌÁËCPUµÄ¿ªÏúºÍÄڴ濽±´?µÄ´ÎÊý£¬¹ØÓÚ´«Êä´óÎļþ£¨ÈçÊÓÆµ£©ºÜÊǸßЧ¡£tcp_nopushon;£ºµ±Nginx·¢ËÍÏìӦͷºÍÎļþÄÚÈÝʱ£¬´ËÖ¸Áî»áÖ»¹Ü½«ËüÃÇ×éºÏ³ÉÒ»¸öTCPÊý¾Ý°ü·¢ËÍ£¬ïÔÌÍøÂçͨѶµÄ´ÎÊý£¬Ìá¸ß´«ÊäЧÂÊ¡£
Nginx²¢·ÇÕϰ²»Ç°£¬Æä¿ª·¢ÕßÉçÇøºÍÉÌÒµ°æ±¾NginxPlus¶¼ÔÚÒ»Á¬Íƶ¯ÆäÔÚÊÓÆµÁìÓòµÄÄÜÁ¦½çÏß¡£
HTTP/3µÄÖÜÈ«ÆÕ¼°£ºËæ×ÅQUICÐÒéµÄ?³ÉÊìºÍä¯ÀÀÆ÷Ö§³ÖµÄÆÕ¼°£¬HTTP/3½«³ÉΪNginx´¦Öóͷ£ÊÓÆµÁ÷Á¿µÄ±ê×¼ÐÒ飬´øÀ´¸ü¿ìµÄÅþÁ¬½¨ÉèËÙÂʺ͸üÇ¿µÄÍøÂç˳ӦÐÔ¡£WebRTCµÄÉî¶È¼¯³É£º¹ØÓÚµÍÑÓ³ÙÖ±²¥¡¢ÊµÊ±»¥¶¯ÊÓÆµµÈ³¡¾°£¬WebRTCµÄ¼¯³É½«ÊÇÖ÷ÒªµÄÉú³¤Æ«Ïò¡£
NginxÓÐÍû³ÉΪWebRTCýÌå·þÎñÆ÷µÄÖ÷Òª×é³É²¿·Ö£¬Ìṩ¸üǿʢµÄÐÅÁýÌåת·¢ºÍ¹ÜÀíÄÜÁ¦¡£AIÓëÊÓÆµÆÊÎöµÄÍÅ½á£ºËæ×ÅAIÊÖÒÕµÄÉú³¤£¬ÊÓÆµÄÚÈÝÆÊÎö£¨ÈçÄÚÈÝʶ±ð¡¢ÖÇÄÜÍÆ¼ö£©½«±äµÃÔ½À´Ô½Ö÷Òª¡£Nginx¿ÉÒÔ×÷ΪÊý¾ÝÍøÂçºÍÆðÔ´´¦?ÀíµÄÈë¿Ú£¬ÓëAIÄ£×ÓÐͬÊÂÇ飬ΪÊÓÆµÄÚÈÝÆ½Ì¨Ìṩ¸üÖÇÄܵķþÎñ¡£
ÔÆÔÉúÓë΢·þÎñ¼Ü¹¹µÄ˳Ӧ£ºÔÚÔÆÔÉúºÍ΢·þÎñÊ¢ÐеÄ?½ñÌ죬Nginx×÷Ϊ±ßÑØ´úÀí¡¢APIÍø¹ØµÄ½ÇÉ«½«Óú·¢Ö÷Òª¡£ÆäÇáÁ¿¼¶¡¢¸ßÉìËõÐÔµÄÌØµã£¬Ê¹ÆäÄܹ»ÍêÉÆÈÚÈëÖÖÖÖÔÆÆ½Ì¨ºÍÈÝÆ÷»¯°²ÅÅÇéÐÎÖУ¬ÎªÊÓÆµ·þÎñµÄµ¯ÐÔÉìËõÌṩ֧³Ö¡£¸üÖÇÄܵÄÁ÷Á¿µ÷ÀíÓëÓÅ»¯£ºÎ´À´£¬Nginx¿ÉÄܻἯ³É¸üÏȽøµÄÁ÷Á¿µ÷ÀíËã·¨£¬Äܹ»Æ¾Ö¤ÊµÊ±ÍøÂç״̬¡¢Óû§×°±¸ÄÜÁ¦ÒÔ¼°ÄÚÈÝÀàÐÍ£¬¶¯Ì¬µ÷½â´«ÊäÕ½ÂÔ£¬ÊµÏÖ¡°100%ÊÓÆµÁ÷Á¿¡±µÄÖÇÄÜÓÅ»¯¡£
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¶ÔÕâЩÐÂÐÒéµÄÖ§³Ö£¬ÎªÊµÏÖ¼«ÖÂÁ÷ͨµÄÊÓÆµÌåÑéÌṩÁ˸üÇ¿µÄÊÖÒÕ±£?ÕÏ¡£
µÚ?¶þÕ£ºNginxµÄ?ÊÓÆµÓÅ»¯½ø½×£º´ÓCDNµ½¶¯Ì¬ÏìÓ¦µÄÉî¶Èµñ×Á
ÔÚÕÆÎÕÁËNginxÔÚÊÓÆµÓÅ»¯·½ÃæµÄ»ù´¡ÄÜÁ¦Ö®ºó£¬ÎÒÃÇÐèÒª½øÒ»²½ÉîÈ룬½âËøÆä¸ü¸ß¼¶µÄÌØÕ÷£¬½«ÊÓÆµ²¥·ÅÌåÑéÍÆÏò¼«Ö¡£ÕâÉæ¼°µ½ÔõÑùʹÓÃNginx¹¹½¨¸ßЧµÄCDN¼Ü¹¹£¬ÔõÑù¾ÙÐÐϸÄ廯µÄÁ÷Á¿¹ÜÀíºÍ¶¯Ì¬ÏìÓ¦£¬ÒÔ¼°ÔõÑùÓ¦¶ÔÊÓÆµÁ÷ýÌå´«ÊäÖеÄÖÖÖÖÌôÕ½¡£
2.1¹¹½¨¸ßЧµÄCDN±ßÑØ½Úµã£º¾Í½ü»á¼û£¬½µµÍÑÓ³ÙÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©ÊÇÏÖ´úÊÓÆµÁ÷ýÌå·þÎñ²»¿É»òȱµÄ×é³É²¿?·Ö¡£Nginx×÷ΪһÖÖ¸ßÐÔÄܵÄWeb·þÎñÆ÷£¬×ÔÈ»ÊʺÏ×÷ΪCDNµÄ±ßÑØ½Úµã¡£Í¨¹ýÔÚÈ«Çò¹æÄ£ÄÚ°²ÅÅNginx·þÎñÆ÷£¬¿ÉÒÔ½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄµØÀíλÖ㬴ӶøÏÔÖø½µµÍ»á¼ûÑÓ³Ù£¬Ìá¸ß²¥·ÅÁ÷ͨ¶È¡£
Nginx×÷Ϊ»ØÔ´´úÀí:CDN±ßÑØ½Úµã£¨Nginx£©ÈÏÕæÏìÓ¦Óû§µÄÇëÇó¡£µ±Óû§ÇëÇóÊÓÆµÇÐÆ¬Ê±£¬ÈôÊDZßÑØ½Úµã»º´æÖв»±£´æ£¬Nginx»á×÷Ϊ´úÀí£¬ÏòÔ´Õ¾£¨»òÉÏÒ»¼¶»º´æ½Úµã£©ÌᳫÇëÇ󣬻ñÈ¡ÄÚÈÝ£¬²¢½«ÄÚÈÝ·µ»Ø¸øÓû§£¬Í¬Ê±½«ÄÚÈÝ»º´æµ½ÍâµØ£¬ÒÔ±¸ºóÐøÓû§»á¼û¡£
ÿ¸öÊÂÇéÀú³Ì¿ÉÒÔͬʱ´¦Öóͷ£³ÉǧÉÏÍò¸ö²¢·¢ÅþÁ¬£¬Ëüͨ¹ýÊÂÎñÑ»·£¨eventloop£©À´¸ßЧµØ¹ÜÀíÕâЩÅþÁ¬¡£µ±Ò»¸öÅþÁ¬ÓÐI/OÊÂÎñ±¬·¢Ê±£¨ÈçÊý¾ÝµÖ´ï»ò·¢ËÍÍê±Ï£©£¬Nginx»áÁ¬Ã¦¸ÐÖªµ½?£¬²¢½«Æä½»¸øÏìÓ¦µÄÊÂÇéÀú³Ì´¦Öóͷ££¬¶øÎÞÐèÛÕ±ÕÆÚ´ý¡£ÕâÖÖÄ£×Ó¼«´ó?µØ?½µµÍÁË×ÊÔ´ÏûºÄ£¬Ê¹µÃNginxÄܹ»ÒÔ¼«µÍµÄÄÚ´æÕ¼Óô¦Öóͷ£¼«¸ßµÄ²¢·¢ÅþÁ¬¡£
¹ØÓÚÊÓÆµÁ÷ýÌå¶øÑÔ£¬ÕâÒâζ×Å×ÝÈ»ÔÚÊý°ÙÍòÓû§Í¬Ê±Ô¢Ä¿Ö±²¥»òµã²¥µÄÇéÐÎÏ£¬NginxÒ²Äܼá³ÖÎȹ̺͸ßЧ£¬°ü¹Üÿһ֡ÊÓÆµ¶¼ÄÜʵʱËÍ´ï¡£
¸ßЧµÄ¾²Ì¬Îļþ´¦Öóͷ££ºÊÓÆµÎļþ£¬ÎÞÂÛÊǵ㲥µÄMP4¡¢FLV£¬ÕÕ¾ÉÖ±²¥ÇÐÆ¬ºóµÄTSÎļþ£¬ÊµÖÊÉ϶¼ÊǾ²Ì¬Îļþ¡£NginxÔÚ´¦Öóͷ£¾²Ì¬Îļþ·½ÃæÓÐ×ÅÌìÉúµÄÓÅÊÆ¡£ËüÄܹ»Ö±½Ó´Ó²Ù×÷ϵͳÄں˻ñÈ¡ÎļþÊý¾Ý£¬²¢Í¨¹ýsendfile()ϵͳŲÓøßЧµØ½«Êý¾Ý·¢Ë͵½ÍøÂç¡£
sendfile()µÄÒªº¦ÔÚÓÚËüÄܹ»ÈƹýÓû§¿Õ¼ä£¬Ö±½ÓÔÚÄں˿ռä¾ÙÐÐÎļþµ½socketµÄÊý¾Ý´«Ê䣬ʡȥÁËÓû§¿Õ¼äºÍÄں˿ռäµÄ?Á½´ÎÊý¾Ý¿½±´£¬´ó´ó?Ìá¸ßÁË´«ÊäЧÂÊ£¬½µµÍÁËCPU¸ºÔØ¡£¹ØÓÚº£Á¿µÄÊÓÆµÎļþ·Ö·¢£¬NginxµÄÕâÒ»ÌØÕ÷Ö±½Óת»¯Îª¸ü¿ìµÄ¼ÓÔØËÙÂʺ͸üµÍµÄ·þÎñÆ÷ѹÁ¦¡£
Nginx100%ÊÓÆµ´«Ê䣺мÍÔªµÄ»ùʯ£¬¼«ÖÂÁ÷ͨµÄÔÊÐí
ÔÚÐÅÏ¢±¬Õ¨µÄ½ñÌ죬ÊÓÆµÒÑÈ»³ÉΪÎÒÃÇÏàͬ¡¢ÓéÀÖ¡¢Ñ§Ï°µÄ½¹µãÔØÌå¡£´Ó¸ßÇåÓ°Ï·¡¢ÊµÊ±Ö±²¥µ½?ÔÚÏß½ÌÓý£¬Óû§¶ÔÊÓÆµÌåÑéµÄÒªÇó´ÓÎ´ÔÆÔÆÖ®¸ß¡ª¡ªÁ÷ͨ¡¢Îȹ̡¢µÍÑÓ³Ù£¬ËƺõÉíÁÙÆä¾³¡£Ö§³ÖÆðÕâÖØ´óÊÓÆµºéÁ÷µÄÊÖÒÕÌôÕ½Ò²ÈÕÒæÑÏËà¡£´ø¿íµÄÏÞÖÆ¡¢·þÎñÆ÷µÄѹÁ¦¡¢ÒÔ¼°ÖÖÖÖÍøÂçÇéÐÎϵIJ»È·¶¨ÐÔ£¬¶¼¿ÉÄÜÈÃÓû§ÌåÑé˲¼ä±ÀËú¡£
ÔÚÕⳡ¶Ô¼«ÖÂÊÓÆµÌåÑéµÄ×·ÇóÖУ¬Nginx£¬Õâ¸öÒÔ¸ßÐÔÄܺÍÎȹÌÐÔÖø³ÆµÄWeb·þÎñÆ÷£¬ÕýÒÔÆä×îа汾µÄǿʢ?ÄÜÁ¦£¬³ÉΪʵÏÖ¡°100%ÊÓÆµÁ÷ͨ´«Ê䡱ÕâÒ»ÐÛΰĿµÄµÄ»ùʯ¡£
NginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµ´«ÊäÁìÓò´ó·ÅÒì²Ê£¬²¢·ÇÎÞÒâ¡£Ëü¾«ÇɵÄÊÂÎñÇý¶¯¡¢Òì²½·ÇÛձյļܹ¹£¬Ê¹ÆäÔÚ´¦Öóͷ£¸ß²¢·¢ÅþÁ¬Ê±ÌåÏÖ³ö׿ԽµÄÐÔÄÜ£¬Õâ¹ØÓÚÐèҪͬʱ·þÎñº£Á¿Óû§Ô¢Ä¿ÊÓÆµµÄÁ÷ýÌå·þÎñÆ÷À´ËµÖÁ¹ØÖ÷Òª¡£Óë¹Å°åµÄ»ùÓÚÀú³Ì»òÏ̵߳ķþÎñÆ÷Ïà±È£¬NginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬Î¬³Öº£Á¿µÄ²¢·¢ÅþÁ¬£¬´Ó¶øÏÔÖø½µµÍÁË·þÎñÆ÷µÄÔËÐгÉ?±¾£¬²¢Ìá¸ßÁËÕûÌåµÄÍÌÍÂÁ¿¡£
ÎļþÐÎò·ûÏÞÖÆ£ºÔöÌíϵͳ¼¶ºÍÓû§¼¶µÄÎļþÐÎò·ûÏÞÖÆ£¨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»º´æÊ§Ð§ºÍ¿ç½Úµã»á¼û£¬Ìá¸ßÐÔÄÜ¡£
NginxµÄÄ£¿é»¯Éè¼ÆÊÇÆäǿʢ?ÉúÃüÁ¦µÄԴȪ¡£×îа汾¼ÌÐø³Ð¼ÌÕâÒ»ÀíÄ²¢Õë¶ÔÊÓÆµÓÅ»¯£¬ÌṩÁËÔ½·¢¸»ºñºÍǿʢµÄÄ£¿é¡£Óû§¿ÉÒÔÆ¾Ö¤×Ô¼ºµÄÏêϸÐèÇó£¬ÎÞаµØÑ¡ÔñºÍÉèÖÃËùÐèµÄÄ£¿é£¬ÀýÈçÓÃÓÚÊÓÆµ×ªÂë¡¢ÄÚÈݼÓÃÜ¡¢DRM£¨Êý×Ö°æÈ¨¹ÜÀí£©µÈ¡£ÕâÖָ߶ȵÄ?¿É¶¨ÖÆÐÔ£¬Ê¹µÃNginxÄܹ»ÇáËÉÓ¦¶ÔÖÖÖÖÖØ´óµÄÊÓÆµÓ¦Óó¡¾°£¬´Ó¼òÆÓµÄÊÓÆµ²¥·Åµ½ÖØ´óµÄ°æÈ¨±£»¤ºÍÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©µÄ´î½¨£¬¶¼ÄÜÌṩ×î¼Ñ½â¾ö¼Æ»®¡£
µ½ÕâÀÎÒÃÇÒѾÆðÔ´ÏàʶÁËNginx×îа汾ÔÚÊÖÒÕ²ãÃæÊÇÔõÑùʵÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÄ¡£ÀíÂÛµÄÓÅ»¯»¹ÐèÒªÂ䵽ʵ´¦¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖNginx×îа汾ÔÚÏÖʵӦÓÃÖУ¬ÔõÑùͨ¹ýһϵÁо«ÃîµÄÉèÖúÍÕ½ÂÔ£¬ÕæÕý½«ÊÓÆµ´«ÊäµÄÐÔÄÜÌáÉýµ½¼«Ö£¬ÎªÓû§´øÀ´Ø¨¹ÅδÓеġ°Ë¿»¬¡±ÌåÑé¡£
Nginx100%ÊÓÆµÓÅ»¯£ºÊµÕ½ÉèÖÃÓëÐÔÄܱ¼ÌÚ£¬½âËøÄãµÄÊÓÆµ·þÎñмÍÔª£¡
ÔÚÉÏÒ»²¿·Ö£¬ÎÒÃÇ´ÓÊÖÒÕ²ãÃæÉîÈëÆÊÎöÁËNginx×îа汾ÔÚÊÓÆµÓÅ»¯·½ÃæµÄÄÚÔÚ¡°ºË¶¯Á¦¡±¡£ÎÒÃÇÏàʶµ½£¬ÖîÈçepollÄ£×ӵļ«ÖÂÔËÓá¢HTTP/2ºÍHTTP/3µÄÖÜȫӵ±§¡¢¶¯Ì¬ÄÚÈݼÓËÙÓ뻺´æÕ½ÂԵľ«½ø£¬ÒÔ¼°ÆäǿʢµÄÄ£¿é»¯Éè¼Æ£¬¶¼ÎªÊµÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÓÚ¨Á˼áʵµÄ?»ù´¡¡£
µ±Ä³Ì¨ºó¶Ë·þÎñÆ÷±¬·¢¹ÊÕÏʱ£¬NginxÄܹ»ÖÇÄܵؽ«Á÷Á¿Çл»µ½ÆäËû¿µ½¡·þÎñÆ÷£¬°ü¹Ü·þÎñµÄÒ»Á¬ÐÔ£¬ÈÃÓû§ÏÕЩ¸ÐÊܲ»µ½ÈκÎÖÐÖ¹¡£
ÓÅÒìµÄ¾²Ì¬Îļþ´¦?ÀíÄÜÁ¦£ºÊÓÆµÎļþʵÖÊÉÏÊǾ²Ì¬×ÊÔ´¡£NginxÔÚ´¦Öóͷ£¾²Ì¬Îļþ·½ÃæÓÐ×ÅÎÞÓëÂױȵÄЧÂÊ£¬ËüÄܹ»Ö±½Ó´ÓÎļþϵͳÖжÁÈ¡Îļþ²¢·¢Ë͸ø¿Í»§¶Ë£¬ÎÞÐè¾ÓÉÖØ´óµÄÓ¦Óò㴦Öóͷ££¬´ó´óÌá¸ßÁË´«ÊäËÙÂÊ¡£¹ØÓڵ㲥ÊÓÆµ£¬Nginx¿ÉÒÔÖ±½Ó×÷ΪÎļþ·þÎñÆ÷£¬ÎªÓû§Ìṩ¸ßËÙµÄ?ÏÂÔØºÍ²¥·Å·þÎñ¡£
ÎÞаµÄÄ£¿é»¯Éè¼ÆÓ븻ºñµÄµÚÈý·½Ä£¿é£ºNginxÓµÓÐǿʢµÄÄ£¿é»¯¼Ü¹¹£¬¿ÉÒÔÆ¾Ö¤ÐèÇó¼ÓÔØ»òÒÆ³ý²î±ðµÄ¹¦Ð§Ä£¿é¡£ÕâʹµÃNginx¼«¾ß¿ÉÀ©Õ¹ÐÔ¡£ÀýÈ磬ngx_http_flv_module¡¢ngx_http_mp4_moduleµÈÄ£¿éÄܹ»×ÊÖúNginx¸ü¸ßЧµØ´¦Öóͷ£Ìض¨µÄÊÓÆµÃûÌã»¶øngx_http_vhost_traffic_status_moduleÔò¿ÉÒÔÌṩʵʱµÄÁ÷Á¿¼à¿ØÐÅÏ¢£¬×ÊÖú¹ÜÀíԱʵʱ·¢Ã÷Ï¢Õù¾öÎÊÌâ¡£
ÉçÇø»¹¿ª·¢ÁËÐí¶àÓÅÒìµÄµÚÈý·½Ä£¿é£¬ÎªNginxÔöÌíÁ˸ü¶àǿʢµÄ¹¦Ð§£¬ÈçÊÓÆµ×ªÂ롢ˮӡÌí¼ÓµÈ£¬½øÒ»²½¸»ºñÁËÆäÔÚÊÓÆµÁìÓòµÄÓ¦Óó¡¾°¡£
NginxµÄÐÔÄÜÔÙÇ¿£¬Ò²Àë²»¿ªµ×²ãÓ²¼þºÍÍøÂçµÄÖ§³Ö¡£
Ó²¼þ£º¸ßÐÔÄÜCPU¡¢´óÈÝÁ¿ÄÚ´æ¡¢¸ßËÙSSDÓ²ÅÌ¡¢ÍòÕ×Íø¿¨£¬¶¼ÊÇÌáÉýÊÓÆµÁ÷ýÌåÐÔÄܵĻù´¡¡£ÍøÂ磺µÍÑÓ³Ù¡¢¸ß´ø?¿íµÄÍøÂçÇéÐÎÊÇÊÓÆµÁ÷ͨ²¥·ÅµÄÒªº¦¡£È·±£·þÎñÆ÷µÄÍøÂçÅþÁ¬ÎȹÌÇÒËÙÂÊ´ï±ê¡£²Ù×÷ϵͳµ÷ÓÅ£º¶ÔLinuxÄں˲ÎÊý¾ÙÐÐÊʵ±µ÷½â£¬ÀýÈçÔö´óÎļþ¾ä±úÊý(ulimit-n)¡¢µ÷½âTCP/IP²ÎÊýµÈ£¬Ò²ÄÜΪNginxµÄ¸ßÐÔÄÜÔËÐдòϼáʵ»ù´¡¡£
URIÖØÐ´Óë±äÁ¿£ºÊ¹ÓÃNginxµÄrewriteÖ¸ÁîºÍ±äÁ¿£¬ÎÞа´¦?ÀíHLSµÄURL£¬ÀýÈ綯̬ÌìÉú´øÓÐʱЧÐԵIJ¥·ÅURL¡£×Ô½ç˵ģ¿é£º¹ØÓÚ¸ü¸ß¼¶µÄ?HLS·Ö·¢ÐèÇó£¬È綯̬¼ÓÃÜ¡¢Ë®Ó¡Ìí¼ÓµÈ£¬¿ÉÒÔ˼Á¿Ê¹ÓÃNginxµÄCÄ£¿é¾ÙÐÐÀ©Õ¹¡£
DASH(DynamicAdaptiveStreamingoverHTTP)£ºDASHÐÒéÓëHLSÀàËÆ£¬Ò²Í¨¹ýһϵÁÐýÌ寬¶ÏÎļþ£¨Í¨³£ÊÇ.mp4»ò.webmƬ¶Ï£©ºÍÒ»¸öMPD£¨MediaPresentationDescription£©ÎļþÀ´ÐÎòýÌåÄÚÈÝ¡£
»º´æÊÇʵÏÖ¸ßÐÔÄÜÊÓÆµ·Ö·¢µÄÒªº¦¡£NginxÌṩÁ˶àÖÖÎÞаµÄ»º´æÕ½ÂÔ£¬Äܹ»ÏÔÖøïÔÌÔ´·þÎñÆ÷µÄѹÁ¦£¬²¢¼ÓËÙÓû§»á¼ûËÙÂÊ¡£
ProxyCache£ºÕâÊÇNginx×î³£ÓõĻº´æ·½·¨¡£Í¨¹ýproxy_cacheÖ¸Á¿ÉÒÔ½«´ÓÉÏÓηþÎñÆ÷»ñÈ¡µÄÊÓÆµÄÚÈÝ»º±£´æÍâµØ´ÅÅÌÉÏ¡£µ±?Óû§ÔÙ´ÎÇëÇóͳһ¸öÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬ÎÞÐèÇëÇóÔ´·þÎñÆ÷£¬´Ó¶ø´ó´ó½µµÍÑÓ³Ù£¬ÌáÉýÍÌÍÂÁ¿¡£
»º´æ?¼ü£¨CacheKey£©£ºNginxÔÊÐí×Ô½ç˵»º´æ¼ü£¬ÀýÈç»ùÓÚURL¡¢ÇëÇóÍ·¡¢ÉõÖÁÇëÇó²ÎÊýÀ´ÌìÉúΨһµÄ»º´æ±êʶ¡£ÕâʹµÃÎÒÃÇ¿ÉÒÔ¸üϸÄ嵨¿ØÖÆÄÄЩÄÚÈݱ»»º´æ£¬ÒÔ¼°ÔõÑùÖÀÖлº´æ¡£»º´æÓâÆÚÕ½ÂÔ£ºÍ¨¹ýproxy_cache_validÖ¸Á¿ÉÒÔÉèÖûº´æµÄÓÐÓÃʱ¼ä¡£
ÀýÈ磬proxy_cache_valid20030210m;±í?ʾ¹ØÓÚHTTP״̬ÂëΪ200ºÍ302µÄÏìÓ¦£¬»º´æ10·ÖÖÓ¡£»º´æÇøÓò£¨CacheZone£©£ºproxy_cache_pathÖ¸ÁîÓÃÓÚ½ç˵»º´æÄ¿Â¼»ººÍ´æÇøÓòµÄ¾Þϸ£¬È·±£»º´æÎļþ²»?»áÎÞÏÞÔöÌí£¬Õ¼Óùý¶à´ÅÅ̿ռ䡣
Nginx×îа汾ÒÔÆäÔÚCDN¡¢±ßÑØÅÌËã¡¢Ö±²¥ÊÖÒÕ¡¢ÊÓÆµ´¦Öóͷ£µÈ¶à¸öά¶ÈµÄÖÜÈ«Í»ÆÆ£¬ÕæÕýʵÏÖÁË¡°100%ÊÓÆµ²¥·Å100%¡±µÄÔÊÐí¡£Ëü²»µ«ÎªÓû§´øÀ´ÁËØ¨¹ÅδÓеÄÁ÷ͨ¹ÛÓ°ÌåÑ飬¸üΪ¿ª·¢ÕߺÍÄÚÈÝÌṩÉÌÌṩÁ˹¹½¨ÏÂÒ»´úÊÓÆµÓ¦ÓõÄǿʢƽ̨¡£ÎÞÂÛÄúÊÇÖÂÁ¦ÓÚÌṩ³¬¸ßÇåµã²¥·þÎñ£¬Õվɹ¹½¨ÊµÊ±»¥¶¯Ö±²¥Æ½Ì¨£¬Òà»òÊÇ̽Ë÷ÊÓÆµÄÚÈÝ´¦Öóͷ£µÄÐÂģʽ£¬Nginx×îа汾?¶¼½«ÊÇÄú²»¿É»òȱµÄǿʢÖúÁ¦£¬ÒýÁìÄúÂõÏòÊÓÆµÊÖÒÕÓ¦ÓõÄȫмÍÔª¡£
Õâ¹ØÓÚÐèҪƵÈÔ½¨ÉèÅþÁ¬µÄÊÓÆµ²¥·Å³¡¾°£¨ÀýÈ磬²¥·Å¶ÌÊÓÆµ£©À´Ëµ£¬¿ÉÒÔÓÐÓÃïÔÌÆô¶¯ÑÓ³Ù¡£ÅþÁ¬Ç¨á㣺QUICÖ§³ÖÅþÁ¬Ç¨áã¡£µ±Óû§µÄIPµØÖ·»ò¶Ë¿Ú±¬·¢×ª±äʱ£¨ÀýÈ磬´ÓWi-FiÇл»µ½Òƶ¯ÍøÂ磩£¬QUICÅþÁ¬¿ÉÒÔ¼á³ÖÎȹ̡£Õâ¹ØÓÚÒÆ¶¯Éè±¹ØÁ¬ÄÊÓÆµÔ¢Ä¿ÖÁ¹ØÖ÷Òª£¬Äܹ»°ü¹Ü²¥?·ÅµÄÒ»Á¬ÐÔ£¬×èÖ¹ÒòÍøÂçÇл»¶øÖÐÖ¹¡£
ÔÚNginxÖÐÆôÓÃHTTP/3ºÍQUICÖ§³Ö£¬Í¨³£ÐèҪʹÓÃÌØ¶¨µÄÄ£¿é£¨ÀýÈ磬ͨ¹ýBoringSSLÖ§³ÖQUIC£©¡£ËäÈ»ÆäÉèÖÃÏà¶ÔÖØ´ó£¬µ«?Ò»µ©ÊµÏÖ£¬½«ÎªÊÓÆµÁ÷ýÌå´øÀ´Ø¨¹ÅδÓеÄÐÔÄÜÌáÉýºÍÓû§ÌåÑéÓÅ»¯¡£Õâ±ê¼Ç×ÅNginxÔÚÓµ±§×îÐÂÍøÂçÊÖÒÕ·½ÃæµÄ¿ÌÒâºÍÄÜÁ¦¡£
worker_processesauto;#orsettoyourCPUcorecountevents{worker_connections4096;#Adjustbasedonyourserver'scapacity}
Keepalive_timeout£ºkeepalive_timeoutÓÃÓÚÉèÖÃHTTP³¤ÅþÁ¬µÄ³¬Ê±Ê±¼ä¡£ÔÚÊÓÆµ²¥·ÅÀú³ÌÖУ¬¿Í»§¶Ë»áƵÈÔµØÏò·þÎñÆ÷ÇëÇóÊÓÆµÆ¬¶Ï£¬¼á³Ö³¤ÅþÁ¬¿ÉÒÔïÔÌÖØ¸´½¨ÉèTCPÅþÁ¬µÄ¿ªÏú£¬Ìá¸ß´«ÊäЧÂÊ¡£Ò»¸öºÏÊʵÄkeepalive_timeoutÖµ£¬ºÃ±È60Ãë»ò75Ã룬¿ÉÒÔÆ½ºâÅþÁ¬µÄ¸´ÓúͷþÎñÆ÷×ÊÔ´µÄÊÍ·Å¡£
»º´æÊÇÊÓÆµÓÅ»¯µÄÖØÖÐÖ®ÖØ£¬ËüÄܹ»ÏÔÖøïÔÌ·þÎñÆ÷Ö±½Ó´¦Öóͷ£ÇëÇóµÄ´ÎÊý£¬½µµÍ´ø¿íѹÁ¦£¬²¢¼«´óÌáÉýÏìÓ¦ËÙÂÊ¡£NginxÌṩÁ˶àÖÖǿʢµÄ»º´æ»úÖÆ£¬¿ÉÒÔÆ¾Ö¤ÄãµÄÐèÇó¾ÙÐÐÎÞаÉèÖá£
HTTP»º´æ£¨ProxyCache£©£ºÕâÊÇNginx×î³£ÓõĻº´æ·½·¨Ö®Ò»¡£Í¨¹ýproxy_cache_pathÖ¸Áî½ç˵»º´æÄ¿Â¼ºÍ²ÎÊý£¬È»ºóʹÓÃproxy_cacheÖ¸ÁîÆôÓûº´æ¡£Äã¿ÉÒÔÉèÖûº´æµÄÓÐÓÃÆÚ£¨proxy_cache_valid£©¡¢»º´æµÄ¼ü£¨proxy_cache_key£©£¬ÒÔ¼°ÔÚ»º´æÎ´ÖÀÖеÄÇéÐÎÏÂÈçÄÇÀïÖã¨proxy_cache_use_stale£©¡£
¹ØÓÚÊÓÆµÎļþ£¬ÕâÒâζ×ÅÓû§ÆµÈÔÇëÇóµÄÊÓÆµÆ¬¶Ï»á±»´æ´¢ÔÚNginx·þÎñÆ÷ÍâµØ£¬ºóÐøÇëÇó¿ÉÒÔÖ±½Ó´Ó»º´æÖжÁÈ¡£¬ËÙÂÊ×ÔÈ»ÊÇ¡°Ã뿪¡±¡£
ʵ¼ù³¡¾°£º¼ÙÉèÄãµÄÊÓÆµÆ½Ì¨ÉÏÓÐÐí¶àÈÈÃÅÓ°Ï·»òµçÊӾ缯£¬Óû§»áÖØ¸´Ô¢Ä¿¡£Í¨¹ýNginxµÄ?HTTP»º´æ£¬ÕâЩÈÈÃÅÊÓÆµµÄ³õʼÇëÇóÍê³É?ºó£¬»á½«ÊÓÆµÎļþ»òÆäÒ»²¿·Ö»º´æÏÂÀ´¡£µ±ÆäËûÓû§ÇëÇóͳһÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖÐÌṩ£¬±Ü?ÃâÁË´Óºó¶Ë´æ´¢£¨È繤¾ß´æ´¢£©ÀÈ¡Êý¾ÝµÄ?ÑÓ³Ù£¬Óû§ÏÕЩ¸ÐÊܲ»µ½¼ÓÔØÊ±¼ä¡£
NginxÖ®ÒÔÊÇÔÚÊÓÆµÓÅ»¯ÁìÓòÍÑÓ±¶ø³ö£¬µÃÒæÓÚÆäÆæÒìµÄÉè¼ÆÀíÄîºÍǿʢµÄ¹¦Ð§¼¯¡£ÊÂÎñÇý¶¯¡¢Òì²½?·ÇÛÕ±ÕµÄÍøÂçÄ£×ÓÊÇNginxµÄ?½¹µãÓÅÊÆ¡£ÕâÒâζ×ÅNginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄͬʱ´¦Öóͷ£³ÉǧÉÏÍòµÄ²¢·¢ÅþÁ¬£¬Õâ¹ØÓÚÐèÒª´¦Öóͷ£´ó×ÚÓû§Í¬Ê±Ô¢Ä¿ÊÓÆµµÄÁ÷ýÌåÆ½Ì¨ÖÁ¹ØÖ÷Òª¡£
Ïà±È?ÓڹŰåµÄÏß³Ì?Ä£×Ó£¬NginxµÄÕâÖÖÄ£×ÓÄÜÏÔÖøïÔÌCPUºÍÄÚ´æµÄ¿ªÏú£¬È÷þÎñÆ÷Äܹ»¸ü¸ßЧµØÏìÓ¦Óû§ÇëÇó£¬ïÔÌÑÓ³Ù¡£
ǿʢµÄ»º´æ»úÖÆÊÇNginxÔÚÊÓÆµÓÅ»¯ÖеÄÁíÒ»´óɱÆ÷¡£ÊÓÆµµÄ»º´æ¿ÉÒÔ¼«´óµØïÔÌÔ´·þÎñÆ÷µÄ¸ºÔØ£¬²¢¼ÓËÙÓû§µÄ»á¼ûËÙÂÊ¡£NginxÌṩÁËÎÞа¶àÑùµÄ»º´æÉèÖÃÑ¡Ï°üÀ¨Îļþ»º´æ¡¢Äڴ滺´æµÈ£¬¿ÉÒÔÆ¾Ö¤ÏÖʵÐèÇó¾ÙÐÐϸÄ廯¹ÜÀí¡£Í¨¹ýºÏÀíÉèÖûº´æ£¬¿ÉÒÔ½«ÈÈÃÅÊÓÆµÄÚÈÝ´æ´¢ÔÚÀëÓû§¸ü½üµÄ·þÎñÆ÷ÉÏ£¨»òCDN±ßÑØ½Úµã£©£¬µ±Óû§ÔÙ´ÎÇëÇóʱ£¬¿ÉÒÔÖ±½Ó´Ó»º´æÖпìËÙÏìÓ¦£¬ÊµÏÖÃ뿪¼ÓÔØ£¬Õâ¹ØÓÚÌá¸ßÓû§Öª×ã¶ÈºÍÁô´æÂÊÓÐמöÒéÐÔµÄÓ°Ïì¡£
HTTP/2ÐÒéÏà½ÏÓÚHTTP/1.1£¬ÔÚÐÔÄÜÉÏÓÐÁËÖʵı¼ÌÚ£¬ÌØÊâÊʺϴ¦Öóͷ£°üÀ¨´ó×ÚС×ÊÔ´µÄWebÒ³Ãæ£¬¶øÊÓÆµÁ÷ýÌåÒ²¾³£Éæ¼°¶à¸öС·ÖƬ£¨ÈçHLS¡¢DASH£©¡£
¶à·¸´ÓÃ(Multiplexing)£ºHTTP/2ÔÊÐíÔÚÒ»¸öTCPÅþÁ¬Éϲ¢Ðд«Êä¶à¸öÇëÇóºÍÏìÓ¦£¬ÎÞÐèÏñHTTP/1.1ÄÇÑùÅÅ¶ÓÆÚ´ý¡£ÕâÒâζ×Å£¬µ±Óû§²¥·ÅÒ»¸öÊÓÆµÊ±£¬¿ÉÒÔͬʱÏÂÔØÊÓÆµÁ÷µÄ²î±ðÇÐÆ¬¡¢×ÖÄ»¡¢ÔªÊý¾ÝµÈ£¬¶øÎÞÐ轨Éè¶à¸öÅþÁ¬£¬´ó´óïÔÌÁËÑÓ³Ù¡£
Í·²¿Ñ¹Ëõ(HeaderCompression)£ºHTTP/2ʹÓÃHPACKË㷨ѹËõÇëÇóºÍÏìÓ¦µÄÍ·²¿ÐÅÏ¢£¬ÏÔÖø¼õСÁË´«ÊäµÄÊý¾ÝÁ¿£¬ÓÈÆäÊÇÔڵʹø¿íÇéÐÎÏ£¬Ð§¹ûÔ½·¢ÏÔ×Å¡£·þÎñÆ÷ÍÆËÍ(ServerPush)£ºHTTP/2»¹Ö§³Ö·þÎñÆ÷ÍÆËÍ£¬¼´ÔÚ¿Í»§¶ËÇëÇó֮ǰ£¬·þÎñÆ÷¾Í¿ÉÒÔ×Ô¶¯½«Ïà¹Ø×ÊÔ´ÍÆË͵½¿Í»§¶Ë¡£
ËäÈ»ÔÚÊÓÆµÁ÷ýÌåµÄÏêϸӦÓó¡¾°ÖÐÐèÒªÉóÉ÷ʹÓ㬵«ÀíÂÛÉÏ¿ÉÒÔÓÃÓÚÔ¤¼ÓÔØÊÓÆµ²¥·ÅËùÐèµÄÒªº¦ÔªÊý¾Ý»ò·âÃæ¡£
NginxµÄǿʢÄÜÁ¦Ê¹ÆäÔÚÊÓÆµÁ÷ýÌåµÄ¸÷¸ö»·½Ú¶¼ÄÜʩչÖÁ¹ØÖ÷ÒªµÄ×÷Ó㬴ÓÔ´Õ¾µÄÄÚÈÝ·Ö·¢£¬µ½CDNµÄ±ßÑØ½Úµã¼ÓËÙ£¬ÔÙµ½×îÖÕÓû§¶ËµÄÁ÷ͨ²¥?·Å£¬NginxÏÕЩÎÞ´¦²»ÔÚ¡£
Ö±²¥£¨LiveStreaming£©¼ÓËÙ£ºÊµÊ±Ö±²¥¶ÔÑÓ³ÙµÄÒªÇ󼫸ߣ¬ÈκÎÒ»µã¿¨¶Ù¶¼¿ÉÄܵ¼ÖÂÓû§Á÷ʧ¡£Nginxͨ¹ýÆäRTMPÄ£¿é£¬¿ÉÒÔ¸ßЧµØ´¦Öóͷ£RTMPÐÒ飬×÷Ϊֱ²¥Á÷µÄ½ÓÈëµã£¬½«Ö±²¥ÐźÅת·¢¸øºó¶ËÍÆÁ÷·þÎñÆ÷»òÖ±½Ó¾ÙÐзַ¢¡£ÍŽáÆä¸ß²¢·¢´¦Öóͷ£ÄÜÁ¦£¬Nginx¿ÉÒÔÇáËÉÓ¦¶ÔÊý°ÙÍòÉõÖÁÉÏÍòÍòÓû§Í¬Ê±Ô¢Ä¿Ò»³¡Ö±²¥µÄ³¡¾°¡£
ͨ¹ýÓëÆäËûÁ÷ýÌå·þÎñÆ÷£¨ÈçFFmpeg¡¢SRSµÈ£©ÅäºÏ£¬Nginx¿ÉÒÔ¹¹½¨³öÎȹ̡¢µÍÑÓ³ÙµÄÖ±²¥·Ö·¢ÏµÍ³¡£
µã²¥£¨VideoonDemand£©·þÎñ£º¹ØÓڵ㲥ÄÚÈÝ£¬Nginx¿ÉÒÔ×÷Ϊ¸ßÐÔÄܵľ²Ì¬Îļþ·þÎñÆ÷£¬Ö±½ÓÌṩMP4¡¢FLVµÈÃûÌõÄÊÓÆµÎļþ¡£ÅäºÏÆä¸ßЧµÄ?»º´æ»úÖÆ£¬Nginx¿ÉÒÔ½«ÈÈÃÅÊÓÆµ»º±£´æÄÚ´æ»ò´ÅÅÌÖУ¬µ±Óû§ÔÙ´ÎÇëÇóʱ£¬¿ÉÒÔÖ±½Ó´Ó»º´æÌṩ·þÎñ£¬¼«´óµØÌáÉýÁ˼ÓÔØËÙÂÊ£¬½µµÍÁ˺ó¶Ë´æ´¢µÄѹÁ¦¡£
»º´æÕ½ÂÔ£º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ÅþÁ¬ÉÏͬʱ´«Êä¶à¸öÇëÇóºÍÏìÓ¦£¬ïÔÌÁËÒò¶à¸öýÌ寬¶ÏÐèÒª½¨Éè¶à¸öÅþÁ¬µÄ¿ªÏú£¬´ó´óÌá¸ßÁ˲¥·ÅЧÂÊ¡£
Ëæ×ÅÎïÁªÍøºÍ5GÊÖÒÕµÄÉú³¤£¬±ßÑØÅÌË㣨EdgeComputing£©ÕýÖð½¥³ÉΪÏÂÒ»´ú?ÍøÂç¼Ü¹¹µÄÖ÷Òª×é³É²¿·Ö¡£½«ÅÌËãÄÜÁ¦ºÍÄÚÈÝ·Ö·¢ÄÜÁ¦ÍÆÏòÍøÂç±ßÑØ£¬¿¿½üÓû§£¬Äܹ»½øÒ»²½½µµÍÑÓ³Ù£¬ÌáÉýÏìÓ¦ËÙÂÊ¡£
NginxEdgeServer£ºNginx¿ÉÒÔ×÷Ϊ±ßÑØ·þÎñÆ÷£¬°²ÅÅÔÚÔËÓªÉÌÍøÂç±ßÑØ»ò¿¿½üÓû§µÄÊý¾ÝÖÐÐÄ¡£Ëü²»µ«¿ÉÒÔ»º´æÊÓÆµÄÚÈÝ£¬»¹¿ÉÒÔÖ´ÐÐһЩÇáÁ¿¼¶µÄÅÌËãʹÃü£¬ÀýÈ磺ÖÇÄÜ»º´æÕ½ÂÔ£º»ùÓÚÓû§ÐÐΪ¡¢µØ?ÀíλÖá¢Ê±¼äµÈÒòËØ£¬¶¯Ì¬µ÷½â»º´æÕ½ÂÔ£¬½«×î¿ÉÄܱ»Óû§»á¼ûµÄÄÚÈÝÔ¤ÏȼÓÔØµ½±ßÑØ½Úµã¡£
ÄÚÈÝתÂëÓë·â×°£ºÔÚ±ßÑØ¾ÙÐÐÊÓÆµµÄתÂë¡¢ÇÐÆ¬£¨ÈçHLS,DASH£©£¬Ê¹Æä˳Ӧ²î±ð×°±¸?ºÍÍøÂçÌõ¼þ£¬Ö±½ÓΪÓû§Ìṩ×îÓÅ»¯µÄÊÓÆµÃûÌá£Á÷Á¿ÕûÐÎÓëQoS£ºÔÚ±ßÑØ¾ÙÐиüϸÄ廯µÄÁ÷Á¿¿ØÖƺÍÖÊÁ¿°ü¹Ü£¬ÓÅÏȰü¹ÜÖ±²¥»ò¸ßÓÅÏȼ¶ÊÓÆµµÄÁ÷ͨ²¥?·Å¡£µÍÑÓ³ÙÖ±²¥£º±ßÑØÅÌËãÓÈÆäÊʺϵÍÑÓ³ÙÖ±²¥³¡¾°¡£
ͨ¹ý½«Ö±²¥Á÷ÍÆË͵½?±ßÑØ½Úµã£¬Óû§¿ÉÒÔÖ±½Ó´Ó×î½üµÄ±ßÑØ·þÎñÆ÷»ñȡֱ²¥»Ã棬×î´óÏ޶ȵØïÔÌÑÓ³Ù£¬ÊµÏÖ¿¿½üʵʱµÄԢĿÌåÑé¡£NginxÔÚ´ËÀú³ÌÖУ¬¿ÉÒԼ縺Á÷µÄ½ÓÈë¡¢·Ö·¢¡¢»º´æºÍתÂëµÈÒªº¦Ê¹Ãü¡£
ÔÚÏÖ´úÊÓÆµ·Ö·¢ÏµÍ³ÖУ¬CDN£¨ContentDeliveryNetwork£©ÒѳÉΪ²»¿É»òȱµÄ×é³É?²¿·Ö¡£NginxÒÀ¸½Æä¼«¸ßµÄÎÞаÐÔºÍÐÔÄÜ£¬Êǹ¹½¨×Ô½¨CDN»ò×÷ΪCDN½Úµã·þÎñµÄÀíÏëÑ¡Ôñ¡£Í¨¹ýÔÚÈ«Çò²¿?Êð´ó×ÚµÄ?Nginx·þÎñÆ÷×÷Ϊ±ßÑØ½Úµã£¬¿ÉÒÔ½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄµØ·½¡£
»º´æÕ½ÂÔµÄϸÄ廯£ºNginxµÄproxy_cacheÖ¸ÁîÌṩÁËǿʢµÄ»º´æ¹¦Ð§¡£Õë¶ÔÊÓÆµÁ÷£¬¿ÉÒÔÆ¾Ö¤ÊÓÆµµÄÉúÃüÖÜÆÚ¡¢¸üÐÂÆµÂÊÀ´ÉèÖòî±ðµÄ»º´æÊ±¼äºÍÕ½ÂÔ¡£ÀýÈ磬¹ØÓÚÈÈÃŵÄÖ±²¥ÄÚÈÝ£¬¿ÉÒÔÉèÖýϳ¤µÄ»º´æ?ʱ¼ä£»¶ø¹ØÓÚ¸üÐÂÆµÈԵĶÌÊÓÆµ£¬ÔòÐèÒª¸üÖÇÄܵĻº´æË¢Ð»úÖÆ¡£
proxy_cache_key¿ÉÒÔÓÃÀ´ÌìÉú¸ü¾ßÕë¶ÔÐԵĻº´æ¼ü£¬È·±£²î±ðÓû§¡¢²î±ðÇëÇó²ÎÊýÏµĻº´æ?ÖÀÖÐÂÊ¡£¾Í½ü»á¼ûÓëÁ÷Á¿¸ºÔØÆ½ºâ£ºÍŽáDNSÆÊÎö»òAnycast·ÓÉÊÖÒÕ£¬¿ÉÒÔ½«Óû§µÄÇëÇóÖ¸µ¼ÖÁ¾àÀëËûÃÇ×î½üµÄNginx±ßÑØ½Úµã¡£½ÚµãÄÚ²¿£¬NginxµÄ¸ºÔØÆ½ºâ»úÖÆ£¨ÈçRoundRobin,LeastConnections£©¿ÉÒÔÓÐÓõؽ«Á÷Á¿·ÖÅɸøºó¶ËµÄÄÚÈÝÔ´£¬»òÕßÔÚ¶à¸öCDN½ÚµãÖ®¼ä¾ÙÐÐÁ÷Á¿µ÷Àí£¬±ÜÃâµ¥µã¹ýÔØ¡£
ÊÓÆµÊÖÒÕºÍÓ¦Óó¡¾°ÔÚÒ»Ö±Éú³¤¡£NginxµÄÄ£¿é»¯Éè¼ÆºÍǿʢµÄ¿ÉÀ©Õ¹ÐÔ£¬Ê¹ÆäÄܹ»ÇáËÉ˳ӦδÀ´µÄת±ä¡£ÎÞÂÛÄúÐèÒª¼¯³ÉеÄÊÓÆµ±àÂëÃûÌá¢ÐµļÓÃÜÊÖÒÕ£¬Õվɹ¹½¨¸üÖØ´óµÄÊÓÆµ·Ö·¢¼Ü¹¹£¬Nginx¶¼ÄÜÌṩǿʢµÄÖ§³Ö£¬È·±£ÄúµÄÊÓÆµ·þÎñʼÖÕ×ßÔÚÐÐÒµÇ°ÑØ¡£
Nginx×îа汾´øÀ´µÄ¡°100%ÊÓÆµÓÅ»¯¡±£¬²»µ«½öÊÇÒ»¾ä¿ÚºÅ£¬¶øÊÇͨ¹ýһϵÁеײãÊÖÒÕˢкÍϸÄ廯ÉèÖÃÕ½ÂÔ£¬ÔÚÏÖʵӦÓÃÖÐʵÏÖµÄÐÔÄܱ¼ÌÚ¡£ËüΪÎÒÃÇÌṩÁËÒ»¸öǿʢ?¡¢¸ßЧ¡¢ÎÞаµÄƽ̨£¬À´¹¹½¨ºÍÓÅ»¯ÖÖÖÖÊÓÆµ·þÎñ¡£ÎÞÂÛÊÇ×·Çó¼«ÖÂÁ÷ͨµÄÖ±²¥ÌåÑ飬ÕÕ¾ÉÏ£ÍûΪÓû§Ìṩº£Á¿¸ßÇåÊÓÆµÄÚÈݵĵ㲥·þÎñ£¬Nginx×îа汾¶¼½«ÊÇÄú²»¿É»òȱµÄµÃÁ¦ÖúÊÖ¡£
ÏÖÔÚ£¬¾ÍÓÃNginx×îа汾£¬ÊÍ·ÅÄúÊÓÆµ·þÎñµÄ?ÎÞÏÞDZÄÜ£¬ÎªÓû§´øÀ´Ø¨¹ÅδÓеÄ?¡°Ë¿»¬¡±ÊÓÌýÊ¢Ñç°É?£¡
¡°Nginx100%ÊÓÆµÓÅ»¯¡±²¢·ÇÒ»¸ö¼òÆÓµÄÉèÖÃÏ¶øÊÇÒ»¸öº¸ÇÁË·þÎñÆ÷ÐÔÄܵ÷ÓÅ¡¢ÍøÂçÐÒéÉý¼¶¡¢ÄÚÈÝ·Ö·¢Õ½ÂÔÒÔ¼°Çå¾²°ü¹ÜµÄϵͳÐÔ¹¤³Ì¡£Í¨¹ýÉîÈëÃ÷È·Nginxǿʢ?µÄ»º´æ»úÖÆ¡¢Ï¸Ä廯µÄÁ÷Á¿¿ØÖÆ¡¢¶ÔHTTP/2ºÍHTTP/3£¨QUIC£©µÄ?Ö§³Ö£¬ÒÔ¼°Óë±ßÑØÅÌËãµÄÍŽᣬÎÒÃÇ¿ÉÒÔ¹¹½¨³öÕæÕý¸ßЧ¡¢Îȹ̡¢µÍÑÓ³ÙµÄÊÓÆµÁ÷ýÌå·þÎñ¡£
Nginx²»µ«½öÊÇÒ»¸öWeb·þÎñÆ÷£¬¸üÊÇÇý¶¯Î´À´Á÷ýÌåÊÖÒÕÉú³¤µÄÖ÷ÒªÒýÇæ£¬ËüÕýÔÚ×ÊÖúÎÒÃÇÍ»ÆÆÍøÂç±Ú?ÀÝ£¬ÊµÏÖØ¨¹ÅδÓеÄÁ÷ͨ¹ÛÓ°ÌåÑ飬ÈÃÿһ¸ö¾«²Ê˲¼ä£¬¶¼ÄÜ´¥´ïÓû§£¬²»ÁôÒź¶¡£
NginxµÄ½¹µãÓÅÊÆÔÚÓÚÆäÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕµÄÍøÂçÄ£×Ó¡£Óë¹Å°åµÄ?ÛÕ±ÕʽI/OÄ£×Ó²î±ð£¬NginxÄܹ»ÔÚÒ»¸ö»òÉÙÊý¼¸¸öÀú³ÌÖд¦Öóͷ£³ÉǧÉÏÍòµÄ²¢·¢ÅþÁ¬£¬¶øÎÞÐèÏûºÄ´ó×ÚµÄϵͳ×ÊÔ´¡£Õâ¹ØÓÚÐèÒª´¦Öóͷ£´ó×Ú²¢·¢ÊÓÆµÁ÷µÄ³¡¾°À´Ëµ£¬ÎÞÒÉÊÇÖØ´óµÄÓÅÊÆ¡£
¸ßЧµÄÅþÁ¬ÊÜÀí£ºNginx½ÓÄÉepoll(Linux)»òkqueue(FreeBSD)µÈ¸ßÐÔÄÜI/O¶à·¸´ÓûúÖÆ£¬Äܹ»¸ßЧµØ¼àÌýºÍ´¦Öóͷ£³ÉǧÉÏÍò¸ö¿Í»§¶ËÅþÁ¬¡£ÕâÒâζ×Å£¬×ÝÈ»ÔÚÓû§á¯ÁëÆÚ£¬NginxÒ²ÄÜÓÎÈÐÓÐÓàµØ´¦?ÀíÀ´×ÔÈ«Çò¸÷µØÓû§µÄÊÓÆµÇëÇó£¬È·±£ÊÓÆµµÄ˳³©²¥·Å¡£
ÄÚ´æÏûºÄµÍ£ºNginxµÄÄÚ´æÕ¼ÓÃÏà¶Ô½ÏµÍ£¬Äܹ»ÒÔ¸üÉÙµÄÓ²¼þ×ÊÔ´³ÐÔØ¸ü¸ßµÄ²¢·¢Á¿£¬Õâ¹ØÓÚ±¾Ç®¿ØÖƺÍ×ÊÔ´ÓÅ»¯ÖÁ¹ØÖ÷Òª¡£×¿Ô½µÄ¾²Ì¬Îļþ´¦Öóͷ£ÄÜÁ¦£ºÊÓÆµÎļþͨ³£ÊǾ²Ì¬×ÊÔ´¡£NginxÔÚ¾²Ì¬ÎļþµÄ¸ßËÙ»º´æºÍ´«Êä·½ÃæÌåÏÖ¾«²Ê£¬Äܹ»Ö±½Ó´Ó´Å?Å̶ÁÈ¡Êý¾Ý²¢¿ìËÙ·¢Ë͸ø¿Í»§¶Ë£¬¼«´óµØÌáÉýÁËÊÓÆµµÄ?¼ÓÔØËÙÂÊ¡£
ͨ¹ýÒÔÉÏһϵÁеÄÓÅ»¯Õ½ÂÔ£¬NginxÄܹ»´Ó»º´æ¡¢´«ÊäÐÒé¡¢HTTPÉèÖõȶà¸öά¶È£¬ÖÜÈ«ÌáÉýÊÓÆµÁ÷ýÌåµÄ´«ÊäЧÂʺÍÓû§ÌåÑé¡£´ÓïÔ̼ÓÔØÊ±¼äµ½¶Å¾ø²¥·Å¿¨¶Ù£¬´ÓÓÅ»¯´ø¿íʹÓõ½Ö§³Ö×îÐÂÁ÷ýÌåÐÒ飬Nginx¶¼Õ¹ÏÖ³öÁËÆäǿʢµÄÄÜÁ¦¡£
¡°Nginx100%ÊÓÆµÓÅ»¯¡±²¢?·ÇÒ»¾äÆÓªµÄ¿ÚºÅ£¬¶øÊÇͨ¹ý¶ÔNginx½¹µã¹¦Ð§µÄÉîÈëÃ÷È·ºÍϸÄåÉèÖ㬽«NginxµÄÐÔÄÜʩչµ½¼«Ö£¬´Ó¶øÎªÄãµÄÁ÷ýÌåÓªÒµÌṩ¼áʵµÄÊÖÒÕÖ§³Ö¡£ÎÞÂÛÊÇСÎÒ˽¼Ò²©¿ÍµÄÊÓÆµ·ÖÏí£¬ÕվɴóÐÍÊÓÆµÆ½Ì¨µÄÄÚÈÝ·Ö·¢£¬Òà»òÊÇʵʱֱ²¥·þÎñ£¬Nginx¶¼ÄܳÉΪÄã×î¿É¿¿µÄ¼ÓËÙÆ÷£¬×ÊÖúÄã׽סÁ÷ýÌåʱ´úµÄÖØ´ó?ʱ»ú£¬Ó®µÃÓû§µÄÇàíù¡£
¼Ç×Å£¬Ò»Á¬µÄ¼à¿ØºÍµ÷ÓÅÊǼá³Ö?×î¼ÑÐÔÄܵÄÒªº¦¡£Ê¹ÓÃNginxÌṩµÄ¼à¿Ø¹¤¾ßºÍµÚÈý·½²å¼þ£¬Ò»Ö±ÆÊÎö·þÎñÆ÷ÈÕÖ¾ºÍÐÔÄÜÖ¸±ê£¬ÊµÊ±µ÷½âÉèÖ㬲ŻªÈÃÄãµÄÊÓÆµÁ÷ýÌå·þÎñʼÖÕ¼á³ÖÔÚ×î¼Ñ״̬£¬ÎªÓû§´øÀ´×ˬµÄԢĿÌåÑ飡
ËÙÂÊÏÞÖÆ£ºÊ¹ÓÃlimit_reqÄ£¿éÏÞÖÆÀ´×ÔͳһIPµØÖ·µÄÇëÇóËÙÂÊ£¬ÓÐÓ÷ÀÓùDDoS¹¥»÷¡£HTTPBasicAuthentication/JWTÈÏÖ¤£º¹ØÓÚÐèÒª»á¼û¿ØÖƵÄÊÓÆµÄÚÈÝ£¬¿ÉÒÔ¼¯³ÉÈÏÖ¤»úÖÆ¡£Referer¼ì²é£ºÍ¨¹ývalid_referersÖ¸ÁÏÞÖÆÖ»ÓÐÀ´×ÔÌØ¶¨ÓòÃûµÄÇëÇó²Å»ª»á¼ûÊÓÆµ×ÊÔ´£¬±ÜÃâÄÚÈݱ»µÁÁ´¡£
IP°×Ãûµ¥/ºÚÃûµ¥£º½øÒ»²½Ï¸Ä廯»á¼û¿ØÖÆ¡£µ÷ÓŽ¨Ò飺Çå¾²ÓëÐÔÄÜÖ®¼äÐèҪȨºâ¡£¹ýÓÚÑÏ¿áµÄÇå¾²Õ½ÂÔ¿ÉÄÜ»áÓ°ÏìÕý³£Óû§µÄ»á¼ûÌåÑ飬ÐèҪƾ֤ÏÖʵӪҵ³¡¾°¾ÙÐÐÆ½ºâ¡£
Nginx100%ÊÓÆµÐÔÄÜ£º²»µ«½öÊÇWeb·þÎñÆ÷£¬¸üÊÇÁ÷ýÌåµÄÍõÕß
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪÐÅÏ¢Èö²¥ºÍÓéÀÖÏûºÄµÄÖ÷Á÷¡£´Ó¸ßÇåÓ°Ï·¡¢ÔÚÏ߿γ̵½Ö±²¥»¥¶¯£¬Óû§¶ÔÊÓÆµµÄÁ÷ͨ¶ÈºÍ¼ÓÔØËÙÂÊÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£¶øÔÚÕⳡºäºäÁÒÁÒµÄÁ÷ýÌå¸ïÖÀÖУ¬Nginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÕýÒÀ¸½ÆäǿʢµÄÄÜÁ¦£¬Öð½¥ÏÔ¶³öÆäÔÚÊÓÆµÁ÷ýÌåÁìÓò¡°ÍõÕß¡±µÄDZÖÊ¡£
Ðí¶àÈË¿ÉÄÜÖ»½«NginxÊÓΪ°²ÅÅÍøÕ¾µÄÀûÆ÷£¬Êâ²»Öª£¬Í¨¹ý¾«ÃîµÄÉèÖúÍÉîÈëµÄÃ÷È·£¬NginxÄܹ»½«ÊÓÆµ´«ÊäµÄÐÔÄÜÌáÉýÖÁ¼«Ö£¬ÊµÏÖ¿¿½ü¡°100%¡±µÄÐÔÄÜÌåÏÖ¡£Õâ²¢·Ç¿äÕŵÄÐû´«£¬¶øÊÇ»ùÓÚNginxÆæÒì¼Ü¹¹ºÍ¸»ºñÄ£¿éµÄÉî¶ÈÍÚ¾ò¡£
workerÀú³ÌÊýÓëworker_connections£ºÕâÊÇNginxÐÔÄÜÓÅ»¯µÄ½¹µã²ÎÊý¡£worker_processes¿ØÖÆNginxÊÂÇéÀú³ÌµÄÊýÄ¿£¬Í¨³£½¨ÒéÉèÖÃΪCPU½¹µãÊýµÄÁ½±¶£¬ÒÔ³ä·ÖʹÓöàºËCPUµÄ²¢Ðд¦Öóͷ£ÄÜÁ¦¡£
worker_connections½ç˵ÁËÿ¸öÊÂÇéÀú³ÌÄÜͬʱ´¦Öóͷ£µÄ×î´ó?ÅþÁ¬Êý¡£ÔÚÊÓÆµÁ÷ýÌ峡¾°Ï£¬Óû§¿ÉÄܳ¤Ê±¼ä¼á³ÖÅþÁ¬£¬Òò´ËÐèÒª½«worker_connectionsÉèÖÃΪһ¸öÏà¶Ô½Ï´óµÄÖµ£¬ÀýÈç4096»ò¸ü¸ß£¬ÏêϸÊýÖµÐèҪƾ֤·þÎñÆ÷µÄÄÚ´æºÍÏÖʵ²âÊÔÇéÐÎÀ´È·¶¨¡£
sendfileon;£ºÕâÊÇÒ»¸öÖÁ¹ØÖ÷ÒªµÄÖ¸ÁËüÔÊÐíNginxÖ±½Ó´ÓÎļþϵͳÖжÁÈ¡Êý¾Ý²¢½«Æä·¢Ë͵½ÍøÂçÌ×½Ó×Ö£¬¶øÎÞÐ轫Êý¾Ý¿½±´µ½Óû§¿Õ¼äºÍÄں˿ռäÖ®¼ä¡£Õâ´ó´óïÔÌÁËCPUºÍÄÚ´æµÄ¿ªÏú£¬ÏÔÖøÌá¸ßÁ˾²Ì¬Îļþ´«ÊäµÄЧÂÊ£¬¹ØÓÚÊÓÆµ´«Êä¶øÑÔ£¬ÆäÐÔÄÜÌáÉýÊǾªÈ˵ġ£
tcp_nopushon;Óëtcp_nodelayon;£º
½ø½×ÉèÖãºÄ㻹¿ÉÒÔÆ¾Ö¤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ÌṩÁËǿʢ?µÄ?»º´æ¹¦Ð§£¬¿ÉÒÔ¼«´óµØ¼õÇáÔ´·þÎñÆ÷µÄѹÁ¦£¬²¢Ëõ¶ÌÓû§»á¼ûÊÓÆµµÄÏìӦʱ¼ä¡£
Proxy_cache£ºµ±Nginx×÷Ϊ·´Ïò´úÀíʱ£¬proxy_cacheÖ¸ÁîÔÊÐíNginx»º´æºó¶Ë·þÎñÆ÷µÄÏìÓ¦¡£Í¨¹ýÉèÖÃproxy_cache_pathÀ´Ö¸¶¨»º´æÄ¿Â¼ºÍ²ÎÊý£¬²¢Ê¹ÓÃproxy_cacheÔÚlocation¿éÖÐÆôÓûº´æ¡£
»º´æÕ½ÂÔ£º¿ÉÒÔÆ¾Ö¤URL¡¢ÇëÇóÍ·¡¢ÏìӦͷµÈ¶àÖÖÌõ¼þÀ´½ç˵»º´æµÄ¼üÖµ£¬È·±£»º´æµÄ׼ȷÐÔºÍÓÐÓÃÐÔ¡£»º´æÓâÆÚ£ºÊ¹ÓÃproxy_cache_validÖ¸ÁîÉèÖòî±ðHTTP״̬ÂëµÄ»º´æÊ±¼ä£¬È·±£»º´æµÄʱЧÐÔ¡£
BrowserCache(ä¯ÀÀÆ÷»º´æ)£º³ýÁË·þÎñÆ÷¶ËµÄ»º´æ£¬Ö¸µ¼Óû§ä¯ÀÀÆ÷»º´æÊÓÆµ×ÊԴͬÑùÖ÷Òª¡£Í¨¹ýexpiresºÍCache-ControlµÈHTTPÍ·£¬¿ÉÒÔָʾä¯ÀÀÆ÷»º´æÊÓÆµÎļþ£¬ïÔÌÖØ¸´ÏÂÔØ¡£
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µÄЧÂÊ¡£
¡°Nginx100ÊÓÆµ¡±²¢·ÇÒ»¸ö¹Ù·½µÄÊÖÒÕÃû´Ê£¬Ëü¸üÏñÊÇÒ»ÖÖ¶ÔNginxÔÚÊÓÆµÈö²¥ÊäÁìÓòµÖ´ï¡°¼«Ö¡±ÐÔÄܵÄÐÎÏ󻯱í´ï¡£ÏëÏóһϣ¬µ±NginxµÄÐÔÄÜ»ñµÃ¡°°Ù±¶¡±ÌáÉý£¬ËüÄܹ»´¦Öóͷ£µÄÊÓÆµÁ÷¾Í³ÊÖ¸Êý¼¶ÔöÌí¡£ÕâÒâζ×Å£º
¸üµÍµÄÑÓ³Ù£ºÓû§Ô¢Ä¿Ö±²¥Ê±£¬ÑÓ³Ù»áÏÔÖø½µµÍ£¬ÏÕЩµÖ´ï¡°Ëù¼û¼´ËùµÃ¡±µÄ¾³½ç¡£¸ü¸ßµÄ²¢·¢£ºÆ½Ì¨Äܹ»Í¬Ê±Ö§³Ö¸ü¶àµÄÓû§ÔÚÏßԢĿÊÓÆµ£¬ÎÞÂÛÊÇ´óÐÍÈüÊÂÖ±²¥ÕÕ¾ÉÈÈÞ缯ÉÏÏߣ¬¶¼ÄÜÇáËÉÓ¦¶Ô¡£¸üÎȹ̵Ä?´«Ê䣺ÊÓÆµ²¥·Å»áÔ½·¢Á÷ͨ£¬¿¨¶Ù¡¢¶ªÖ¡µÄÇéÐδó?´óïÔÌ£¬Óû§ÌåÑé»ñµÃÖʵı¼ÌÚ¡£
¸üÎÞаµÄ°²ÅÅ£ºNginxµÄǿʢ¹¦Ð§Ê¹µÃ¹¹½¨ÖØ´óµÄÁ÷ýϵһÇбäµÃÔ½·¢ÈÝÒ×£¬´Ó¼òÆÓµÄÊÓÆµ·Ö·¢µ½ÖØ´óµÄCDN¼Ü¹¹£¬¶¼ÄÜÓÎÈÐÓÐÓà¡£
Nginx100ÊÓÆµ£¬´ú±í×ÅÒ»ÖÖ¶Ô¼«ÖÂÊÓÆµÁ÷ÌåÑéµÄ×·Çó£¬Ò²ÊÇÒ»ÖÖ¶ÔNginxǿʢÊÖÒÕÄÜÁ¦µÄÈϿɡ£Ëü²»µ«½öÊÇ·þÎñÆ÷Èí¼þ£¬¸üÊÇÒ»ÖÖÄܹ»Çý¶¯ÏÖ´úÊÓÆµÄÚÈÝ´«Êä¸ïÃüµÄÇ¿¶¦Á¦´ó¾ÙÁ¿¡£ÔÚ½ÓÏÂÀ´µÄpart2ÖУ¬ÎÒÃǽ«ÉîÈë̽ÌÖNginxÔÚÏÖʵÊÓÆµ³¡¾°ÖеÄÓ¦Óã¬ÒÔ¼°ÔõÑùͨ¹ýÉèÖÃÓÅ»¯£¬½øÒ»²½ÊÍ·ÅNginxÔÚÊÓÆµ´«?ÊäÖеġ°°Ù?±¶¡±ÄÜÁ¿¡£
Nginx100ÊÓÆµ£ºÊµÕ½ÑÝÁ·£¬½âËø¸ßÐÔÄÜÊÓÆµÁ÷µÄ×îÖÕÉñÃØ
ͨ¹ýÔÚNginxÖÐÆôÓÃHTTP/2£¨Í¨³£ÔÚlistenÖ¸ÁîÖÐÌí¼Óhttp2²ÎÊý£©£¬ÎÒÃÇ¿ÉÒÔʹÓÃÕâЩÐÂÌØÕ÷£¬ÎªÊÓÆµÁ÷ýÌå·þÎñÌṩ¸ü¿ìµÄ¼ÓÔØËÙÂʺ͸üÁ÷ͨµÄ?ԢĿÌåÑé¡£Õâ½ö½öÊÇNginxÊÓÆµÓÅ»¯Ö®ÂÃµÄÆðÔ´£¬ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖ¸üÇ°ÑØµÄÊÖÒÕºÍÕ½ÂÔ£¬½«ÊÓÆµÌåÑéÍÆÏò¼«Ö¡£
Nginx100%ÊÓÆµÓÅ»¯£ºÓµ±§Î´À´£¬½âËø¼«ÖÂÁ÷ýÌåÌåÑé
ÔÚ¼áʵµÄ»ù´¡Ö®ÉÏ£¬NginxµÄÊÓÆµÓÅ»¯Ö®Â·²¢Î´Ö¹²½¡£ÎªÁËÓ¦¶ÔÈÕÒæÔöÌíµÄÁ÷ýÌåÐèÇóºÍÒ»Ö±ÑݽøµÄÍøÂçÊÖÒÕ£¬ÎÒÃÇ»¹ÐèÒªÒýÈë¸üÏȽøµÄÐÒé¡¢¸üÖÇÄܵÄÄÚÈÝ·Ö·¢²ß?ÂÔ£¬²¢ÉîÈëÍÚ¾òNginxµÄÄ£¿é»¯Ç±Á¦¡£´ÓHTTP/3µÄ¸ïÃüÐÔÍ»ÆÆ£¬µ½±ßÑØÅÌËãµÄǿʢ¸³ÄÜ£¬ÔÙµ½Õë¶Ô²î±ð³¡¾°µÄ¶¨ÖÆ»¯ÉèÖã¬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ÊÓÆµ¡±Ëù´ú?±íµÄǿʢ´¦Öóͷ£ÄÜÁ¦¡£
ÕâÖÖHTTPÁ÷ýÌåÐÒéµÄÓÅÊÆÔÚÓÚÆä½áʵÐÔºÍ¿çÆ½Ì¨¼æÈÝÐÔ£¬¶øNginxÔòÊÇʵÏÖÕâÒ»¸ßЧ·Ö·¢µÄ?ÀíÏëÆ½Ì¨¡£
CDN£¨ÄÚÈÝ·Ö·¢ÍøÂ磩µÄ½¹µã½Úµã£ºCDNµÄʵÖʾÍÊÇͨ¹ý½«ÄÚÈÝÂþÑܵ½È«Çò¸÷µØµÄ·þÎñÆ÷ÉÏ£¬ÈÃÓû§Äܹ»´ÓÀë×Ô¼º×î½üµÄ·þÎñÆ÷»ñÈ¡ÄÚÈÝ£¬´Ó¶ø½µµÍÑÓ³Ù£¬Ìá¸ß»á¼ûËÙÂÊ¡£NginxÒòÆä¸ßÐÔÄÜ¡¢µÍ×ÊÔ´ÏûºÄÒÔ¼°¾«²ÊµÄ»º´æÄÜÁ¦£¬³£±»ÓÃ×÷CDN±ßÑØ½ÚµãµÄ½¹µã·þÎñÆ÷¡£
ËüÄܹ»»º´æ´ó×ÚµÄÊÓÆµÄÚÈÝ£¬²¢ÔÚÓû§ÇëÇóʱ¿ìËÙÏìÓ¦¡£Í¨¹ýNginxµÄ¸ºÔØÆ½ºâ¹¦Ð§£¬CDN³§ÉÌ»¹¿ÉÒÔÓÐÓõعÜÀíºÍµ÷Àí¸÷¸ö±ßÑØ½Úµã£¬È·±£·þÎñµÄÎȹ̺͸ßЧ¡£
APIÍø¹ØÓëÐÂÎÅÊèÉ¢£ºÔÚÖØ´óµÄÊÓÆµÆ½Ì¨¼Ü¹¹ÖУ¬Nginx»¹¿ÉÒÔÊÎÑÝAPIÍø¹ØµÄ½ÇÉ«£¬Í³Ò»´¦Öóͷ£À´×Ô¿Í»§¶ËµÄÖÖÖÖÇëÇ󣬲¢½«ËüÃÇ·Óɵ½²î±ðµÄ΢·þÎñ¡£Nginx»¹¿ÉÒÔʵÏÖÐÂÎÅÊèÉ¢£¬½«¾²Ì¬×ÊÔ´£¨ÈçÊÓÆµÎļþ¡¢Í¼Æ¬¡¢CSS¡¢JSÎļþ£©ÓÉNginxÖ±½Ó´¦Öóͷ££¬¶ø½«¶¯Ì¬ÇëÇó£¨ÈçÓû§µÇ¼¡¢Ì¸ÂÛ¡¢ËÑË÷µÈ£©×ª·¢¸øºó¶ËµÄÓ¦Ó÷þÎñÆ÷¡£
ÕâÖÖÊèÉ¢Õ½ÂÔÄܹ»³ä·ÖÑéÕ¹NginxÔÚ¾²Ì¬Îļþ´¦Öóͷ£ÉϵÄÓÅÊÆ£¬¼õÇáÓ¦Ó÷þÎñÆ÷µÄѹÁ¦£¬ÌáÉýÕûϵһÇеÄÏìÓ¦ËÙÂÊ¡£
Ö±²¥×÷ΪÊÓÆµÁìÓòµÄÖ÷Òª·ÖÖ§£¬¶ÔÑӳٺͲ¢·¢ÄÜÁ¦ÓÐ׿«ÆäÑÏ¿ÁµÄ?ÒªÇó¡£Nginx×îа汾ͨ¹ýһϵÁÐÊÖÒÕÉý¼¶£¬ÎªÊµÏÖµÍÑÓ³Ù¡¢¸ß²¢·¢µÄÖ±²¥ÌåÑéÌṩÁËǿʢµÄÖ§³Ö¡£
RTMP/HLS/DASHµÈ?ÐÒéµÄÉî¶ÈÖ§³ÖÓëÓÅ»¯£ºNginxÒÀ¸½ÆäǿʢµÄÄ£¿é»¯¼Ü¹¹£¬Äܹ»ÇáËɼ¯³ÉÖÖÖÖÁ÷ýÌåÐÒé¡£×îаæ?±¾ÔÚ¶ÔRTMP£¨Real-TimeMessagingProtocol£©¡¢HLS£¨HTTPLiveStreaming£©ºÍDASH£¨DynamicAdaptiveStreamingoverHTTP£©µÈÖ÷Á÷Ö±²¥ÐÒéµÄÖ§³ÖÉϾÙÐÐÁ˽øÒ»²½ÓÅ»¯¡£
ͨÏ꾡Ä廯µÄ»º³åÇø¹ÜÀíºÍ¸ßЧµÄÁ÷ýÌå·Ö·¢»úÖÆ£¬NginxÄܹ»×î´óÏ޶ȵؽµµÍÖ±²¥ÑÓ³Ù£¬È·±£¹ÛÖÚÄܹ»ÊµÊ±µØÎüÊÕµ½»ÃæºÍÉùÒô£¬ÊµÏÖ¡°100%ÊÓÆµ²¥·Å¡±µÄ¼´Ê±ÐÔ¡£WebRTCµÄÕûºÏÓëÓ¦ÓãºNginxÆð¾¢Ì½Ë÷WebRTC£¨WebReal-TimeCommunication£©µÈÇ°ÑØÊÖÒÕ£¬²¢ÌṩÁËÏà¹ØµÄ¼¯³É¼Æ»®¡£
ÔÚµ±½ñÕâ¸öÄÚÈÝΪÍõµÄʱ´ú£¬ÊÓÆµÒÑÈ»³ÉΪÐÅϢת´ïºÍÓéÀÖÏûºÄµÄÖ÷Á÷ÐÎʽ¡£´Ó¶ÌÊÓÆµµÄË鯬»¯ÓéÀÖ£¬µ½¸ßÇ峤ƬµÄÌÕ×íʽÌåÑ飬Óû§¶ÔÊÓÆµ²¥·ÅµÄÁ÷ͨ¶ÈºÍÎȹÌÐÔÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£Ò»µ©·ºÆð¼ÓÔØ»ºÂý¡¢¿¨¶Ù¡¢ÉõÖÁ²¥·Åʧ°Ü£¬Óû§µÄÄÍÐıã»áѸËÙÏûÄ¥£¬½ø¶øÑ¡ÔñÍÑÀë¡£×÷Ϊ¸ßÐÔÄܵÄWeb·þÎñÆ÷£¬NginxÒÔÆä׿ԽµÄ²¢·¢´¦Öóͷ£ÄÜÁ¦ºÍÎÞаµÄÉèÖÃÑ¡Ï³ÉΪÁËÊÓÆµÓÅ»¯ÁìÓò²»¿É»òȱµÄÀûÆ÷¡£
½ñÌ죬ÎÒÃǾÍÀ´Ò»ÆðÉîÈë̽Ë÷NginxÔõÑùʵÏÖ100%µÄÊÓÆµÓÅ»¯£¬ÎªÄúµÄƽ̨עÈëÇ¿¾¢µÄ¶¯Á¦£¬ÈÃÿһ´ÎÊÓÆµ²¥·Å¶¼³ÉΪһ´ÎÓäÔõÄÏíÊÜ¡£
Ò»¡¢NginxµÄ½¹µãÓÅÊÆ£ºÎªºÎËüÊÇÊÓÆµÓÅ»¯µÄ²»¶þ֮ѡ£¿
ÔÚÉîÈëNginxµÄÏêϸÓÅ»¯¼¼ÇÉ֮ǰ£¬ÎÒÃÇÎÞ·ÁÏÈÃ÷È·Ò»ÏÂËüΪºÎÔÚÊÓÆµÁìÓòÔÆÔÆÊÜ»¶Ó¡£NginxµÄ½¹µã¾ºÕùÁ¦ÔÚÓÚÆäÊÂÎñÇý¶¯¡¢Òì²½·ÇÛձյļܹ¹¡£Óë¹Å°åµÄ?Ïß³ÌÄ£×Ó²î±ð£¬NginxʹÓÃÉÙÁ¿µÄÀú³ÌºÍÊÂÎñÑ»·À´´¦Öóͷ£´ó×Ú²¢·¢ÅþÁ¬¡£ÕâÒâζ×Å£¬×ÝÈ»ÔÚÃæÁÙº£Á¿Óû§Í¬Ê±ÇëÇóÊÓÆµ×ÊԴʱ£¬NginxÒ²Äܼá³Ö¼«µÍµÄ×ÊÔ´ÏûºÄºÍ¼«¸ßµÄ?ÏìÓ¦ËÙÂÊ¡£
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»ò¸üרҵµÄÁ÷ýÌåÄ£¿é£¬Ôò¿ÉÒÔÎªÌØ¶¨³¡¾°Ìṩ¸üµ×²ãµÄÖ§³Ö¡£
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ЧÂÊ¡£
add_headerCache-Control"public,max-age=31536000";£º¹ØÓÚ.m3u8²¥·ÅÁбíÎļþºÍÊÓÆµ·ÖƬ£¬ÉèÖýϳ¤µÄ»º´æÊ±¼ä£¬ÌáÉý²¥·ÅµÄÁ÷ͨÐÔ¡£types{application/vnd.apple.mpegurlm3u8;video/mp2tts;}£ºÈ·±£Nginx׼ȷʶ±ðºÍ´«ÊäHLS/DASHÏà¹ØµÄÎļþÀàÐÍ¡£
µ÷ÓŽ¨Ò飺˼Á¿Ê¹ÓÃNginxPlus»òµÚÈý·½Ä£¿é£¨Èçnginx-vod-module£©À´Ìṩ¸ü¸ß¼¶µÄÊÓÆµµã²¥£¨VOD£©¹¦Ð§£¬ÈçDRM¼ÓÃÜ¡¢ÄÚÈÝ´ò°üµÈ¡£
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»¹ÌṩÁËÁ÷Á¿¿ØÖÆ£¨RateLimiting£©¹¦Ð§£¬ÕâÔÚÊÓÆµ·Ö·¢³¡¾°ÏÂÓÈΪÖ÷Òª¡£Í¨¹ýÉèÖÃlimit_req_zoneºÍlimit_reqÖ¸ÁÎÒÃÇ¿ÉÒÔÏÞÖÆµ¥Î»Ê±¼äÄÚÀ´×ÔͳһIPµØÖ·µÄÇëÇóÊýÄ¿£¬ÓÐÓñÜÃâÒò¶ñÒâÅÀ³æ»òÍ»·¢Á÷Á¿¹¥»÷µ¼Ö·þÎñÆ÷¹ýÔØ£¬´Ó¶ø°ü¹ÜÕý³£Óû§Äܹ»»ñµÃÎȹÌÁ÷ͨµÄ?ԢĿÌåÑé¡£
ϸÄåµÄÁ÷Á¿¿ØÖÆÒ²¿ÉÒÔ×ÊÖúÔËÓªÉ̸üºÃµØ¹ÜÀí´ø¿í×ÊÔ´£¬×èֹijЩÓû§Ì«¹ýÏûºÄ´ø¿í¶øÓ°ÏìÆäËûÓû§µÄ·þÎñÖÊÁ¿¡£
NginxÔÚHTTPS¼ÓÃÜ·½ÃæµÄÖ§³ÖÒ²ÊÇÊÓÆµÓÅ»¯µÄÒ»¸öÖ÷Òª×é³É²¿·Ö¡£ËäÈ»¼ÓÃÜ»á´øÀ´Ò»¶¨µÄÐÔÄÜ¿ªÏú£¬µ«¹ØÓÚ±£?»¤Óû§Òþ˽ºÍÊý¾ÝÇå¾²ÖÁ¹ØÖ÷Òª¡£NginxÄܹ»¸ßЧµØ´¦Öóͷ£TLS/SSLÎÕÊÖ£¬²¢Í¨¹ýÖîÈçOCSPStapling¡¢SessionResumptionµÈÊÖÒÕÀ´ÓÅ»¯HTTPSµÄÐÔÄÜ£¬×î´óÏ޶ȵØïÔ̼ÓÃÜ´øÀ´µÄÑÓ³Ù£¬È·±£ÊÓÆµ´«ÊäµÄÇå¾²Óë¸ßЧ¡£
×ܶøÑÔÖ®£¬Nginxͨ¹ýÆäÊÂÎñÇý¶¯¼Ü¹¹¡¢Ç¿Ê¢µÄ»º´æ?»úÖÆ¡¢¶Ô×îÐÂHTTPÐÒéµÄÖ§³Ö¡¢¸ßЧµÄѹËõËã·¨¡¢Ï¸ÄåµÄÁ÷Á¿¿ØÖÆÒÔ¼°ÓÅ»¯µÄHTTPSʵÏÖ£¬Äܹ»ÖÜÈ«ÌáÉýÊÓÆµÄÚÈݵĴ«ÊäЧÂʺÍÓû§ÌåÑ飬ÊÇʵÏÖ¡°Nginx100%ÊÓÆµÓÅ»¯¡±²»¿É»òȱµÄÀûÆ÷¡£
ÔÚǰһ²¿·Ö£¬ÎÒÃÇÒѾΪNginxÊÓÆµÓÅ»¯´òÏÂÁ˼áʵµÄ»ù´¡£¬ÏàʶÁËÆä½¹µãÓÅÊÆºÍ»ù´¡ÉèÖü¼ÇÉ¡£ÒªÊµÏÖÕæÕýÒâÒåÉϵġ°100%ÊÓÆµÓÅ»¯¡±£¬½ö½öÍ£ÁôÔÚ»ù´¡²ãÃæÊÇÔ¶Ô¶²»·óµÄ¡£ÊÓÆµÁ÷µÄ´«ÊäÉæ¼°µ½ÍøÂç¡¢·þÎñÆ÷¡¢¿Í»§¶ËµÈ¶à¸ö»·½Ú£¬ÈκÎÒ»¸ö»·½ÚµÄÆ¿¾±¶¼¿ÉÄܵ¼ÖÂÓû§ÌåÑéµÄϽµ¡£
Òò´Ë£¬ÎÒÃÇÐèÒª½øÒ»²½ÉîÈ룬̽Ë÷NginxÔÚCDN¼¯³É¡¢Á÷ýÌåÐÒéÓÅ»¯¡¢ÐÔÄÜ¼à¿ØÒÔ¼°Çå¾²·À»¤µÈ·½ÃæµÄ½ø½×Ó¦Óá£
Nginx£ºÊÓÆµ´«ÊäµÄÐÔÄÜÍõÕߣ¬100%ЧÂʵĻùʯ
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÒѳÉ?ΪÈËÃÇ»ñÊØÐÅÏ¢¡¢ÓéÀÖÐÝÏеÄ?Ö÷Á÷·½·¨¡£´Ó¶ÌÊÓÆµµÄÐËÆðµ½¸ßÇå¡¢4KÉõÖÁ8KÊÓÆµµÄÆÕ¼°£¬Óû§¶ÔÊÓÆµ²¥?·ÅµÄÁ÷ͨ¶È¡¢¼ÓÔØËÙÂÊÌá³öÁËØ¨¹ÅδÓеĸßÒªÇó¡£Ã¿Ò»´Î¿¨¶Ù¡¢Ã¿Ò»´ÎÂþ³¤µÄ¼ÓÔØ£¬¶¼¿ÉÄܵ¼ÖÂÓû§Á÷ʧ£¬Ëðº¦Æ·ÅÆÐÎÏó¡£ÔÚÕâÑùµÄÅä¾°Ï£¬Ò»¸öǿʢ¡¢¸ßЧµÄÊÓÆµ´«Êä½â¾ö¼Æ»®ÖÁ¹ØÖ÷Òª¡£
¶øNginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÕýÒÔÆä׿ԽµÄÄÜÁ¦£¬³ÉΪÎÞÊýÁ÷ýÌåÆ½Ì¨ºÍÊÓÆµ·þÎñÉ̵ÄÊ×Ñ¡£¬ÎªÊµÏÖ¡°Nginx100%ÊÓÆµ100%ÐÔÄÜ¡±µÄÄ¿µÄµÓÚ¨Á˼áʵ»ù´¡¡£
NginxǿʢµÄ»º´æ»úÖÆÊÇʵÏÖÊÓÆµÓÅ»¯µÄÒªº¦Ö®Ò»¡£Í¨¹ýÉèÖÃNginxµÄproxy_cache»òfastcgi_cacheµÈÄ£¿é£¬ÎÒÃÇ¿ÉÒÔ½«Óû§ÇëÇó¹ýµÄÊÓÆµÎļþ»º±£´æ·þÎñÆ÷ÍâµØ»òCDN±ßÑØ½Úµã¡£µ±ÆäËûÓû§ÔÙ´ÎÇëÇóͳһÊÓÆµÊ±£¬Nginx¿ÉÒÔÖ±½Ó´Ó»º´æÖжÁÈ¡Êý¾Ý²¢·µ»Ø£¬ÎÞÐèÔÙ´ÎÏòÔ´·þÎñÆ÷ÌᳫÇëÇ󣬴ó´óËõ¶ÌÁËÏìӦʱ¼ä£¬¼õÇáÁËÔ´·þÎñÆ÷µÄѹÁ¦¡£
¸üÖ÷ÒªµÄÊÇ£¬NginxµÄ»º´æ¿ÉÒÔÉèÖÃΪÖÇÄÜ»º´æ£¬ÀýÈçÆ¾Ö¤ÇëÇóÍ·ÐÅÏ¢£¨ÈçIf-Modified-Since£©À´ÅжÏ×ÊÔ´ÊÇ·ñÒѸüУ¬×èÖ¹»º´æÓâÆÚʧЧ£¬Í¬Ê±Ò²ÄÜÓÐÓÃʹÓûº´æ¿Õ¼ä¡£¹ØÓÚÊÓÆµÕâÖÖÌåÁ¿´ó¡¢¸üÐÂÆµÂÊÏà¶Ô½ÏµÍµÄÄÚÈÝ£¬»º´æµÄ×÷ÓÃÓÈΪÏÔÖø¡£
ÔÙÕߣ¬Nginx¶ÔHTTP/2ºÍHTTP/3ÐÒéµÄÓÅÒìÖ§³Ö£¬ÎªÊÓÆµ´«Êä´øÀ´Á˸ïÃüÐÔµÄÌáÉý¡£HTTP/2ÒýÈëÁ˶à·¸´Óã¨Multiplexing£©ÊÖÒÕ£¬ÔÊÐí¿Í»§¶Ëͨ¹ýµ¥¸öTCPÅþÁ¬²¢Ðз¢ËͶà¸öÇëÇ󣬲¢ÔÚ·þÎñÆ÷¶Ë²¢Ðд¦Öóͷ££¬È»ºóÔÚͳһ¸öÅþÁ¬ÉÏÒÔÂÒÐòµÄ·½·¨·µ»ØÏìÓ¦¡£
NginxÒÔÆä¾«Çɵļܹ¹¡¢¸ßЧµÄÊÂÎñ´¦Öóͷ£»úÖÆ¡¢Ç¿Ê¢µÄ»º´æÄÜÁ¦ÒÔ¼°¶ÔÁ÷ýÌåÐÒéµÄÓÅÒìÖ§³Ö£¬³ÉΪÁ˹¹½¨¸ßÐÔÄÜÊÓÆµ·þÎñµÄÀíÏëÑ¡Ôñ¡£Í¨¹ýÉîÈëÃ÷È·NginxµÄÊÂÇéÔÀí£¬²¢ÍŽáºÏÀíµÄÉèÖÃÓÅ»¯£¬´Ó»ù´¡µÄÍøÂçÉèÖõ½¸ß¼¶µÄÁ÷ýÌåÐÒéÓ¦Óã¬ÔÙµ½Ò»Á¬µÄ¼à¿Øµ÷ÓÅ£¬ÎÒÃÇÄܹ»×îºéÁ÷ƽµØÊÍ·ÅNginxµÄ?DZÄÜ£¬ÊµÏÖ¿¿½üÉõÖÁµÖ´ï100%µÄÊÓÆµÐÔÄÜ¡£
µ±Äã¿´µ½ÆÁÄ»Éϲ¥·ÅµÄÊÓÆµÁ÷ͨÎޱȣ¬¼ÓÔØË²¼äÍê³É£¬Õâ±³ºó¾ÍÓÐNginxÔÚĬĬµØÐÁÇÚÊÂÇé¡£Ëü²»µ«½öÊÇÒ»¸ö·þÎñÆ÷Èí¼þ£¬¸üÊǹ¹½¨ÏÖ´úÊÓÆµ·þÎñ£¬ÅþÁ¬ÄÚÈÝÓëÓû§µÄ¼áʵÇÅÁº£¬ÎªÎÒÃÇ´øÀ´ÎÞÓëÂױȵÄÊý×ÖÓéÀÖÌåÑé¡£ÈÃ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À´»á¼ûÊÓÆµ¡£
ÔÚNginxÖÐʵÏÖ100%µÄÊÓÆµÐÔÄÜ£¬²¢·ÇÒ»õí¶ø¾Í£¬¶øÊÇÐèÒªÏ꾡Èë΢µÄÉèÖÃÓÅ»¯¡£´Ó»ù´¡µÄ·þÎñÆ÷ÉèÖÃ×îÏÈ£¬Ã¿Ò»²½¶¼ÖÁ¹ØÖ÷Òª¡£
WorkerprocessesºÍWorkerconnections£º
worker_processes£ºÕâ¸öÖ¸Áî¾öÒéÁËNginxÊÂÇéÀú³ÌµÄÊýÄ¿¡£Í¨³£ÇéÐÎÏ£¬½¨Ò齫ÆäÉèÖÃΪCPU½¹µãÊý£¬»òÕßCPU½¹µãÊýµÄÁ½±¶¡£ÕâÑù¿ÉÒÔ³ä·ÖʹÓöàºËCPUµÄÅÌËãÄÜÁ¦£¬Ìá¸ß²¢·¢´¦Öóͷ£ÄÜÁ¦¡£worker_connections£ºÕâ¸öÖ¸ÁîÖ¸¶¨ÁËÿ¸öÊÂÇéÀú³ÌÄܹ»´¦Öóͷ£µÄ×î´ó²¢·¢ÅþÁ¬Êý¡£
ÔÚÊÓÆµ·þÎñ³¡¾°Ï£¬Óû§Í¬Ê±Ô¢Ä¿ÊÓÆµ±¬·¢µÄÅþÁ¬Êý»áºÜÊÇÖØ´ó£¬Òò´ËÐèҪƾ֤·þÎñÆ÷µÄÄÚ´æ?ºÍ´ø¿íÇéÐΣ¬½«worker_connectionsÉèÖõÃ×ã¹»¸ß¡£ÀýÈ磬¿ÉÒÔÉèÖÃΪ1024»ò¸ü¸ß¡£
²¢·¢ÅþÁ¬µÄ¹ÜÀí£ºworker_processes¡¢worker_connectionsÊÇNginx´¦?Àí¸ß²¢·¢µÄÒªº¦²ÎÊý¡£ÐèҪƾ֤·þÎñÆ÷CPU½¹µãÊýºÍÄÚ´æ¾ÞϸÀ´ºÏÀíÉèÖá£keepalive_timeoutµÄÉèÖÃÒ²Ó°Ïì×ÅÅþÁ¬µÄ¸´ÓÃÂÊ¡£
»º´æÕ½ÂÔµÄÓÅ»¯£º¹ØÓÚ¸ßÆµ»á¼ûµÄÊÓÆµ£¬Ê¹ÓÃNginxµÄproxy_cache¹¦Ð§¿ÉÒÔ¼«´óµØ¼õÇáºó¶Ë·þÎñÆ÷µÄѹÁ¦¡£ÉèÖúÏÀíµÄ»º´æ¼ü¡¢»º´æÓâÆÚʱ¼äÒÔ¼°»º´æÄÚÈÝ£¬Äܹ»ÏÔÖøÌáÉýµã²¥µÄÏìÓ¦ËÙÂÊ¡£
Ó²¼þÓëÍøÂçµÄÐͬ£ºNginxµÄ?ÐÔÄÜʩչҲÊܾ¿¾¹?²ãÓ²¼þºÍÍøÂçÇéÐεÄÖÆÔ¼¡£SSDÓ²ÅÌ¡¢¸ß´ø¿íÍø¿¨¡¢µÍÑÓ³ÙµÄÍøÂçÅþÁ¬£¬ÒÔ¼°ÓÅ»¯µÄÍøÂçÐÒéÕ»£¬¶¼ÊÇʵÏÖ¡°100%¡±ÊÓÆµÐÔÄܲ»¿É»òȱµÄ×é³É²¿·Ö¡£
Nginx100%ÊÓÆµÐÔÄÜ£º´Ó»ù´¡ÉèÖõ½¸ß¼¶½ø½×µÄÈ«·½Î»ÆÊÎö
ÔÚÉÏÒ»²¿·Ö£¬ÎÒÃÇÉîÈë̽ÌÖÁËNginxÔÚÊÓÆµÁ÷ýÌåÁìÓòµÄ½¹µãÓÅÊÆ¼°×ÅʵÏÖ¡°100%¡±ÐÔÄܵÄÀíÂÛ»ù´¡¡£ÏÖÔÚ£¬ÎÒÃǽ«¾Û½¹ÓÚÏêϸµÄʵ¼ù²ãÃæ£¬´Ó?»ù´¡ÉèÖÃÈëÊÖ£¬Öð²½½ø½×µ½¸ü¸ß¼¶µÄÓÅ»¯¼¼ÇÉ£¬×ÊÖúÄúÕæÕý½âËøNginxµÄÊÓÆµÁ÷ýÌåDZÁ¦¡£
Nginx100%ÊÓÆµ´«Ê䣬²¢?·ÇÒ»¸öÖյ㣬¶øÊÇÒ»¸öÒ»Á¬½ø»¯µÄÀú³Ì¡£Ëæ×Å5G¡¢Wi-Fi6µÈÐÂÒ»´ú?ÍøÂçµÄÆÕ¼°£¬ÒÔ¼°8KÇø·ÖÂÊ¡¢VR/ARµÈ?ÐÂÐÎ̬ÄÚÈݵķºÆð£¬¶ÔÊÓÆµ´«ÊäµÄÒªÇó½«Ò»Ö±ÌáÉý¡£NginxÒÀ¸½Æä¿ª·Å¡¢ÎÞа¡¢¸ßÐÔÄܵÄÌØµã£¬±Ø½«¼ÌÐøÔÚÕâÒ»ÁìÓòÊÎÑÝÒªº¦½ÇÉ«¡£
´Ó¸üÖÇÄܵÄÁ÷ýÌåÐÒéÖ§³Ö£¬µ½¸üÉî¶ÈµÄ±ßÑØÅÌË㼯³É£¬ÔÙµ½ÓëÐÂÐËÄÚÈÝÃûÌõÄÍêÉÆÆõºÏ£¬Nginx½«Ò»Á¬½âËøÊÓÆµ´«ÊäµÄ¼«ÖÂÌåÑ飬ÒýÁìÎÒÃÇ×ßÏòÒ»¸öÔ½·¢Á÷ͨ¡¢ÌÕ×íµÄÊý×ÖÌìÏ¡£
NginxÒÔÆäǿʢµÄÐÔÄÜ¡¢ÎÞаµÄÉèÖÃÒÔ¼°¸»ºñµÄÄ£¿éÉú̬£¬³ÉΪÁËÊÓÆµ·þÎñÁìÓò²»¿É»òȱµÄÒªº¦ÊÖÒÕ¡£Í¨¹ýÉîÈëÃ÷È·ÆäÊÂÇéÔÀí£¬²¢Ï¸Ä廯µØÉèÖø÷Ïî²ÎÊý£¬Äú¿ÉÒÔÓÐÓõØÓ¦¶Ôº£Á¿²¢·¢ÇëÇ󣬴ó·ùÌáÉýÊÓÆµµÄ¼ÓÔØËÙÂʺͲ¥·ÅÁ÷ͨ¶È¡£´Ó»ù´¡µÄÅþÁ¬ÊÜÀíµ½¸ß¼¶µÄÐÒéÓÅ»¯¡¢¸ºÔØÆ½ºâºÍÇå¾²Õ½ÂÔ£¬NginxÌṩÁËÈ«·½Î»µÄ½â¾ö¼Æ»®?£¬ÖúÄú½âËøÁ÷ͨÊӽ磬ΪÓû§´ø?À´ÎÞÓëÂױȵÄÊÓÆµÔ¢Ä¿ÌåÑé¡£
¡°100%ÊÓÆµÐÔÄÜ¡±²¢·ÇÒ£²»¿É¼°µÄÀíÏ룬¶øÊÇͨ¹ý¶ÔNginxµÄÉîÈëʵ¼ùºÍÒ»Á¬ÓÅ»¯£¬¿ÉÒÔÖð²½ÊµÏÖµÄ׿ԽĿµÄ¡£ÈÃÎÒÃÇÒ»ÆðÓµ±§Nginx£¬¼ÝÔ¦ÊÓÆµÊ±´úµÄÐÚÓ¿À˳±£¬ÈÃÿһ´Îµã²¥?¡¢Ã¿Ò»´ÎÖ±²¥£¬¶¼³É?Ϊһ´ÎË¿»¬¡¢ÓäÔõÄÊÓÌýÏíÊÜ¡£
ÅþÁ¬½¨É迪Ïú£ÔÃÄ¿ÎÇëÇó¶¼ÐèÒª½¨ÉèTCPÅþÁ¬£¬¹ØÓÚÆµÈԵĶÌÅþÁ¬ÊÓÆµ£¬»á±¬·¢²»Ð¡µÄ¿ªÏú¡£´ø?¿íʹÓÃÂÊ£ºHTTPµÄÍ·²¿ÐÅÏ¢Ïà¶ÔÈßÓ࣬»áÕ¼ÓÃÒ»²¿·Ö´ø¿í¡£Á÷ýÌåÌØÕ÷µÄÖ§³Öȱ·¦£ºHTTPÔÉú²¢²»Ö§³ÖRTMP¡¢HLS¡¢DASHµÈÁ÷ýÌåÐÒéµÄÌØÕ÷£¬Èç·ÖƬ´«?Êä¡¢¶ÏµãÐø²¥¡¢¶¯Ì¬ÂëÂÊÇл»µÈ¡£
Nginx²¢Ã»ÓоÖÏÞÓÚÔÉúHTTPµÄÄÜÁ¦¡£Í¨¹ý¼ÓÔØÖÖÖÖÄ£¿é£¬NginxÄܹ»¼«´óµØÀ©Õ¹Æä¹¦Ð§£¬ÒÔ¸üºÃµØÖ§³ÖÊÓÆµ·Ö·¢¡£ÆäÖУ¬×îÒªº¦µÄ¼´ÊÇÆäǿʢµÄ?»º´æ»úÖÆ¡£
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µÈ¹¤¾ß¾ÙÐиüÖÜÈ«µÄÐÔÄÜ¼à¿ØºÍÈÕÖ¾ÆÊÎö£¬ÒÔ±ãʵʱ·¢Ã÷Ï¢Õù¾öÐÔÄÜÆ¿¾±¡£
ÊÓÆµÄÚÈݵÄÇå¾²ÐÔÈÕÒæÊܵ½ÖØÊÓ£¬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ÄÇÑù³ÉÊ죬µ«¿ÉÒÔͨ¹ýµÚÈý·½Ä£¿éʵÏÖ¡£
tcp_nopushon;ʵÑéÔÚ·¢ËÍÏìӦͷÐÅÏ¢ºó£¬Ö»¹ÜÆÚ´ý?¸ü¶àµÄÊý¾ÝÒ»Æð·¢ËÍ£¬ÒÔïÔÌ´«ÊäµÄTCPÊý¾Ý°üÊýÄ¿£¬Ìá¸ß´«ÊäЧÂÊ¡£tcp_nodelayon;½ûÓÃNagleËã·¨£¬ÕâÒâζ×ÅNginx»á¾¡¿ÉÄÜ¿ìµØ·¢ËÍÿһ¸öTCPÊý¾Ý°ü£¬×èÖ¹ÁËÊý¾Ý°üµÄÀÛ»ýÆÚ´ý£¬¹ØÓÚʵʱÐÔÒªÇó½Ï¸ßµÄÖ±²¥Èö²¥ÊäºÜÊÇÓÐÒæ¡£
keepalive_timeout£º³¤ÅþÁ¬¿ÉÒÔïÔ̿ͻ§¶ËÓë·þÎñÆ÷½¨ÉèÐÂÅþÁ¬µÄ¿ªÏú¡£Êʵ±ÉèÖÃkeepalive_timeout£¬ÔÊÐí¿Í»§¶ËÔÚһ׼ʱ¼äÄÚ¼á³ÖÅþÁ¬£¬Õâ¹ØÓÚÐèÒªÒ»Á¬´«ÊäÊý¾ÝµÄÊÓÆµÁ÷ýÌåÓÈÆäÖ÷Òª¡£µ«Ò²Òª×¢ÖØ£¬¹ý³¤µÄkeepalive_timeout¿ÉÄÜ»áÕ¼Óùý¶àµÄ·þÎñÆ÷×ÊÔ´£¬ÐèҪƾ֤ÏÖÕæÏàÐξÙÐÐȨºâ¡£
Îļþ¾ä±úÏÞÖÆ£ºNginx×÷Ϊһ¸ö¸ßÐÔÄܵÄ?·þÎñÆ÷£¬ÐèÒª´¦?Àí´ó×ڵIJ¢·¢ÅþÁ¬£¬Ã¿¸öÅþÁ¬¶¼ÐèÒªÒ»¸öÎļþ¾ä±ú¡£Òò´Ë£¬Îñ±ØÔÚ²Ù×÷ϵͳ²ãÃæÌá¸ßÎļþ¾ä±ú?µÄÏÞÖÆ¡£¿ÉÒÔͨ¹ýÐÞ¸Ä/etc/security/limits.confÎļþÀ´ÉèÖÃnofileµÄ×î´óÖµ£¬È·±£NginxÄܹ»·¿ª×ã¹»¶àµÄÎļþ¾ä±ú¡£
ËäÈ»ÊÓÆµÎļþ×Ô¼ºÍ¨³£ÊǾÓɸ߶ÈѹËõµÄ£¨ÈçH.264/H.265±àÂ룩£¬µ«HTTP´«ÊäÀú³ÌÖпÉÄܻᱣ´æÒ»Ð©¿ÉѹËõµÄÍ·²¿ÐÅÏ¢»òÔªÊý¾Ý¡£NginxµÄGzipѹËõ¹¦Ð§¿ÉÒÔÔÚÕâЩ²¿·Öʩչ×÷Ó㬽øÒ»²½¼õС´«ÊäµÄÊý¾ÝÁ¿£¬½ÚÔ¼´ø¿í£¬²¢¼ÓËÙ´«ÊäËÙÂÊ¡£
ÆôÓÃGzipѹËõ£ºÔÚNginxµÄhttp»òserver¿éÖУ¬¿ÉÒÔʹÓÃgzipon;Ö¸ÁîÀ´¿ªÆôGzipѹËõ¡£ÉèÖÃѹËõ¼¶±ð£ºgzip_comp_levelÖ¸Áî¿ÉÒÔÉèÖÃѹËõ¼¶±ð?£¨1-9£©£¬¼¶±ðÔ½¸ßѹËõЧ¹ûÔ½ºÃ£¬µ«CPUÏûºÄÒ²Ô½´ó¡£Í¨³£ÉèÖÃΪ4-6ÊǽÏÁ¿ÕÛÖÔµÄÑ¡Ôñ¡£
Ö¸¶¨Ñ¹ËõÀàÐÍ£ºgzip_typesÖ¸Áî¿ÉÒÔÖ¸¶¨ÄÄЩMIMEÀàÐ͵ÄÎļþ¾ÙÐÐѹËõ¡£¹ØÓÚÊÓÆµÁ÷£¬Äã¿ÉÄܲ»Ï£Íû¶ÔÊÓÆµ×Ô¼º¾ÙÐÐGzipѹËõ£¨ÓÉÓÚËüÃÇ×Ô¼ºÒѾÊǸ߶ÈѹËõµÄ£©£¬µ«¿ÉÒÔ¶Ô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À´ÏÞÖÆÍ³Ò»¿Í»§¶Ë»òͳһÁ÷µÄ×î´ó?ÅþÁ¬Êý£¬ÓÐÖúÓÚ±ÜÃâ¶ñÒâ¹¥»÷ºÍ°ü¹ÜÖ±²¥µÄÎȹÌÐÔ¡£
¹ØÓÚÊÓÆµÁ÷£¬¿ÉÒÔÊʵ±ÑÓÉì´ËÖµ£¬×èֹƵÈÔ½¨ÉèÅþÁ¬´øÀ´µÄ¿ªÏú¡£ÀýÈçkeepalive_timeout75s;¡£keepalive_requests:ÉèÖÃÔÚÒ»¸ö³¤ÅþÁ¬ÉÏÔÊÐí´¦Öóͷ£µÄ×î´óÇëÇóÊý¡£¹ØÓÚÊÓÆµÁ÷£¬Í¨³£Ò»¸ö³¤ÅþÁ¬Ö»·þÎñÓÚÒ»¸ö»òÉÙÊý¼¸¸öÊÓÆµÆ¬¶Ï£¬Òò´Ë¿ÉÒÔÉèÖÃÒ»¸ö½ÏµÍµÄÖµ£¬ÀýÈçkeepalive_requests100;£¬ÒÔ×èÖ¹µ¥¸öÅþÁ¬³¤Ê±¼äÕ¼ÓÃ×ÊÔ´¡£
TCPNODELAYÓëTCPCORK£ºtcp_nodelayon;:½ûÓÃNagleËã·¨£¬¼´ÔÊÐíСÊý¾Ý°üÁ¬Ã¦·¢ËÍ£¬ïÔÌÑÓ³Ù£¬Õâ¹ØÓÚÐèҪʵʱÏìÓ¦µÄÊÓÆµÁ÷ºÜÊÇÓÐÀû¡£tcp_nopushon;(Linux):ÆôÓÃTCP_CORKÑ¡Ïî¡£
µ±ÆôÓÃʱ£¬Nginx»áʵÑéºÏ²¢¶à¸öС¿éÊý¾Ý£¬È»ºóÔÚ·¢ËÍǰһ´ÎÐÔ·¢ËÍ£¬Õâ¿ÉÒÔïÔÌÍøÂç´«ÊäÖеİüÍ·¿ªÏú£¬Ìá¸ß´«ÊäЧÂÊ£¬ÓÈÆäÊÊÓÃÓÚ´«Êä´óÎļþ¡£
HTTP/2ºÍHTTP/3µÄÓ¦ÓãºËæ×ÅÍøÂçÊÖÒÕµÄÉú³¤£¬HTTP/2ºÍHTTP/3ÐÒéµÄ·ºÆðΪÊÓÆµ´«Êä´øÀ´Á˸ïÃüÐÔµÄˢС£HTTP/2ÒýÈëÁ˶à·¸´Óá¢Í·²¿Ñ¹Ëõ¡¢·þÎñÆ÷ÍÆË͵ÈÌØÕ÷£¬ÏÔÖøïÔÌÁËÍøÂçÑÓ³Ù?£¬Ìá¸ßÁË´«ÊäЧÂÊ¡£HTTP/3¸üÊÇ»ùÓÚQUICÐÒ飬½â¾öÁËTCPÔÚ¶ª°ü³¡¾°ÏµĶӱßÛÕ±ÕÎÊÌ⣬½øÒ»²½ÌáÉýÁËÔÚ²»ÎȹÌÍøÂçÇéÐÎϵÄÊÓÆµ²¥·ÅÌåÑé¡£
ÔÚNginxÖÐÆôÓÃHTTP/2»òHTTP/3£¬¿ÉÒÔÏÔÖøÌáÉýÊÓÆµ¼ÓÔØËÙÂʺͲ¥·ÅÁ÷ͨ¶È£¬ÓÈÆäÊÇÔÚÍøÂçÖÊÁ¿²»¼ÑµÄÇéÐÎÏ¡£
NginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµÁìÓò´ó·ÅÒì²Ê£¬ÓëÆä¸ßЧµÄÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕI/OÄ£×ÓÃܲ»¿É·Ö¡£¹Å°åµÄ·þÎñÆ÷Ä£×ÓÍùÍù½ÓÄÉÀú³Ì/Ïß³ÌÄ£×Ó£¬Ã¿¸öÅþÁ¬¶¼ÐèÒªÏûºÄÒ»¸öÀú³Ì»òỊ̈߳¬Ôڸ߲¢·¢³¡¾°Ï£¬×ÊÔ´ÏûºÄÖØ´ó£¬ÐÔÄÜÆ¿¾±ËæÖ®¶øÀ´¡£¶øNginxÔòͨ¹ýÊÂÎñÇýÄîÍ·ÖÆ£¬Äܹ»ÓÃÉÙÉÙµÄÀú³Ì/Ï̴߳¦Öóͷ£³ÉǧÉÏÍòµÄ?²¢·¢ÅþÁ¬¡£
¹ØÓÚÊÓÆµÁ÷ýÌå¶øÑÔ£¬ÕâÒâζ×ÅNginx¿ÉÒÔ¸ßЧµØ´¦Öóͷ£´ó×Ú¿Í»§¶ËͬʱÇëÇóÊÓÆµ×ÊÔ´£¬¶ø²»»áÓÉÓÚÅþÁ¬Êý¼¤Ôö¶øµ¼ÖÂÐÔÄÜÖè½µ¡£
¸üÖ÷ÒªµÄÊÇ£¬NginxµÄÄÚ´æ¹ÜÀí»ººÍ³åÇø»úÖÆÒ²ÎªÆäÊÓÆµÐÔÄܵÄ׿ԽÌåÏÖµÓÚ¨ÁË»ù´¡¡£ËüÄܹ»ÓÐÓõعÜÀíÄڴ棬ïÔ̲»ÐëÒªµÄÄڴ濽±´£¬²¢Í¨Ï꾡ÄåµÄ»º³åÇø¿ØÖÆ£¬ÓÅ»¯Êý¾ÝÔÚÍøÂç´«ÊäÖеÄÁ÷¶¯£¬´Ó¶ø½µµÍÑÓ³Ù£¬Ìá¸ßÍÌÍÂÁ¿¡£
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²Ù×÷£¬¹ý´óµÄ»º³å?ÇøÔò¿ÉÄÜÆÌÕÅÄÚ´æ¡£
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¿ÉÒÔÆ¾Ö¤Ô¤ÉèµÄËã·¨£¨ÈçÂÖѯ¡¢¼ÓȨÂÖѯ¡¢IP¹þÏ£µÈ£©£¬½«Óû§ÇëÇóÔȳƵطÖÅɸøºó¶ËµÄ¶à¸öÁ÷ýÌå·þÎñÆ÷¡£ÕâÑù£¬×ÝȻij̨·þÎñÆ÷·ºÆð¹ÊÕÏ£¬ÆäËû·þÎñÆ÷ÈÔÈ»¿ÉÒÔ¼ÌÐøÌṩ·þÎñ£¬°ü¹ÜÁËÊÓÆµ·þÎñµÄÒ»Á¬ÐÔ¡£·´Ïò´úÀí£ºNginx×÷Ϊ·´Ïò´úÀí£¬¿ÉÒÔÒþ²Øºó¶Ë·þÎñÆ÷µÄÕæÊµIPµØÖ·£¬ÔöÇ¿Çå¾²ÐÔ¡£
Ëü»¹¿ÉÒÔ¶ÔÇëÇó¾ÙÐлº´æ£¬ïÔ̺ó¶Ë·þÎñÆ÷µÄѹÁ¦¡£ÀýÈ磬¹ØÓÚһЩÈÈÃŵÄÊÓÆµÄÚÈÝ£¬Nginx¿ÉÒÔ½«ÊÓÆµÇÐÆ¬»º´æµ½ÍâµØ£¬µ±Óû§ÇëÇóʱֱ½Ó´Ó»º´æÌṩ£¬´ó´óÌáÉýÁËÏìÓ¦ËÙÂÊ¡£
NginxÔÚÊÓÆµÓÅ»¯·½ÃæÓµÓеÃÌì¶ÀºñµÄÓÅÊÆ¡£´ÓÊÂÎñÇý¶¯µÄ¼Ü¹¹µ½¸»ºñµÄÄ£¿éÖ§³Ö£¬ÔÙµ½Ï¸Ä廯µÄÉèÖÃÑ¡ÏËüΪÎÒÃÇÌṩÁËǿʢµÄ¹¤¾ßÏ䡣ͨ¹ý¶Ô»ù´¡ÉèÖõÄÓÅ»¯¡¢Õë¶ÔÊÓÆµÃûÌõÄÊÊÅ䣬ÒÔ¼°¸ßЧµÄ»º´æÕ½ÂÔ£¬ÎÒÃÇ¿ÉÒÔΪÓû§¹¹½¨ÆðÒ»¸öÁ÷ͨ¡¢Îȹ̵ÄÊÓÆµ²¥·ÅÇéÐΡ£
Õâ½ö½öÊÇ×îÏÈ¡£ÔÚÏÂÒ»²¿·Ö£¬ÎÒÃǽ«ÉîÈë̽ÌÖ¸ü½ø½×µÄÓÅ»¯¼¼ÇÉ£¬°üÀ¨CDN¼¯³É¡¢Á÷ýÌåÐÒéµÄ×î¼Ñʵ¼ù£¬ÒÔ¼°ÐÔÄÜ¼à¿ØÓëµ÷ÓÅ£¬½øÒ»²½½«NginxµÄÊÓÆµÓÅ»¯ÍÆÏòеĸ߶ȡ£
ÎÒÃÇÐèÒªÃ÷È·NginxµÄ½¹µãÓÅÊÆ¡£NginxÒÔÆäÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕµÄÍøÂçÄ£×Ó¶øÖøÃû£¬ÕâÒâζ×ÅËüÔÚ´¦Öóͷ£¸ß²¢·¢ÅþÁ¬Ê±£¬Äܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬Ìṩ׿ԽµÄÐÔÄÜ¡£¹Å°å·þÎñÆ÷ÔÚ´¦Öóͷ£Ã¿¸öÅþÁ¬Ê±£¬¶¼ÐèÒª½¨ÉèÒ»¸ö×ÔÁ¦µÄÀú³Ì»òỊ̈߳¬ÕâÔڸ߲¢·¢³¡¾°Ï»áѸËٺľ¡ÏµÍ³×ÊÔ´¡£
¶øNginx²É?Óõġ°¶àÀú³Ì/µ¥Ïß³Ì+ÊÂÎñÇý¶¯¡±Ä£Ê½£¬Ê¹µÃÒ»¸öÖ÷Àú³Ì¿ÉÒÔ¹ÜÀí¶à¸öÊÂÇéÀú³Ì£¬Ã¿¸öÊÂÇéÀú³ÌÓÖ¿ÉÒÔͨ¹ýepoll/kqueueµÈ¸ßЧµÄI/O¶à·¸´ÓûúÖÆ£¬Í¬Ê±´¦Öóͷ£³ÉǧÉÏÍòµÄÅþÁ¬¡£
¹ØÓÚÊÓÆµ·Ö·¢¶øÑÔ£¬ÕâÒâζ×Åʲô£¿ÊÓÆµÎļþͨ³£½Ï´ó£¬Óû§²¢·¢Ô¢Ä¿Á¿Öش󣬶ԷþÎñÆ÷µÄÍÌÍÂÁ¿ºÍÅþÁ¬ÊÜÀíÄÜÁ¦Ìá³öÁ˼«¸ßµÄÒªÇó¡£NginxµÄÕâÖּܹ¹£¬Ç¡Ç¡Äܹ»¸ßЧµØÓ¦¶ÔÕâЩÌôÕ½¡£ËüÄܹ»ÇáËɵش¦Öóͷ£ÊýÍòÉõÖÁÊýÊ®ÍòµÄ²¢·¢ÅþÁ¬£¬ÎªÃ¿¸öԢĿÕßÌṩÎȹ̡¢¿ìËÙµÄÊÓÆµÁ÷¡£
HTTPÐÒéϵÄÊÓÆµ·Ö·¢£ºÌôÕ½ÓëNginxµÄ½â¾ö¼Æ»®
ÔçÆÚµÄÊÓÆµ·Ö·¢Ö÷ÒªÒÀÀµÓÚHTTPÐÒé¡£ËäÈ»HTTPÐÒéµÄÓ¦ÓÃÆÕ±é£¬µ«ÆäÔÚÊÓÆµÁ÷ýÌå´«Êä·½ÃæÒ²±£´æÒ»Ð©¹ÌÓеÄÌôÕ½£¬ÀýÈ磺
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±»ÀÄÓá£
ÔÚǰһ²¿·Ö£¬ÎÒÃÇÏêϸÆÊÎöÁËNginx×îа汾ÔÚÊÓÆµ´¦Öóͷ£ÄÜÁ¦ÉϵĽ¹µãÓÅÊÆ£¬°üÀ¨¼Ü¹¹Ë¢Ð¡¢ÐÒéÖ§³Ö¡¢Á÷ýÌåÄ£¿éÔöÇ¿ÒÔ¼°»º´æ»úÖÆµÄ?Éý¼¶¡£Ö½ÉÏ̸±øÖÕ¾õdz£¬¾øÖª´ËÊÂÒª¹ªÐС£ÒªÕæÕýʵÏÖ¡°100%ÊÓÆµÁ÷Á¿¡±µÄÁ÷ͨÌåÑ飬»¹ÐèÒªÔÚÏÖʵ°²ÅÅÖÐÔËÓÃÊʵ±µÄÉèÖü¼ÇÉ£¬²¢?¹Ø×¢ÆäδÀ´µÄÉú³¤Ç÷ÊÆ¡£
±¾?²¿·Ö½«ÎªÄúÌṩһÌ×ÏêʵµÄʵ¼ùÖ¸ÄÏ£¬²¢Õ¹ÍûNginxÔÚÊÓÆµÁìÓòµÄ×ÆË¸Î´À´¡£
Èý¡¢ÊµÕ½ÉèÖãºNginx100%ÊÓÆµÁ÷Á¿µÄµ÷ÓÅÃØóÅ
1.¸ß²¢·¢ÅþÁ¬µÄÓÅÑÅ´¦Öóͷ££ºworkerprocesses,workerconnections
worker_processes£º´Ë²Î?Êý¾öÒéÁËNginxÆô¶¯¼¸¶à¸öÊÂÇéÀú³Ì¡£Í¨³£ÉèÖÃΪCPU½¹µãÊý£¬ÒÔ³ä?·ÖʹÓöàºË´¦Öóͷ£Æ÷µÄÄÜÁ¦¡£¹ØÓÚÊÓÆµ·þÎñ£¬¸ü¶àµÄworkerÀú³ÌÒâζ×Å¿ÉÒÔͬʱ´¦Öóͷ£¸ü¶àµÄ²¢·¢ÅþÁ¬£¬´Ó¶ø¸üÓÐÓõØÓ¦¶Ôá¯ÁëÁ÷Á¿¡£worker_connections£ºÃ¿¸öÊÂÇéÀú³ÌÄܹ»´¦Öóͷ£µÄ×î´ó²¢·¢ÅþÁ¬Êý¡£
NginxÔÚÕâЩÐÒéÉϵÄÖ§³Ö£¬²»µ«½öÊǼòÆÓµÄÐÒ鼿ÈÝ£¬¸üÖ÷ÒªµÄÊÇÆäÄܹ»Î§ÈÆÕâЩÐÒéÌṩ¸ßÐÔÄÜ¡¢¸ß¿ÉÓÃÐԵĽâ¾ö¼Æ»®¡£Í¨¹ýÉèÖÃNginx×÷ΪAPIÍø¹Ø¡¢¸ºÔØÆ½ºâÆ÷¡¢»º´æ·þÎñÆ÷£¬ÉõÖÁÍŽáÆä×÷ΪWeb·þÎñÆ÷µÄÉí·Ý£¬¿ÉÒÔ¹¹½¨³öÖØ´óµ«¸ßЧµÄÁ÷ýÌå·Ö·¢ÏµÍ³¡£
ÀýÈ磬ͨ¹ýNginxµÄrewriteºÍmapÄ£¿é£¬¿ÉÒÔʵÏÖ¶Ô²¥·ÅµØÖ·µÄÎÞа¿ØÖƺÍÇå¾²¼Ó¹Ì£»Í¨¹ýlimit_connºÍlimit_reqÄ£¿é£¬¿ÉÒÔ¶Ô¿Í»§¶ËÇëÇó¾ÙÐÐÏÞËÙ£¬±ÜÃâ¶ñÒâ¹¥»÷ºÍ×ÊÔ´ÀÄÓá£
Nginx£º²»µ«ÊÇWeb·þÎñÆ÷£¬¸üÊÇÊÓÆµÁ÷ýÌåµÄ¼ÓËÙÒýÇæ
ÔÚÐÅÏ¢±¬Õ¨µÄʱ´ú£¬ÊÓÆµÄÚÈÝÒѳÉΪÎÒÃÇÉúÑÄÖв»¿É»òȱµÄ?Ò»²¿·Ö¡£ÎÞÂÛÊǾ«²ÊµÄÓ°Ï·¡¢¼¤ÇéµÄ?ÌåÓýÈüÊ£¬ÕÕ¾ÉѧϰÐÂ֪ʶµÄ?ÔÚÏ߿γ̣¬Á÷ͨ¡¢¸ßÇåµÄ?¹ÛÓ°ÌåÑéÊÇÓû§×î»ù±¾Ò²ÊÇ×îÖ÷ÒªµÄËßÇó¡£ÊÓÆµÎļþÌåÁ¿ÖØ´ó¡¢ÍøÂç´«Êä²»Îȹ̡¢·þÎñÆ÷²¢·¢Ñ¹Á¦´óµÈÎÊÌ⣬¾³£ÈÃÓû§ÔÚÒªº¦Ê±¿ÌÔâÓö¿¨¶Ù¡¢¼ÓÔØ»ºÂýµÄÞÏÞΣ¬ÉõÖÁ´íʧ¾«²Ê˲¼ä¡£
Õâʱ£¬Ò»¸öǿʢµÄÊÓÆµÁ÷ýÌå½â¾ö¼Æ»®¾ÍÏÔµÃÓÈΪÖ÷Òª¡£¶øNginx£¬Õâ¿îÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÔçÒÑÓâÔ½ÁËÆä¹Å°å¶¨Î»£¬³É?Ϊ¹¹½¨¸ßЧ¡¢ÎȹÌÊÓÆµÁ÷ýÌå·þÎñµÄÒªº¦ÒýÇæ¡£
WebRTCÄܹ»ÊµÏÖä¯ÀÀÆ÷µ½ä¯ÀÀÆ÷Ö®¼äµÄµã¶ÔµãʵʱÒôÊÓÆµÍ¨Ñ¶£¬¶øNginx¿ÉÒÔ×÷ΪÐÅÁî·þÎñÆ÷»òýÌå·þÎñÆ÷£¬ÔÚWebRTCÓ¦ÓÃÖÐÊÎÑÝÒªº¦½ÇÉ«¡£ÕâΪ¹¹½¨µÍÑÓ³Ù¡¢»¥¶¯ÐÔÇ¿µÄÖ±²¥»¥¶¯¡¢ÔÚÏ߾ۻᡢԶ³ÌÐ×÷µÈÓ¦ÓÃÌṩÁËǿʢµÄÊÖÒÕÖ§³Ö¡£´ó¹æÄ£²¢·¢Ö±²¥Á÷´¦Öóͷ££ºÃæÁÙ´óÐÍÖ±²¥?Ô˶¯¿ÉÄÜ´øÀ´µÄº£Á¿Óû§²¢·¢ÇëÇó£¬NginxµÄ¸ß²¢·¢´¦?ÀíÄÜÁ¦µÃÒÔ³ä·ÖÑéÕ¹¡£
ͨ¹ý¼¯Èº°²ÅÅ¡¢¸ºÔØÆ½ºâÒÔ¼°¸ßЧµÄÅþÁ¬ÊÜÀí£¬NginxÄܹ»Îȹ̵ش¦Öóͷ£À´×ÔÊý°ÙÍòÓû§µÄÖ±²¥ÇëÇó£¬È·±£Ö±²¥Á÷µÄÎȹÌÊä³ö£¬°ü¹Üÿһ´Î¡°100%ÊÓÆµ²¥·Å¡±µÄÁ÷ͨ¾ÙÐС£
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µÄ¾«Ë裬Äú½«Äܹ»¹¹½¨³öÎȹ̡¢¸ßЧ¡¢¿ÉÀ©Õ¹µÄÊÓÆµÁ÷ýÌåÆ½Ì¨£¬ÎªÓû§ÌṩÎÞÓëÂױȵÄԢĿÌåÑ飬տÕý½âËøÄúµÄÁ÷ýÌåмÍÔª¡£
±ßÑØÅÌËãµÄ¿ÉÄÜÐÔ£ºËæ×Å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µÄ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×÷Ϊһ¿î¸ßÐÔÄܵÄWeb·þÎñÆ÷¡¢·´Ïò´úÀíºÍ¸ºÔØÆ½ºâÆ÷£¬ÒÔÆä׿ԽµÄÐÔÄÜ¡¢ÎÞаµÄÉèÖúÍǿʢ?µÄ¹¦Ð§£¬³ÉΪÁ˹¹½¨¸ßЧÊÓÆµ´«ÊäϵͳµÄ½¹µãÀûÆ÷¡£Ëü²»µ«Äܹ»´¦Öóͷ£´ó×ڵIJ¢·¢ÅþÁ¬£¬¸üÄÜÔÚÊÓÆµÁ÷ýÌåµÄ´«ÊäÀú³ÌÖÐʩչÖÁ¹ØÖ÷ÒªµÄ?×÷Óá£
±¾ÎĽ«ÉîÈë̽ÌÖNginxÔõÑùʵÏÖ¡°100%ÊÓÆµÐÔÄÜ¡±£¬´Ó»ù´¡ÉèÖõ½?¸ß¼¶ÓÅ»¯£¬È«·½Î»ÆÊÎöÆäÔÚÊÓÆµ·þÎñÖеÄÒªº¦×÷Óã¬×ÊÖúÄú½âËøÁ÷ͨÊӽ磬³¹µ×Àë±ð¿¨¶Ù°ÃÄÕ¡£
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¿ÉÒÔÖ§³Ö¸ü¶àµÄ²¢·¢ÅþÁ¬£¬¹ØÓÚÐèҪͬʱ·þÎñ´ó×ÚÓû§µÄÊÓÆµÆ½Ì¨À´Ëµ£¬ÕâÎÞÒÉÊǽµµÍÔËÓª±¾Ç®¡¢ÌáÉý·þÎñÄÜÁ¦µÄÒªº¦¡£
ÎÞаµÄÉèÖúÍÄ£¿é»¯Éè¼Æ£ºNginxÓµÓм«ÆäÎÞаµÄÉèÖÃÓï·¨£¬²¢ÇÒÖ§³Ö?¸»ºñµÄÄ£¿é»¯À©Õ¹¡£ÕâʹµÃÓû§¿ÉÒÔÆ¾Ö¤ÏêϸµÄÓªÒµÐèÇ󣬶¨ÖÆ»¯µØÉèÖÃNginx¡£¹ØÓÚÊÓÆµÁ÷ýÌ壬¿ÉÒÔͨ¹ýÖÖÖÖÄ£¿é£¨ÈçRTMPÄ£¿é¡¢HLS/DASHÄ£¿é¡¢HTTP/2Ä£¿éµÈ£©À´Ö§³Ö²î±ðµÄÁ÷ýÌåÐæÅºÍ´«Êä·½·¨£¬´Ó¶øÖª×ãµã²¥¡¢Ö±²¥¡¢CDN·Ö·¢µÈ¶àÑù»¯µÄÓ¦Óó¡?¾°¡£
ΪÁËÓ¦¶ÔÍ»·¢Á÷Á¿ºÍ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¡£
worker_connections£ºÆ¾Ö¤·þÎñÆ÷µÄÄÚ´æºÍCPU×ÊÔ´£¬ºÏÀíÉèÖÃworker_connections¡£Ò»Ñùƽ³£À´Ëµ£¬Ò»¸öworkerÀú³Ì¿ÉÒÔ´¦Öóͷ£Êýǧ¸öÅþÁ¬¡£client_body_buffer_sizeÓëproxy_buffer_size£º¹ØÓÚ´óÎļþ´«Ê䣬ÐèÒªÊʵ±Ôö´óÕâЩ»º³åÇø¾Þϸ£¬ÒÔïÔ̶ԴÅÅÌµÄÆµÈÔ»á¼û¡£
sendfileÓëaio£ºÎñ±Ø¿ªÆôsendfileon;£¬²¢Ë¼Á¿ÔÚÌØ¶¨³¡?¾°ÏÂÆôÓÃaio(ÐèÒªNginx±àÒëʱ֧³Öngx_http_v2_module)£¬ÒÔ½øÒ»²½ÌáÉýI/OЧÂÊ¡£
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µÈ£©¡£
ÈôÊDZ£´æ£¬ÔòÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬ËÙÂʼ«¿ì¡£ÈôÊÇ»º´æÖв»´æ?ÔÚ£¬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¿ìËÙÏìÓ¦£¬¼õÇáºó¶ËѹÁ¦¡£
ÔÙÕߣ¬¶ÔÏÖ´ú?Á÷ýÌåÐÒéµÄÖ§³ÖʹµÃNginxÄܹ»ÇáËÉÓ¦¶ÔHLS£¨HTTPLiveStreaming£©ºÍDASH£¨DynamicAdaptiveStreamingoverHTTP£©µÈÖ÷Á÷ÊÓÆµÁ÷ýÌåÐÒé¡£ÕâЩÐÒéÄܹ»Æ¾Ö¤Óû§µÄÍøÂç״̬¶¯Ì¬µ÷½âÊÓÆµÂëÂÊ£¬ÊµÏÖ×Ô˳ӦµÄ?Á÷ͨ?²¥·Å¡£
NginxÄܹ»¸ßЧµØ´¦?ÀíÕâЩÐÒ鱬·¢µÄº£Á¿Ð¡ÎļþÇëÇó£¨ÀýÈçHLSµÄts·ÖƬ£©£¬²¢¶ÔÆä¾ÙÐÐÓÅ»¯£¬È·±£ÊÓÆµÁ÷µÄÒ»Á¬ÐÔºÍÎȹÌÐÔ¡£
NginxµÄ¸ß¶È¿ÉÀ©Õ¹ÐÔºÍÄ£¿é»¯Éè¼ÆÒ²ÎªÆäÊÓÆµÓÅ»¯ÌṩÁËÎÞÏÞ¿ÉÄÜ¡£Í¨¹ý¸»ºñµÄµÚÈý·½Ä£¿é£¬Nginx¿ÉÒÔ¼¯³ÉÖÖÖָ߼¶¹¦Ð§£¬ÈçÊÓÆµ×ªÂë¡¢ÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©¼ÓËÙ¡¢Çå¾²·À»¤µÈ£¬¹¹½¨Ò»¸ö¹¦Ð§ÖÜÈ«¡¢ÐÔÄÜ׿ԽµÄÊÓÆµÁ÷ýÌå½â¾ö¼Æ»®¡£
NginxÊÓÆµÓÅ»¯½¹µã²ß?ÂÔÒ»£º»º´æµÄÒÕÊõ¡ª¡ªÈÃÊÓÆµ¡°·É¡±ÆðÀ´
ҪʵÏÖ100%Á÷ͨµÄÊÓÆµÌåÑ飬»º´æÊÇÈÆ²»¿ªµÄ»ùʯ¡£NginxµÄ»º´æ»úÖÆÖ÷ÒªÌåÏÖÔÚÒÔϼ¸¸ö·½Ã棺
HTTPÏìÓ¦»º´æ£¨ProxyCache£©£ºÕâÊÇNginx×î³£ÓõĻº´æ·½·¨£¬ÓÃÓÚ»º´æºó¶Ë·þÎñÆ÷·µ»ØµÄHTTPÏìÓ¦¡£¹ØÓڵ㲥ÊÓÆµ£¬¿ÉÒÔ½«ÊÓÆµÎļþ×Ô¼º»òÆäË÷ÒýÎļþ»º´æ?µ½Nginx·þÎñÆ÷ÉÏ¡£µ±Óû§ÇëÇóÊÓÆµÊ±£¬Nginx»áÊ×Ïȼì²é»º´æÖÐÊÇ·ñ±£´æ¸ÃÊÓÆµ¡£
ËäÈ»ÊÓÆµ×Ô¼ºÄÑÒÔѹËõ£¬µ«ÊÓÆµ²¥·ÅÁÐ±í£¨.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ѹËõ¡£
ÔÚÊý×Öʱ´úÀ˳±Ï£¬ÊÓÆµÄÚÈÝÒÑÈ»³ÉΪÐÅÏ¢Èö²¥¡¢ÓéÀÖÏûDzÒÔÖÂÉÌÒµÓªÏúµÄ½¹µãÔØÌå¡£´Ó¶ÌÊÓÆµµÄË鯬»¯ÓéÀÖµ½³¤ÊÓÆµµÄÉî¶ÈÄÚÈÝ£¬ÔÙµ½Ö±²¥µÄʵʱ»¥¶¯£¬ÊÓÆµµÄÆÕ¼°Ë®Æ½ºÍÏûºÄÐèÇó·ºÆð±¬Õ¨Ê½ÔöÌí¡£Åãͬ¶øÀ´µÄÊǶÔÁ÷ýÌå·þÎñÆ÷ÐÔÄܵÄÑÏËàÄ¥Á·¡£Óû§ÆÚÍûµÄÊÇ¡°Ã뿪¡±¼´²¥µÄÁ÷ͨÌåÑ飬һµ©¼ÓÔØ»ºÂý¡¢»Ã濨¶Ù¡¢ÉõÖÁ²¥·ÅÖÐÖ¹£¬Óû§µÄÄÍÐĽ«Ñ¸ËÙÏûÄ¥£¬Ö±½ÓÓ°ÏìÓû§Áô´æºÍÉÌÒµ¼ÛÖµ¡£
¹Å°åµÄWeb·þÎñÆ÷ÔÚ´¦Öóͷ£º£Á¿ÊÓÆµÇëÇóʱ£¬ÍùÍùÁ¦ÓÐδ´þ¡£´ø¿íÆ¿¾±¡¢·þÎñÆ÷¸ºÔعý¸ß¡¢´«ÊäЧÂʵÍϵÈÎÊÌâ²ã³ö²»Çµ¼ÖÂÓû§ÌåÑé´ó´òÕÛ¿Û¡£Õâʱ£¬Ò»¸öǿʢ?¶øÎÞаµÄ½â¾ö¼Æ»®¾ÍÏÔµÃÓÈΪҪº¦¡£¶øNginx£¬×÷Ϊҵ½çÁìÏȵĸßÐÔÄÜWeb·þÎñÆ÷¡¢·´Ïò´úÀíºÍ¸ºÔØÆ½ºâÆ÷£¬ÒÀ¸½Æä׿ԽµÄÊÂÎñÇý¶¯¼Ü¹¹¡¢ÇáÁ¿¼¶µÄ?Éè¼ÆÒÔ¼°¸»ºñµÄ¹¦Ð§¼¯£¬³ÉΪÁËÓÅ»¯ÊÓÆµÁ÷ýÌå´«ÊäµÄ¡°ÉñÆ÷¡±¡£
±¾?ÎĽ«ÉîÈë̽ÌÖÔõÑùʹÓÃNginxʵÏÖ¡°Nginx100%ÊÓÆµÓÅ»¯¡±£¬´Ó»ù´¡ÉϽâ¾öÊÓÆµ²¥·ÅµÄÍ´µã£¬ÊÍ·ÅÄãµÄÁ÷ýÌåDZÁ¦¡£ÎÒÃǽ«Î§ÈÆNginxÔÚÊÓÆµ´«ÊäÖеĽ¹µãÓÅÊÆ£¬ÍŽáÏÖʵӦÓó¡¾°£¬ÎªÄãÕ¹ÏÖһϵÁÐÐÐÖ®ÓÐÓõÄÓÅ»¯Õ½ÂÔ£¬ÈÃÄãÇáËɼÝÔ¦¸ß²¢·¢µÄÊÓÆµÁ÷Á¿£¬ÎªÓû§Ìṩب¹ÅδÓеÄÁ÷ͨԢĿÌåÑé¡£
µÚÒ»Õ£ºNginxµÄÊÓÆµÓÅ»¯»ùʯ£ºÃ÷È·½¹µãÓë»ù´¡ÉèÖÃ
ҪʵÏÖNginxµÄÊÓÆµÓÅ»¯£¬Ê×ÏÈÐèÒª¶ÔÆä½¹µãÄÜÁ¦ºÍ»ù´¡ÉèÖÃÓÐÉî¿ÌµÄÃ÷È·¡£NginxÖ®ÒÔÊÇÄÜÔڸ߲¢·¢³¡¾°ÏÂÌåÏÖ¾«²Ê£¬Àë²»¿ªÆäÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕµÄI/OÄ£×Ó¡£ÕâÒâζ×ÅNginx¿ÉÒÔÓýÏÉÙµÄÀú³ÌºÍÏ̴߳¦Öóͷ£´ó×ڵIJ¢·¢ÅþÁ¬£¬¼«´óµØÌá¸ßÁË×ÊԴʹÓÃÂʺÍÏìÓ¦ËÙÂÊ£¬Õâ¹ØÓÚÐèÒªÒ»Á¬¡¢Îȹ̴«Êä´ó×ÚÊý¾ÝµÄÊÓÆµÁ÷À´ËµÖÁ¹ØÖ÷Òª¡£
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;µÈÉèÖÿÉÒÔÆ¾Ö¤ÏÖÕæÏàÐξÙÐе÷½â¡£
NginxµÄÁíÒ»¸öÏÔÖøÌØµãÊÇÆä¸ß¶ÈÄ£¿é»¯µÄÉè¼Æ¡£ÕâÒâζ×ÅÄã¿ÉÒÔÆ¾Ö¤×Ô¼ºµÄÏêϸÐèÇó£¬ÎÞаµØÑ¡ÔñºÍ¼ÓÔØÖÖÖÖ¹¦Ð§Ä£¿é£¬ÉõÖÁ¿ÉÒÔ×ÔÐпª·¢¶¨ÖÆÄ£¿é¡£
RTMPÄ£¿é£º¹ØÓÚÁ÷ýÌåÖ±²¥¶øÑÔ£¬RTMP(Real-TimeMessagingProtocol)ÊÇÒ»¸öºÜÊÇÖ÷ÒªµÄÐÒ顣ͨ¹ý¼ÓÔØnginx-rtmp-module£¬Nginx¿ÉÒÔÖ±½Ó×÷ΪRTMP·þÎñÆ÷£¬ÎüÊÕÖ±²¥ÍÆÁ÷£¬²¢½«Ö±²¥Á÷·Ö·¢¸øÔ¢Ä¿Õߣ¬ÊµÏÖ¸ßЧµÄÖ±²¥·þÎñ¡£
HLS/DASHÖ§³Ö£ºHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)ÊÇÏÖÔÚÖ÷Á÷µÄÊÓÆµµã²¥ºÍÖ±²¥½â¾ö¼Æ»®£¬ËüÃǽ«ÊÓÆµÖ§½â³ÉСÎļþ£¬²¢Í¨¹ýHTTP¾ÙÐд«Ê䣬±ãÓÚCDN·Ö·¢ºÍ×Ô˳ӦÂëÂʲ¥·Å¡£
Nginx¿ÉÒÔͨ¹ýÅäºÏÏà¹ØµÄÄ£¿é»ò¹¤¾ß£¬ÇáËÉʵÏÖHLS/DASHÊÓÆµÁ÷µÄתÂë¡¢·â×°ºÍ·Ö·¢¡£µÚÈý·½Ä£¿é£ºÉçÇø»¹ÌṩÁË´ó×ÚÓÅÒìµÄµÚÈý·½Ä£¿é£¬ÀýÈçÓÃÓÚÊÓÆµ×ªÂë¡¢ÄÚÈݼÓÃÜ¡¢DRM(Êý×Ö°æÈ¨¹ÜÀí)¡¢¹ã¸æ²åÈëµÈ¹¦Ð§µÄÄ£¿é£¬ÕâЩģ¿é¿ÉÒÔ¼«´óµØÀ©Õ¹NginxµÄÄÜÁ¦£¬Öª×ã¸üÖØ´óµÄÊÓÆµÓªÒµÐèÇó¡£
ÓÅ»¯ÊÓÆµ²¥·Å£¬²¢·ÇÒ»õí¶ø¾Í£¬¶øÊÇÒ»¸öÑÐò½¥½øµÄÀú³Ì¡£ÎÒÃÇÏÈ´ÓNginxµÄ»ù´¡?ÉèÖÃÈëÊÖ£¬´òºÃ¼áʵµÄ»ù´¡¡£
ÆôÓÃKeep-Alive£º¼á³Ö¿Í»§¶ËÓë·þÎñÆ÷Ö®¼äµÄ³¤ÅþÁ¬£¬¿ÉÒÔÏÔÖøïÔÌÿ´Î?ÇëÇóµÄ½¨ÉèºÍ¹Ø±ÕTCPÅþÁ¬µÄ¿ªÏú£¬¹ØÓÚÒ»Á¬µÄÊÓÆµÈö²¥ÊäÖÁ¹ØÖ÷Òª¡£ÔÚhttp¿éÖÐÉèÖÃkeepalive_timeout60;(¿ÉÒÔÆ¾Ö¤ÏÖÕæÏàÐε÷½âÊýÖµ)£¬²¢È·±£¿Í»§¶ËÒ²Ö§³ÖKeep-Alive¡£
µ÷½âWorkerÀú³ÌºÍÅþÁ¬Êý£ººÏÀíÉèÖÃworker_processesºÍworker_connectionsÊÇʩչNginxÐÔÄܵÄÒªº¦¡£
worker_processes£º½¨ÒéÉèÖÃΪCPU½¹µãÊý£¬»òÕßÂÔ¸ßÓÚCPU½¹µãÊý£¬ÒÔ³ä·ÖʹÓöàºË´¦Öóͷ£Æ÷µÄÓÅÊÆ¡£worker_connections£º¸ÃÖµ¾öÒéÁËÿ¸öworkerÀú³Ì¿ÉÒÔͬʱ´¦Öóͷ£µÄ×î´óÅþÁ¬Êý¡£ÐèҪƾ֤·þÎñÆ÷µÄÄÚ´æºÍÏÖʵ²¢·¢ÐèÇóÀ´É趨£¬Í¨³£ÉèΪһ¸ö½Ï´óµÄÖµ£¬ÀýÈç4096»ò8192¡£
¹ØÓÚHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)µÈ×Ô˳Ӧ±ÈÌØÂÊÁ÷ýÌåÐÒ飬NginxͬÑùÌåÏÖ¾«²Ê¡£Æä¸ßЧµÄÎļþ´«ÊäÄÜÁ¦¿ÉÒÔÈ·±£.ts»ò.m4sµÈýÌå·ÖƬÄܹ»¿ìËÙ¡¢Îȹ̵ش«Ê䏸Óû§¡£
ÅäºÏ»º´æ£¬×ÝÈ»ÊÇԢĿÈÈÃÅÊÓÆµ£¬Ò²Äܰü¹Ü¼«¸ßµÄ²¢·¢³ÐÔØÄÜÁ¦¡£
ͨ¹ýÒÔÉÏÕâЩÉèÖÃÕ½ÂÔµÄ?×éºÏÓ¦Óã¬Äú¿ÉÒÔ³ä·ÖÍÚ¾òNginxµÄDZÁ¦£¬´òÔìÒ»¸öÐÔÄÜ׿Խ¡¢ÌåÑ鼫ÖµÄÊÓÆµ·þÎñƽ̨¡£Àë±ð¿¨¶Ù£¬Óµ±§Á÷ͨ£¬ÈÃÄúµÄÓû§ÔÚԢĿÊÓÆµÊ±£¬ÏíÊܵ½Ø¨¹ÅδÓеÄÌÕ×íʽÌåÑ飡
Nginx×÷ΪCDN±ßÑØ½Úµã£ºÔÚÕâÖּܹ¹Ï£¬Nginx·þÎñÆ÷°²ÅÅÔÚÈ«Çò¸÷µØµÄCDN½ÚµãÉÏ¡£µ±Óû§ÇëÇóÊÓÆµÊ±£¬ÇëÇó»á±»Â·Óɵ½×î½üµÄCDN½Úµã¡£NginxÔÚÕâЩ½ÚµãÉϾÙÐлº´æ£¬Óû§¿ÉÒÔÖ±½Ó´ÓÀë×Ô¼º×î½üµÄ½Úµã»ñÈ¡ÊÓÆµ£¬´ó´ó½µµÍÁËÑÓ³Ù¡£Nginx×÷ΪCDN»ØÔ´·þÎñÆ÷£ºÈôÊÇÄãÏ£ÍûÍêÈ«ÕÆ¿ØÊÓÆµÄÚÈݵķַ¢£¬¿ÉÒÔ½«Nginx°²ÅÅÔÚÔ´Õ¾£¬²¢ÉèÖÃCDN´ÓÄãµÄNginx·þÎñÆ÷ÀÈ¡ÄÚÈÝ¡£
NginxµÄ¸ßÐÔÄÜ»º´æ»úÖÆÄܹ»ÓÐÓûº½âԴվѹÁ¦£¬È·±£CDN½ÚµãÄܹ»¿ìËÙ»ñÈ¡µ½ÄÚÈÝ¡£
¹ØÓÚ´óÐÍÊÓÆµÆ½Ì¨¶øÑÔ£¬µ¥Ì¨Nginx·þÎñÆ÷ÄÑÒÔÔâÊÜÖØ´óµÄÁ÷Á¿¡£´Ëʱ£¬NginxµÄ¸ºÔØÆ½ºâ¹¦Ð§¾ÍÏÔµÃÓÈΪҪº¦¡£
¸ºÔØÆ½ºâÕ½ÂÔ£ºNginxÖ§³Ö¶àÖÖ¸ºÔØÆ½ºâËã·¨£¬ÈçÂÖѯ(round-robin)¡¢×îÉÙÅþÁ¬(leastconn)¡¢IP¹þÏ£(iphash)µÈ¡£¹ØÓÚÊÓÆµ·þÎñ£¬least_connͨ³£ÊǸüÓŵÄÑ¡Ôñ£¬ÓÉÓÚËüÄܽ«ÇëÇó·ÖÅɸøÄ¿½ñÅþÁ¬Êý×îÉٵĺó¶Ë·þÎñÆ÷£¬¸üÔȳƵØÊèÉ¢¸ºÔØ¡£
¿µ½¡¼ì²é£ºNginx¿ÉÒÔÉèÖÃupstreamÄ£¿éµÄhealth_checkÖ¸Áͨ³£ÐèÒªµÚÈý·½Ä£¿éÖ§³Ö£¬Èçnginx-upstream-fair»ònginx-plus£©£¬°´ÆÚ¼ì²âºó¶ËÊÓÆµ·þÎñÆ÷µÄ¿µ½¡×´Ì¬¡£µ±Ä³¸ö·þÎñÆ÷·ºÆð¹ÊÕÏʱ£¬Nginx»á×Ô¶¯½«Æä´Ó¿ÉÓÃÁбíÖÐÒÆ³ý£¬×èÖ¹½«Á÷Á¿·¢Ë͵½¹ÊÕÏ·þÎñÆ÷£¬°ü¹ÜÁË·þÎñµÄ¿ÉÓÃÐÔ¡£
sendfileon;£ºÆôÓÃsendfileϵͳŲÓá£ÕâÊÇÒ»¸öLinuxÄں˹¦Ð§£¬¿ÉÒÔÖ±½Ó½«Îļþ´ÓÒ»¸öÎļþÐÎò·û¸´ÖƵ½?ÁíÒ»¸öÎļþÐÎò·û£¬ÈƹýÁËÓû§¿Õ¼ä£¬´ó´ó?Ìá¸ßÁËÎļþ´«ÊäЧÂÊ£¬ÓÈÆäÊʺϴóÎļþµÄ´«Êä¡£tcp_nopushon;£ºµ±·¢ËÍÏìӦͷʱ£¬ÈôÊÇ¿ÉÄÜ£¬·¢ËÍËùÓÐÆÚ´ý·¢Ë͵ÄÊý¾Ý£¬¶ø²»ÊÇÆÚ´ý¸ü¶àµÄÊý¾Ý¡£
tcp_nodelayon;£º½ûÓÃNagleËã·¨£¬×ÝÈ»ÔÚ·¢ËÍÉÙÁ¿Êý¾ÝʱҲÁ¬Ã¦·¢ËÍ£¬ïÔÌÑÓ³Ù¡£
ÕâÈý¸öÑ¡ÏîÍŽáʹÓ㬿ÉÒÔÏÔÖøÌáÉýNginxÏò¿Í»§¶Ë·¢ËÍÊÓÆµÊý¾ÝµÄËÙÂʺÍЧÂÊ¡£
bufferºÍcache£ºïÔÌI/OѹÁ¦£¬¼ÓËÙ»á¼û
NginxÌṩÁ˶àÖÖ»º´æ»úÖÆ£¬¿ÉÒÔÓÐÓÃïÔ̶Ժó¶Ë´æ´¢µÄÖ±½Ó»á¼û£¬ÌáÉýÏìÓ¦ËÙÂÊ¡£
proxybuffersizeºÍproxy_buffers£ºµ±Nginx×÷Ϊ·´Ïò´úÀí´¦Öóͷ£ÊÓÆµÁ÷ʱ£¬ÕâЩ²ÎÊý¾öÒéÁËÓÃÓÚ»º³å´úÀíÏìÓ¦µÄ»º³åÇø¾ÞϸºÍÊýÄ¿¡£ºÏÀíÉèÖÿÉÒÔïÔÌ´úÀíµÄI/O²Ù×÷£¬ÌáÉý´¦Öóͷ£ËÙÂÊ¡£openfilecacheºÍopenfilecache_valid£º»º´æ·¿ªµÄÎļþÐÎò·ûºÍÎļþÔªÊý¾Ý¡£
2.5ÐÔÄÜ¼à¿ØÓëµ÷ÓÅ£ºÒ»Á¬ÓÅ»¯£¬×·Çó¼«Ö¡°100%ÊÓÆµÓÅ»¯¡±²¢·ÇÒ»õí¶ø¾Í£¬¶øÊÇÐèÒªÒ»Á¬µÄ¼à¿ØºÍµ÷ÓÅ¡£
Nginx»á¼ûÈÕÖ¾Óë¹ýʧÈÕÖ¾:ÆÊÎöÈÕÖ¾¿ÉÒÔ·¢Ã÷DZÔÚµÄÎÊÌ⣬Èç¸ßÑÓ³ÙÇëÇó¡¢¹ýʧÏìÓ¦µÈ¡£Nginx״̬¼à¿Ø:ʹÓÃngx_http_stub_status_module»òµÚÈý·½¼à¿Ø¹¤¾ß£¨ÈçPrometheus+Grafana£©À´ÊµÊ±¼à¿ØNginxµÄÅþÁ¬Êý¡¢ÇëÇóÊý¡¢»º´æÖÀÖÐÂʵÈÒªº¦Ö¸±ê¡£
ϵͳ¼¶¼à¿Ø:ÍŽá·þÎñÆ÷µÄCPU¡¢ÄÚ´æ¡¢´ÅÅÌI/O¡¢ÍøÂçÁ÷Á¿µÈϵͳ¼¶Ö¸±ê£¬ÖÜÈ«ÆÀ¹ÀNginxµÄÔËÐÐ״̬¡£²ÎÊýµ÷ÓÅ:ƾ֤¼à¿ØÊý¾Ý£¬¶ÔNginxµÄworkerÀú³ÌÊý¡¢ÅþÁ¬Êý¡¢»º³åÇø¾Þϸ¡¢»º´æÉèÖõȲÎÊý¾ÙÐÐϸÄ廯µ÷½â£¬ÒÔµÖ´ï×î¼ÑÐÔÄÜ¡£
ÀýÈ磬µ÷½âworker_connectionsÀ´Æ¥Åä·þÎñÆ÷µÄCPU½¹µãÊýºÍÏÖʵ¸ºÔØ¡£
»ØÔ´·þÎñÆ÷£ºÈÏÕæ´æ´¢ÔʼÊÓÆµÎļþ£¬²¢½«ÊÓÆµÄÚÈÝ·Ö·¢¸øCDN½Úµã¡£±ßÑØ½Úµã£¨ÈôÊÇNginxÖ±½Ó°²ÅÅÔÚ±ßÑØ£©£ºÈÏÕæÖ±½ÓÏòÓû§ÌṩÊÓÆµ·þÎñ£¬²¢¶ÔÊÓÆµÄÚÈݾÙÐлº´æ¡£¸ºÔØÆ½ºâ£ºNginx¿ÉÒÔ×÷Ϊ¸ºÔØÆ½ºâÆ÷£¬½«CDN½ÚµãµÄ»ØÔ´ÇëÇó·Ö·¢µ½ºó¶ËµÄ¶à¸öÊÓÆµ´æ´¢·þÎñÆ÷¡£
Ã÷È·²¢ÉèÖÃÁ÷ýÌåÐÒ飺ÊÓÆµ´«Êä²»µ«½öÊǼòÆÓ?µÄÎļþÏÂÔØ£¬¸ü¶àʱ¼äÐèÒªÓõ½×¨ÃŵÄÁ÷ýÌåÐÒ飬ÈçHLS(HTTPLiveStreaming)ºÍDASH(DynamicAdaptiveStreamingoverHTTP)¡£ÕâЩÐÒéÄܹ»½«ÊÓÆµÖ§½â³ÉСƬ¶Ï£¬²¢Æ¾Ö¤Óû§µÄÍøÂç´ø¿í¶¯Ì¬µ÷½â²¥·ÅµÄÊÓÆµÂëÂÊ£¬´Ó¶øÊµÏÖ¸üÁ÷ͨµÄ²¥·ÅÌåÑé¡£
HLS£ºNginx¿ÉÒÔͨ¹ýngx_http_flv_moduleµÈÄ£¿é£¬ÅäºÏffmpegµÈ¹¤¾ß£¬½«ÔʼÊÓÆµ×ª»»ÎªHLSÃûÌã¨.m3u8²¥·ÅÁбíºÍ.tsÊÓÆµÆ¬¶Ï£©¡£NginxÖ±½ÓÌṩÕâЩÎļþ£¬¿Í»§¶Ëƾ֤.m3u8Îļþ¶¯Ì¬ÇëÇó.tsƬ¶Ï¡£
¶à·¸´ÓÃʹµÃ?¿Í»§¶Ë¿ÉÒÔÔÚÒ»¸öTCPÅþÁ¬Éϲ¢ÐÐÇëÇó¶à¸öÊÓÆµ×ÊÔ´£¬±Ü?ÃâÁ˹ŰåHTTP/1.1ÖжàÅþÁ¬´øÀ´µÄ¿ªÏú£»Í·²¿Ñ¹ËõÔò´ó´óïÔÌÁË´«ÊäµÄ´ø¿íÕ¼Ó㬹ØÓÚ°ü¹ÜÊÓÆµ²¥·ÅµÄÒ»Á¬ÐÔÖÁ¹ØÖ÷Òª¡£Ç°Õ°ÐԽṹ£ºHTTP/3µÄÎȹÌÖ§³Ö£ºNginxÆð¾¢Óµ±§Î´À´£¬¶Ô»ùÓÚQUICÐÒéµÄHTTP/3ÌṩÁËÎȹÌÇÒ¸ßЧµÄÖ§³Ö¡£
HTTP/3½â¾öÁËTCPÔÚÍøÂçÓµ¶ÂʱÈÝÒ×·ºÆðµÄ¡°¶ÓÍ·ÛÕ±Õ¡±ÎÊÌ⣬×ÝÈ»ÔÚ¶ª°üÂʽϸߵÄÍøÂçÇéÐÎÏ£¬Ò²Äܰü¹ÜÊÓÆµÁ÷µÄ´«Êä²»ÖÐÖ¹£¬ÊµÏÖÕæÕýµÄ¡°100%²¥·Å¡±¡£QUICÐÒéµÄÒýÈ룬ͨ¹ýUDP³ÐÔØ£¬ÊµÏÖÁ˸ü¿ìµÄÅþÁ¬½¨ÉèËÙÂʺ͸üÓŵÄÓµÈû¿ØÖÆ»úÖÆ£¬¹ØÓÚ×·Çó¼«ÖµÍÑÓ³ÙµÄÖ±²¥³¡¾°£¬ÒÔ¼°ÔÚÒÆ¶¯ÍøÂçÇéÐÎϲ¥·ÅÊÓÆµ£¬¶¼½«´øÀ´Ç㸲ÐÔµÄÌåÑéÌáÉý¡£
ÎÒÃÇ¿ÉÒÔÔ¤¼û£¬Ëæ×ÅHTTP/3µÄÆÕ¼°£¬Nginx½«½øÒ»²½Àο¿ÆäÔÚÁ÷ýÌå´«ÊäÁìÓòµÄ?ÁìÏÈְλ¡£
NginxÖ®ÒÔÊÇÄܹ»ÔÚWeb·þÎñÆ÷ÁìÓòÍÑÓ±¶ø³ö£¬ºÜºéÁ÷ƽÉϹ鹦ÓÚÆäÊÂÎñÇý¶¯¡¢Òì²½·ÇÛձյļܹ¹£¬ÕâʹµÃËüÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ´¦Öóͷ£º£Á¿²¢·¢ÅþÁ¬¡£ÔÚÊÓÆµ´«ÊäÕâÒ»¶Ô´ø¿íºÍÅþÁ¬ÊýÒªÇ󼫸ߵij¡¾°Ï£¬NginxµÄÕâÒ»ÌØÕ÷ÓÈΪÃû¹ó¡£¶ø×îа汾µÄNginx£¬¸üÊǽ«ÕâÖÖÓÅÊÆÊ©Õ¹µ½Á˼«Ö£¬Í¨¹ýһϵÁÐÉî¶ÈÓÅ»¯ºÍй¦Ð§µÄÒýÈ룬ʵÏÖÁ˶ÔÊÓÆµÁ÷Á¿µÄ¡°100%¡±Õƿء£
1.½¹µã¼Ü¹¹µÄÒ»Á¬Ñݽø£ºÇáÁ¿¼¶Óë¸ßÍÌÍÂÁ¿µÄÍêÉÆÈÚºÏ
NginxµÄ½¹µã¾ºÕùÁ¦ÔÚÓÚÆä¾«Çɵļܹ¹Éè¼Æ¡£×îа汾ÔÚ¼á³Ö¡°ÇáÁ¿¼¶¡±ÕâÒ»ÓÅÁ¼¹Å°åµÄ½øÒ»²½?ÌáÉýÁËÆäÔڸ߲¢·¢³¡¾°ÏµÄÍÌÍÂÁ¿¡£Í¨¹ý¶ÔÊÂÎñÑ»·¡¢ÄÚ´æ¹ÜÀíºÍÀú³ÌÄ£×ÓµÄϸÄåµ÷ÓÅ£¬NginxÄܹ»¸üÓÐÓõØÊ¹ÓÃCPUºÍÄÚ´æ×ÊÔ´£¬½«·þÎñÆ÷µÄÿһ·ÝÄÜÁ¦¶¼Í¶Èëµ½ÊÓÆµÊý¾ÝµÄ´«ÊäÖС£
ÕâÒâζ×Å£¬ÎÞÂÛÄúµÄ?ÊÓÆµ·þÎñÊÇÃæÁÙÍ»·¢µÄÖ±²¥á¯Á룬Õվɺ£Á¿µÄµã²¥ÇëÇó£¬Nginx¶¼ÄÜÒÔÎȹ̵ÄÐÔÄÜ£¬½«¿¨¶ÙºÍÑÓ³Ù½µÖÁ×îµÍ¡£¹ØÓÚÊÓÆµÄÚÈÝ·Ö·¢ÍøÂ磨CDN£©¶øÑÔ£¬ÕâÖÖÄÜÁ¦µÄÌáÉýÖ±½Óת»¯ÎªÓû§ÌåÑéµÄ±¼ÌÚ£¬Äܹ»ÎüÒý²¢Áôס¸ü¶à¶ÔÁ÷ͨ¶ÈÃô¸ÐµÄÓû§¡£
2.HTTP/2ºÍHTTP/3µÄÔÉúÖ§³Ö£º¼ÓËÙÊÓÆµ¼ÓÔØµÄÉñÃØÎäÆ÷
¸ßЧµÄ»º´æ»úÖÆ£ºNginxÓµÓÐǿʢµÄ»º´æÄÜÁ¦£¬¿ÉÒÔ»º´æ¾²Ì¬Îļþ£¨°üÀ¨ÊÓÆµÆ¬¶Ï£©ÒÔ¼°¶¯Ì¬ÌìÉúµÄÏìÓ¦¡£Í¨¹ý½«ÆµÈÔ»á¼ûµÄÊÓÆµÎļþ»º±£´æÄÚ´æ»ò´ÅÅÌÖУ¬Nginx¿ÉÒÔ¼«´óµØïÔ̶Ժó¶Ë´æ´¢µÄ»á¼û´ÎÊý£¬´Ó¶øËõ¶ÌÏìӦʱ¼ä£¬Ìá¸ßÍÌÍÂÁ¿¡£¹ØÓÚÊÓÆµ·þÎñ¶øÑÔ£¬ÕâÒâζ×ÅÓû§¿ÉÒÔ¸ü¿ìµØ»ñÈ¡µ½ËùÐèµÄÊÓÆµÄÚÈÝ£¬ÏÔÖøÌáÉýÁ˲¥·ÅÁ÷ͨ¶È¡£
Ä£¿é»¯Éè¼ÆÓ븻ºñµÄ¹¦Ð§£ºNginxµÄÄ£¿é»¯Éè¼ÆÊ¹ÆäÓµÓм«Ç¿µÄ¿ÉÀ©Õ¹ÐÔ¡£³ýÁË»ù´¡µÄHTTP/HTTPS·þÎñ£¬Ëü»¹Ö§³ÖRTMP¡¢HLS¡¢DASHµÈ¶àÖÖÁ÷ýÌåÐÒ飬Äܹ»Ê¤ÈÎÖ±²¥ºÍµã²¥µÈ¶àÖÖÊÓÆµ·þÎñ³¡¾°¡£Æä¸»ºñµÄÄ£¿é£¨Èçngx_http_flv_module¡¢ngx_http_mp4_moduleµÈ£©ÌṩÁ˶ÔÊÓÆµÎļþÃûÌõÄÉî¶ÈÖ§³Ö£¬Äܹ»¾ÙÐÐÊÓÆµÁ÷µÄÖ§½â¡¢×ªÂ루ËäÈ»Nginx×Ô¼º²»ÉÆÓÚÖØ´óµÄתÂ룬µ«¿ÉÒÔÓëµÚÈý·½·þÎñ¼¯³É£©µÈ²Ù×÷£¬ÎªÊÓÆµ·þÎñÌṩÁËǿʢµÄ?¹¦Ð§Ö§³Ö¡£
Ëæ×űßÑØÅÌËã¿´·¨µÄÐËÆð£¬NginxÒ²±»¸¶ÓëÁ˸üǿʢµÄÄÜÁ¦£¬Ëü²»ÔÙ½ö½öÊÇÄÚÈݵķַ¢Õߣ¬¸üÊÇÖÇÄܵġ°±ßÑØÅÌËã½Úµã¡±¡£
ʵʱÊÓÆµÆÊÎö£ºÔÚ±ßÑØ½Úµã°²ÅÅNginx£¬¿ÉÒÔ¼¯³ÉAIÄ£×Ó£¬¶Ô´«ÊäµÄÊÓÆµÁ÷¾ÙÐÐʵʱÆÊÎö£¬ÀýÈçÈËÁ³Ê¶±ð¡¢ÎïÌå¼ì²â¡¢ÐÐΪÆÊÎöµÈ?¡£ÕâЩÆÊÎöЧ¹û¿ÉÒÔÔÚ±ßÑØ¶Ë¾ÙÐд¦Öóͷ££¬ïÔ̶ÔÖÐÐÄÔÆµÄÅÌËãѹÁ¦£¬²¢ÊµÏÖ¸üµÍÑÓ³ÙµÄÖÇÄÜÏìÓ¦¡£ÄÚÈÝÖÇÄÜÍÆ¼ö£ºÍ¨Ì«¹ýÎöÓû§µÄ?ԢĿÐÐΪºÍÐËȤ£¬Nginx¿ÉÒÔÔÚ±ßÑØ¶Ë¾ÙÐÐÆðÔ´µÄÄÚÈÝÍÆ¼ö£¬²¢½«¸öÐÔ»¯µÄÍÆ¼öÁбí¿ìËÙÍÆË͸øÓû§¡£
¶¯Ì¬¹ã¸æ²åÈ룺ÔÚÊÓÆµÁ÷µÄºÏÊÊλÖã¬Nginx¿ÉÒÔ¶¯Ì¬µØ²åÈë¹ã¸æ£¬ÊµÏÖ¾«×¼µÄ¹ã¸æÍ¶·Å£¬²¢ÎªÄÚÈÝ´´×÷ÕßÇ徲̨´øÀ´¸ü¶àÊÕÒæ¡£
¡°Nginx100ÊÓÆµ¡±ÔÚÕâÀïµÄ¼ÄÒ壬¸üÊÇ´ú?±íÁËNginxÔÚ±ßÑØÖÇÄÜʱ´úµÄÖØ´óDZÁ¦¡£Ëü½«ÅÌËãÄÜÁ¦ÑÓÉìµ½ÍøÂç±ßÑØ£¬Ê¹µÃÊÓÆµÓ¦ÓÃÄܹ»Ô½·¢ÖÇÄÜ»¯¡¢ÊµÊ±»¯ºÍ¸öÐÔ»¯¡£´Ó¼òÆÓµÄÊÓÆµ²¥·Å£¬µ½?ÖØ´óµÄÖÇÄÜÆÊÎöºÍ½»»¥£¬NginxÕýÔÚÇý¶¯×ÅÊÓÆµÊÖÒÕµÄ?½çÏßÒ»Ö±À©Õ¹¡£
×ÝÈ»ÊÇĬÈÏÉèÖã¬NginxµÄÐÔÄÜÒ²ÒÑÏ൱¾«²Ê£¬µ«Í¨¹ýһЩ»ù´¡?µÄ²ÎÊýµ÷½â£¬¿ÉÒÔÏÔÖøÌáÉýÆäÔÚÊÓÆµÁ÷ýÌ峡¾°ÏµÄÌåÏÖ¡£
WorkerÀú³ÌÓëCPU½¹µãµÄÓ³É䣺NginxµÄworker_processes²ÎÊý¾öÒéÁËÊÂÇéÀú³ÌµÄÊýÄ¿¡£Í¨³£½¨Ò齫ÆäÉèÖÃΪÓë·þÎñÆ÷CPU½¹µãÊýÒ»Ö£¬»òÕßÂÔÉÙÓÚCPU½¹µãÊý¡£ÕâÑù¿ÉÒÔ³ä·ÖʹÓöàºËCPUµÄ²¢Ðд¦Öóͷ£ÄÜÁ¦£¬×èÖ¹ÒòÀú³ÌÊý¹ý¶àµ¼ÖµÄÉÏÏÂÎÄÇл»¿ªÏú¡£
ÀýÈ磬ÈôÊÇÄúµÄ·þÎñÆ÷ÓÐ8¸öCPU½¹µã£¬¿ÉÒÔÉèÖÃworker_processes8;¡£
WorkerÅþÁ¬Êý£ºworker_connections²ÎÊý½ç˵ÁËÿ¸öÊÂÇéÀú³ÌÄܹ»´¦Öóͷ£µÄ×î´ó²¢·¢ÅþÁ¬Êý¡£Õâ¸öÖµÐèҪƾ֤ÄúµÄ·þÎñÆ÷ÄÚ´æºÍÏÖʵµÄ²¢·¢ÐèÇóÀ´É趨¡£Ò»¸ö½Ï¸ßµÄworker_connectionsÖµÒâζ×Åÿ¸öÊÂÇéÀú³Ì¿ÉÒÔͬʱ¹ÜÀí¸ü¶àµÄÅþÁ¬£¬µ«?Ò²Òª×¢ÖØÄÚ´æÏûºÄ¡£
¹ØÓÚÊÓÆµÁ÷ýÌ壬˼Á¿µ½Ã¿¸öÅþÁ¬¿ÉÄÜÐèÒª½Ï³¤Ê±¼äµÄ¼á³Ö£¨ÓÈÆäÊÇÔÚÖ±²¥ÖУ©£¬ÉèÖÃÒ»¸öºÏÀíµÄÖµºÜÊÇÖ÷Òª¡£¹«Ê½max_clients=worker_processes*worker_connections¿ÉÒÔ×ÊÖúÄú¹ÀËãÕû¸ö·þÎñÆ÷Äܹ»Ö§³ÖµÄ×î´ó²¢·¢ÅþÁ¬Êý¡£
µ«¹ØÓÚÏÖʵµÄÔËÓªÕß¶øÑÔ£¬¹âÓÐǿʢµÄÊÖÒÕÊÇÔ¶Ô¶²»·óµÄ£¬ÔõÑù½«Æäת»¯Îª¿´µÃ¼ûµÄÐÔÄÜÌáÉý£¬ÔõÑùͨ¹ý¾«ÃîµÄÉèÖÃÈ÷þÎñÆ÷ʩչ×î´óЧÄÜ£¬²ÅÊÇÒªº¦ËùÔÚ¡£±¾²¿?·Ö½«¾Û½¹ÓÚNginx×îаæ?±¾ÔÚÏÖʵӦÓÃÖеÄÉèÖÃÕ½ÂÔºÍÐÔÄܱ¼ÌÚ£¬×ÊÖúÄú½âËøÊÓÆµ·þÎñµÄмÍÔª¡£
Ò»¡¢Ï¸Ä廯ÉèÖ㺽«NginxµÄ¡°100%ÊÓÆµÓÅ»¯¡±±äΪÏÖʵ
NginxµÄǿʢ֮´¦£¬²»µ«ÔÚÓÚÆäµ×²ã¼Ü¹¹£¬¸üÔÚÓÚÆä¸ß¶ÈÎÞаµÄÉèÖÃÄÜÁ¦¡£ÒªÊµÏÖ¡°100%ÊÓÆµÓÅ»¯¡±£¬ÐèÒª¶ÔNginx¾ÙÐÐһϵÁÐϸÄ廯µÄÉèÖã¬ÒÔ³ä·ÖÑéÕ¹ÆäÔÚÊÓÆµ´«Êä·½ÃæµÄDZÄÜ¡£
1.ÓÅ»¯ÅþÁ¬Ó뻺³åÇøÉèÖãºÎªÊÓÆµÊý¾ÝÁ÷¡°ÆÌƽµÀ?·¡±
worker_connections£ºÕâ¸ö²ÎÊý¾öÒéÁËÿ¸öNginxÊÂÇéÀú³ÌÄܹ»Í¬Ê±´¦Öóͷ£µÄ×î´óÅþÁ¬Êý¡£¹ØÓÚÊÓÆµ·þÎñÆ÷¶øÑÔ£¬Í¨³£ÐèÒª´¦Öóͷ£´ó×ڵIJ¢·¢ÅþÁ¬£¬Òò´ËÐèҪƾ֤·þÎñÆ÷µÄÓ²¼þ×ÊÔ´ºÍÏÖʵµÄ²¢·¢ÐèÇ󣬺ÏÀíÉèÖÃworker_connectionsµÄÖµ¡£
Ò»Ñùƽ³£¶øÑÔ£¬½«ÆäÉèÖÃΪһ¸ö½Ï´óµÄÊýÖµ£¬Èç1024¡¢4096ÉõÖÁ¸ü¸ß£¬Äܹ»ÓÐÓÃÌáÉý·þÎñÆ÷Ôڸ߲¢·¢³¡¾°ÏµĴ¦Öóͷ£ÄÜÁ¦¡£
»º³åÇøÓÅ»¯£ºNginxʹÓûº³å?ÇøÀ´´¦Öóͷ£ÇëÇóºÍÏìÓ¦Êý¾Ý¡£¹ØÓÚÊÓÆµÕâÖÖ´óÊý¾ÝÁ¿µÄ´«Ê䣬ºÏÀíµÄ»º³åÇøÉèÖÃÖÁ¹ØÖ÷Òª¡£
ÕâÒâζ×Å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ÔÚ²»ÎȹÌÍøÂçϵÄÐÔÄÜ£¬ïÔÌÁ˶ª°üÖØ´«´øÀ´µÄÓ°Ï죬¹ØÓÚÊÓÆµÁ÷µÄÎȹÌÐÔÖÁ¹ØÖ÷Òª¡£
ʵÏÖNginxµÄ¡°100%ÊÓÆµÐÔÄÜ¡±ÊÇÒ»¸öϵͳ¹¤³Ì£¬ËüÒªÇóÎÒÃÇÉîÈëÃ÷È·NginxµÄÊÂÇéÔÀí£¬ÊìÁ·ÕÆÎÕÖÖÖÖÉèÖÃÖ¸Á²¢ÍŽáÏêϸµÄ?ÓªÒµ³¡¾°¾ÙÐÐϸÄ廯µ÷ÓÅ¡£´ÓRTMPÖ±²¥µ½HTTPµã²¥£¬´Ó»ù´¡µÄÉèÖõ½¸ß¼¶µÄ»º´æÕ½ÂԺ͸ºÔØÆ½ºâ£¬Nginx¶¼Õ¹ÏÖ³öÁËÆäǿʢµÄ˳ӦÐÔºÍ׿ԽµÄÐÔÄÜ¡£
ͨ¹ýÒ»Ö±µØÊµ¼ùºÍ̽Ë÷£¬Äú½«Äܹ»³ä·ÖÊÍ·ÅNginxµÄDZÁ¦£¬ÎªÄúµÄÓû§Ìṩ¼«ÖÂÁ÷ͨµÄÊÓÆµÌåÑ飬ÔÚÇ¿ÁÒµÄÁ÷ýÌåÊг¡ÖÐÍÑÓ±¶ø³ö¡£Nginx²»µ«½öÊÇÒ»¸öWeb·þÎñÆ÷£¬Ëü¸üÊÇÄú¹¹½¨¸ßÐÔÄÜÊÓÆµÆ½Ì¨µÄǿʢ»ùʯ£¬¸³ÄÜÄúµÄÁ÷ýÌåÓªÒµ£¬×ßÏòÎÞÏÞ¿ÉÄÜ¡£
ÀýÈ磬µ±Óû§ÇëÇóijÖÖÌØ¶¨Çø·ÖÂÊ»òÃûÌõÄÊÓÆµÊ±£¬Nginx¿ÉÒÔ´¥·¢ºó¶Ë·þÎñ¾ÙÐÐʵʱתÂ룬²¢½«×ªÂëºóµÄÊÓÆµÁ÷¿ìËÙÍÆË͸øÓû§¡£×îа汾ÔÚÓëÍⲿÀú³ÌͨѶºÍ¹ÜÀí·½ÃæÒ²¾ÙÐÐÁËÓÅ»¯£¬Ê¹µÃÕâÖÖ¼¯³ÉÔ½·¢Á÷ͨ¸ßЧ¡£µÍÑÓ³ÙÖ±²¥µÄ̽Ë÷£º¹ØÓÚ¶ÔÑÓ³ÙÒªÇ󼫸ߵÄÖ±²¥³¡¾°£¬Nginx×îа汾ҲÔÚÆð¾¢Ì½Ë÷ºÍÖ§³Ö¸üµÍÑӳٵĴ«ÊäÐÒ飬ÀýÈçWebRTCµÄ¼¯³É¡£
ËäÈ»WebRTCµÄʵÏÖÏà¶ÔÖØ´ó£¬µ«NginxµÄ¿ª·ÅÐÔºÍÎÞаÐÔΪÆäÌṩÁËÓÅÒìµÄ»ù´¡£¬Î´À´ÓÐÍûÔÚµÍÑÓ³ÙÖ±²¥ÁìÓòÊÎÑݸüÖ÷ÒªµÄ½ÇÉ«¡£
ÔÙÕߣ¬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ÍÆÁ÷ºÍÀÁ÷ÇëÇó£¬ÎªÖ±²¥Æ½Ì¨ÌṩÁËǿʢµÄºó¶ËÖ§³Ö¡£
¹ØÓÚÊÓÆµÁ÷ýÌ壬×î³£¼ûµÄÁ½ÖÖ³¡¾°ÊÇÊÓÆµÖ±²¥ºÍÊÓÆµµã²¥¡£
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´¦Öóͷ£¸ßÁ÷Á¿µÄÒªº¦¡£×îа汾ÔÚ»º´æ»úÖÆ·½Ãæ¾ÙÐÐÁËÉý¼¶£¬ÓÈÆäÊÇÔÚ´¦Öóͷ£ÊÓÆµÎļþÕâÖÖ¸ÅÂÔ»ýÊý¾Ýʱ£¬ÌåÏÖÔ½·¢¾«²Ê¡£
ϸÄ廯µÄ?»º´æ¿ØÖÆ£ºNginxÌṩÁ˸»ºñµÄ»º´æÖ¸Á¿ÉÒÔÆ¾Ö¤URL¡¢ÇëÇóÍ·¡¢ÏìӦͷµÈ¶àÖÖÌõ¼þ£¬¶ÔÊÓÆµÄÚÈݾÙÐÐϸÄ廯µÄ»º´æÕ½ÂÔÉèÖá£×îа汾ÔÚ»º´æµÄ²éÕÒ¡¢Ð´ÈëºÍʧЧ»úÖÆÉϾÙÐÐÁËÓÅ»¯£¬ïÔÌÁ˲»ÐëÒªµÄ´ÅÅÌI/O£¬Ìá¸ßÁË»º´æµÄʹÓÃÂÊ¡£ÄÚ´æ?»º´æÓë´ÅÅÌ»º´æµÄÐͬ£º¹ØÓÚÆµÈÔ»á¼ûµÄСÐÍÊÓÆµÆ¬¶Ï»òÔªÊý¾Ý£¬Nginx¿ÉÒÔʹÓÃÄÚ´æ¾ÙÐлº´æ£¬ÊµÏÖºÁÃë¼¶µÄÏìÓ¦¡£
¶ø¹ØÓÚ´óÐÍÊÓÆµÎļþ£¬Ôò¿ÉÒÔÓÐÓõØÊ¹ÓôÅÅÌ»º´æ¡£×îа汾ÔÚÄڴ滺´æ?ºÍ´ÅÅÌ»º´æµÄ?ÐͬÊÂÇéÉÏÔ½·¢¸ßЧ£¬Äܹ»Æ¾Ö¤×ÊÔ´ÇéÐÎÖÇÄܵØÑ¡Ôñ»º´æ½éÖÊ£¬È·±£ÊÓÆµÄÚÈݵĿìËÙ»á¼û¡£CDN±ßÑØ½ÚµãµÄÓÅ»¯£ºÔÚCDN¼Ü¹¹ÖУ¬Nginx¾³£×÷Ϊ±ßÑØ½Úµã£¬¼ç¸º×ź£Á¿ÊÓÆµÄÚÈݵĻº´æºÍ·Ö·¢Ê¹Ãü¡£
×îа汾?ÔÚ±ßÑØ½ÚµãÉϵÄÐÔÄÜÌåÏÖ£¬Ö±½Ó¾öÒéÁËÓû§»á¼ûµÄÏìÓ¦ËÙÂÊ¡£Í¨¹ý¸ü¿ìµÄ?»º´æÖÀÖÐÂʺ͸üµÍµÄ»ØÔ´Á÷Á¿£¬NginxÄܹ»ÏÔÖø½µµÍCDNÕûÌåµÄ?ÔËÓª±¾Ç®?£¬²¢ÎªÓû§Ìṩ½üºõÁãÑÓ³ÙµÄԢĿÌåÑé¡£
»º´æÊÇÌáÉýÊÓÆµ·þÎñÐÔÄܵÄÒªº¦ÊֶΡ£NginxÌṩÁ˶àÖÖǿʢµÄ»º´æ»úÖÆ£º
ä¯ÀÀÆ÷»º´æ£ºÍ¨¹ýÉèÖÃExpires»òCache-ControlÏìӦͷ£¬¿ÉÒÔÖ¸µ¼ä¯ÀÀÆ÷»º´æÊÓÆµÎļþ¡£µ±Óû§Ôٴλá¼ûͳһÊÓÆµÊ±£¬¿ÉÒÔÖ±½Ó´Óä¯ÀÀÆ÷»º´æ¼ÓÔØ£¬ÎÞÐè´Ó·þÎñÖØÊÓÐÂÏÂÔØ£¬¼«´óµØ½ÚÔ¼ÁË´ø¿íºÍ¼ÓÔØÊ±¼ä¡£
Nginx×ÔÉí»º´æ£¨ProxyCache£©£ºNginx¿ÉÒÔÉèÖÃΪ½«ºó¶Ë·þÎñÆ÷µÄÏìÓ¦»º´æ?µ½ÍâµØ´ÅÅÌ¡£µ±Óû§ÔÙ´ÎÇëÇóÏàͬµÄÊÓÆµÊ±£¬Nginx»áÖ±½Ó´Ó»º´æÖÐÌṩ·þÎñ£¬¶øÎÞÐèÇëÇóºó¶Ë·þÎñÆ÷¡£Õâ¹ØÓڵ㲥ÊÓÆµÓÈΪÓÐÓá£ÉèÖÃproxy_cache_pathÖ¸Áî½ç˵»º´æÄ¿Â¼ºÍ²ÎÊý£¬proxy_cacheÖ¸ÁîÆôÓûº´æ£¬proxy_cache_validÖ¸ÁîÉèÖòî±ðÀàÐÍÏìÓ¦µÄ»º´æÊ±¼ä¡£
ͨ¹ýºÏÀíµÄ»º´æÕ½ÂÔ£¬¿ÉÒÔÏÔÖø½µµÍºó¶Ë·þÎñÆ÷µÄѹÁ¦£¬ÌáÉýÏìÓ¦ËÙÂÊ¡£
CDN»º´æ£ºÈçǰËùÊö£¬½«Nginx×÷ΪCDN½Úµã£¬¿ÉÒÔʹÓÃCDNµÄÈ«ÇòÂþÑÜʽ»º´æÄÜÁ¦¡£CDN½Úµã»á½«ÊÓÆµÄÚÈÝ»º´æµ½ÀëÓû§×î½üµÄ·þÎñÆ÷ÉÏ£¬Óû§»á¼ûʱ´Ó×î½üµÄ½Úµã»ñÈ¡£¬ÊµÏÖ½üºõʵʱµÄ¼ÓÔØËÙÂÊ¡£
Ò»¡¢Àë±ð¿¨¶Ù£ºNginxÔõÑù³ÉΪÊÓÆµÓÅ»¯µÄ¡°ËÙÂʼÌÐø¡±
ÔÚµ±½ñÐÅÏ¢±¬Õ¨µÄʱ´ú?£¬ÊÓÆµÒѾ³ÉΪ×îÊÜ»¶ÓµÄÄÚÈÝÏûºÄÐÎʽ֮һ¡£ÎÞÂÛÊǾ«²ÊµÄÈüÊÂÖ±²¥¡¢ÒýÈËÈëʤµÄÓ°ÊӾ缯£¬ÕÕ¾ÉÉú¶¯ÓÐȤµÄ½Ìѧ¶ÌƬ£¬Á÷ͨµÄԢĿÌåÑéÊÇÓû§×î»ù±¾Ò²ÊÇ×îÖ÷ÒªµÄÐèÇó¡£·þÎñÆ÷´ø¿íȱ·¦¡¢ÍøÂçÑÓ³Ù¡¢²¢·¢Óû§¹ý¶àµÈÎÊÌ⣬¾³£ÈÃÓû§ÔÚԢĿÊÓÆµÊ±±¥ÊÜ¿¨¶Ù¡¢¼ÓÔØ»ºÂýÖ®¿à¡£
ÐÒÔ˵ÄÊÇ£¬Nginx£¬Õâ¸öÒÔ¸ßÐÔÄÜ¡¢¸ß²¢·¢Öø³ÆµÄWeb·þÎñÆ÷£¬ÒÀ¸½ÆäǿʢµÄ¹¦Ð§ºÍÎÞаµÄÉèÖã¬Äܹ»³ÉΪ½â¾öÊÓÆµÓÅ»¯ÄÑÌâµÄ?¡°ËÙÂʼÌÐø¡±¡£
NginxÖ®ÒÔÊÇÄÜÔÚÊÓÆµÓÅ»¯ÁìÓò´ó·ÅÒì²Ê£¬Àë²»¿ªÆä¾«ÃîµÄ¼Ü¹¹Éè¼ÆºÍһϵÁиßЧµÄÄ£¿é¡£Nginx²É?ÓÃÊÂÎñÇý¶¯¡¢Òì²½·ÇÛÕ±ÕµÄ?ÊÂÇéģʽ£¬ÕâÒâζ×ÅËü¿ÉÒÔͬʱ´¦Öóͷ£³ÉǧÉÏÍò¸ö²¢·¢ÅþÁ¬£¬¶ø²»»áÏñ¹Å°åµÄApache·þÎñÆ÷ÄÇÑùΪÿ¸öÅþÁ¬½¨ÉèÒ»¸ö×ÔÁ¦µÄÀú³Ì»òỊ̈߳¬´Ó¶ø¼«´óµØ½µµÍÁË·þÎñÆ÷µÄ×ÊÔ´ÏûºÄ£¬ÌáÉýÁË´¦Öóͷ£ÄÜÁ¦¡£
¹ØÓÚÊÓÆµÕâÖÖÐèÒªÒ»Á¬¡¢´ó×ÚÊý¾Ý´«ÊäµÄÓ¦Óó¡¾°¶øÑÔ£¬ÕâÖÖ¸ßЧµÄ²¢·¢´¦Öóͷ£ÄÜÁ¦ÊÇÖÁ¹ØÖ÷ÒªµÄ¡£
ʵÏÖ100%µÄÊÓÆµÐÔÄܲ¢·ÇÒ»ÀÍÓÀÒÝ£¬Ò»Á¬µÄ¼à¿ØºÍµ÷ÓÅÊDZز»¿ÉÉٵġ£
ÈÕÖ¾ÆÊÎö£ºNginxµÄ»á¼ûÈÕÖ¾ºÍ¹ýʧÈÕÖ¾ÊÇÅÅÅÌÎÊÌâµÄÃû¹óÐÅÏ¢¡£Í¨Ì«¹ýÎöÈÕÖ¾£¬¿ÉÒÔ·¢Ã÷¸ßÑÓ³ÙµÄÇëÇ󡢯µÈÔ·ºÆðµÄ¹ýʧ£¬ÒÔ¼°Á÷Á¿Æ¿¾±¡£ÐÔÄÜ¼à¿Ø¹¤¾ß£ºÊ¹ÓÃnetdata¡¢Prometheus¡¢GrafanaµÈ¼à¿Ø¹¤¾ß£¬ÊµÊ±¼à²âNginxµÄCPU¡¢ÄÚ´æ¡¢ÍøÂçÁ÷Á¿¡¢ÅþÁ¬Êý¡¢ÇëÇóÏìӦʱ¼äµÈÒªº¦Ö¸±ê¡£
ѹÁ¦²âÊÔ£º°´ÆÚ¾ÙÐÐѹÁ¦²âÊÔ£¬Ä£ÄâÕæÊµµÄÓû§¸ºÔØ£¬ÕÒ³öNginxµÄÐÔÄܼ«ÏÞ£¬²¢Æ¾Ö¤²âÊÔЧ¹û¾ÙÐÐÏìÓ¦µÄÉèÖõ÷½â¡£ÂýÈÕÖ¾ÆÊÎö£ºNginxÌṩÁËÂýÈÕÖ¾¹¦Ð§£¬¿ÉÒԼͼÏìӦʱ¼äÁè¼ÝÉ趨µÄãÐÖµµÄÇëÇó£¬×ÊÖú¶¨Î»»ºÂýµÄÇëÇóÔ´Í·¡£
ÔÚÊÓÆµÁ÷ýÌåÕâÖÖ¶Ô´ø¿íºÍÑÓ³ÙÃô¸ÐµÄ³¡¾°Ï£¬BBRÄܹ»ÏÔÖøÌá¸ß´ø¿íʹÓÃÂÊ£¬½µµÍ¶ª°ü?ÂÊ£¬´Ó¶ø´øÀ´¸üÎȹ̵IJ¥·ÅÌåÑé¡£
ÆôÓÃ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ÎļþºÍÖÖÖÖÂëÂʵÄýÌ寬¶Ï¡£
СÐò£ºµ±Á÷ͨ³ÉΪÍõµÀ£¬NginxÔõÑùÁ¶³ÉÊÓÆµÓÅ»¯ÀûÆ÷£¿
ÔÚÏÖÔÚÕâ¸öÄÚÈÝΪÍõµÄʱ´ú£¬ÊÓÆµÒÑÈ»³ÉΪÐÅÏ¢Èö²¥¡¢ÓéÀÖÏûDzºÍÉÌÒµÓªÏúµÄ½¹µãÔØÌå¡£´ÓÔÚÏ߿γ̵½¸ßÇåÓ°Ï·£¬´ÓÖ±²¥»¥¶¯µ½¶ÌÊÓÆµ·çÐУ¬Óû§¹ØÓÚÊÓÆµ²¥·ÅµÄÁ÷ͨ¶ÈºÍÏìÓ¦ËÙÂÊÓÐ׎üºõ¿Á¿ÌµÄÒªÇó¡£Ò»µ©·ºÆð¿¨¶Ù¡¢»º³å£¬ÉõÖÁÊDz¥·Åʧ°Ü£¬Óû§ÌåÑéµÄ¶ÏÑÂʽϵø±ã²»?¿É×èÖ¹£¬ËæÖ®¶øÀ´µÄ¼´ÊÇÁ÷Á¿µÄÁ÷ʧ¡¢Óû§µÄ²»ÂúÒÔ¼°Æ·ÅÆÐÎÏóµÄÊÜËð¡£
ÔÚÊÓÆµÁ÷ýÌå·þÎñÈÕÒæÖØ´óºÍÖØ´óµÄÅä¾°Ï£¬ÔõÑùÈ·±£Ã¿Ò»Ö¡»Ãæ¶¼Äܾ«×¼¡¢¸ßЧµØËÍ´ïÓû§ÖÕ¶Ë£¬³ÉΪÁ˰Ú?ÔÚÿһλÊÖÒÕ¿ª·¢ÕߺÍÔËάְԱÑÛǰµÄÖØ´óÌôÕ½¡£
ÔÚÕⳡ׷Çó¼«ÖÂÁ÷ͨµÄÕ½ÕùÖУ¬Nginx£¬Õâ¿î¸ßÐÔÄܵÄWeb·þÎñÆ÷¡¢·´Ïò´úÀíºÍ¸ºÔØÆ½ºâÆ÷£¬ÕýÒÔÆä׿ԽµÄÐÔÄܺÍÎÞаµÄÉèÖã¬ÊÎÑÝ×ÅÔ½À´Ô½Ö÷ÒªµÄ½ÇÉ«¡£Ëü²»µ«½öÊÇÒ»¸ö¼òÆÓµÄÎļþ·þÎñÆ÷£¬¸üÊÇÄܹ»Éî¶È½éÈëÊÓÆµÁ÷ýÌå´«ÊäÀú³Ì£¬¾ÙÐÐÈ«·½Î»¡¢Ï¸Ä廯ÓÅ»¯µÄǿʢÒýÇæ¡£
±¾ÎĽ«ÉîÈë̽ÌÖNginxÔõÑùʵÏÖ¡°100%ÊÓÆµÓÅ»¯¡±£¬Õ¹ÏÖÆä±³ºóµÄÊÖÒÕÔÀíºÍʵ²Ù¼¼ÇÉ£¬×ÊÖúÄã¹¹½¨Îȹ̡¢¸ßЧ¡¢¼«¾ß¾ºÕùÁ¦µÄ?ÊÓÆµ·þÎñ¡£
»º´æÄ¿Â¼½á¹¹£ººÏÀíµÄ»º´æÄ¿Â¼²ã¼¶¿ÉÒÔÌá¸ß´Å?ÅÌI/OЧÂÊ£¬×èֹĿ¼ÏµÄ?Îļþ¹ý¶àµ¼Ö²é?ÕÒ»ºÂý¡£proxy_cache_pathÖ¸ÁîÖеÄlevels²ÎÊý¿ÉÒÔ¿ØÖÆ»º´æÄ¿Â¼µÄ²ã¼¶¡£»º´æ´ó?СÓëïÔÌÕ½ÂÔ£ºmax_size²ÎÊýÓÃÓÚÏÞÖÆ»º´æµÄ×ܾÞϸ¡£
µ±»º´æ¿Õ¼äȱ·¦Ê±£¬Nginx»áƾ֤LRU(LeastRecentlyUsed)Ëã·¨ïÔ̾ɵĻº´æ?Îļþ¡£proxy_cache_keyµÄºÏÀíÉè¼Æ£ºÈ·±£»º´æ¼üÄܹ»×¼È·µØ±êʶ²î±ðµÄÊÓÆµÄÚÈÝ£¬×èÖ¹²»ÐëÒªµÄ»º´æÊ§Ð§»ò»º´æÈßÓà¡£proxy_cache_bypassºÍproxy_cache_ignore£º¿ÉÒÔÓÃÀ´Èƹý»òºöÂÔÄ³Ð©ÌØ¶¨ÇëÇóµÄ»º´æ£¬ÀýÈçÓû§µÇ¼ºóµÄ¸öÐÔ»¯ÄÚÈÝ¡£
Á÷ͨµÄÊÓÆµ²¥·ÅÀë²»¿ªÇ¿Ê¢µÄÐÔÄÜÖ§³Ö¡£Nginx×îа汾ÔÚÄÚ´æ¹ÜÀíºÍ²¢·¢´¦Öóͷ£·½Ãæ¾ÙÐÐÁËÉîÈëµÄÓÅ»¯£¬Îªº£Á¿²¢·¢ÊÓÆµÇëÇóÌṩÁËǿʢµÄ±£?ÕÏ¡£
¸ßЧµÄ?ÄÚ´æ¹ÜÀí»úÖÆ£ºÊÓÆµÁ÷ýÌåÊý¾ÝÁ¿Öش󣬶ԷþÎñÆ÷ÄÚ´æ×ÊÔ´µÄÐèÇ󼫸ߡ£NginxÔÚ×îа汾ÖнøÒ»²½¾«Á¶ÁËÆäÄÚ´æ¹ÜÀíÕ½ÂÔ£¬½ÓÄɸüϸÄ廯µÄÄÚ´æ?·ÖÅÉÓë½ÓÄÉ»úÖÆ£¬ÓÐÓÃ×èÖ¹ÄÚ´æ×ß©£¬ïÔÌÄÚ´æË鯬£¬´Ó¶øÌá¸ßÄÚ´æÊ¹ÓÃÂÊ¡£Õâ²»µ«½µµÍÁË·þÎñÆ÷µÄÔËÐб¾Ç®£¬¸üÖ÷ÒªµÄÊÇ£¬Îª³¤Ê±¼ä¡¢¸ß²¢·¢µÄÊÓÆµÈö²¥ÊäÌṩÁËÎȹ̿ɿ¿µÄ×ÊÔ´°ü¹Ü¡£
Í»ÆÆÐԵIJ¢·¢´¦Öóͷ£ÄÜÁ¦£ºNginxÒ»Ö±ÒÔÆä׿ԽµÄ²¢·¢´¦Öóͷ£ÄÜÁ¦Öø³Æ£¬¶ø×îаæ?±¾¸üÊǽ«ÕâÒ»ÓÅÊÆÊ©Õ¹µ½Á˼«Ö¡£Í¨¹ýÊÂÎñÇý¶¯µÄ?Òì²½·ÇÛÕ±ÕI/OÄ£×Ó£¬NginxÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄͬʱ´¦Öóͷ£³ÉǧÉÏÍòµÄ²¢?·¢ÅþÁ¬¡£ÕâÒâζ×Å£¬×ÝÈ»ÔÚԢĿá¯ÁëÆÚ£¬Óû§Ò²ÄÜÏíÊܵ½Á÷ͨµÄÊÓÆµ²¥·ÅÌåÑ飬Àë±ð¿¨¶ÙºÍµÈ?´ý¡£
¹ØÓÚÖ±²¥Æ½Ì¨¡¢µã²¥·þÎñÉ̶øÑÔ£¬ÕâÒâζ×ÅÄܹ»¸üÓÐÓõش¥?´ï¸üÆÕ±éµÄÓû§ÈºÌ壬Ìṩ¸üÓÅÖʵÄ?·þÎñ¡£Ï¸Ä廯»º´æÕ½ÂÔ£ºÊÓÆµÄÚÈݵĻº´æÊÇÌáÉý²¥·ÅÁ÷ͨ?¶ÈµÄÒªº¦¡£Nginx×îа汾ÌṩÁËÔ½·¢Ï¸Ä廯µÄ?»º´æ¿ØÖÆÕ½ÂÔ£¬¿ÉÒÔÆ¾Ö¤ÊÓÆµÎļþµÄ?ÌØÕ÷¡¢Óû§»á¼ûƵÂʵÈÒòËØ£¬ÖÇÄܵص÷½â»º´æÕ½ÂÔ£¬×î´ó»¯»º´æÖÀÖÐÂÊ¡£
ÏÖ´úÁ÷ýÌå²¥·ÅÔçÒѲ»ÊǼòÆÓµÄÎļþÏÂÔØ£¬¶øÊÇ»ùÓÚһϵÁÐÓÅ»¯µÄÐÒéÀ´ÊµÏֵġ£NginxÒÀ¸½ÆäǿʢµÄÄ£¿é»¯Éè¼ÆºÍÎÞаÐÔ£¬Äܹ»ÍêÉÆÖ§³ÖÖ÷Á÷µÄÁ÷ýÌåÐÒ飬ΪÓû§Ìṩ¸ü¼ÑµÄ²¥·ÅÌåÑé¡£
HTTPLiveStreaming(HLS)£ºHLSÊÇÓÉAppleÌá³öµÄÁ÷ýÌå´«ÊäÐÒ飬Ëü½«ÊÓÆµÄÚÈÝÖ§½â³ÉһϵÁÐСµÄ¡¢»ùÓÚHTTPµÄ.tsýÌåÎļþ£¬²¢Î¬»¤Ò»¸ö.m3u8µÄ²¥·ÅÁбíÎļþ¡£Nginx¿ÉÒÔºÜÊǸßЧµØ·Ö·¢ÕâЩ.tsÎļþºÍ.m3u8Îļþ¡£
NginxµÄHLSÖ§³Ö£ºNginx×Ô¼º²¢²»Ö±½ÓÌṩHLS´ò°ü¹¦Ð§£¨Õâͨ³£ÔÚÊÓÆµ×ªÂë·þÎñÆ÷ÉÏÍê³É£©£¬µ«ËüÈ´ÊÇ·Ö·¢HLSÁ÷µÄÀíÏë·þÎñÆ÷¡£Äã¿ÉÒÔ½«×ªÂëºóµÄHLSÎļþ´æ·ÅÔÚNginxÄܹ»»á¼ûµÄĿ¼£¬È»ºóͨ¹ýNginx¾ÙÐиßЧÂʵÄHTTP´«?Êä¡£ÓÅ»¯HLS´«Ê䣺»º´æÕ½ÂÔ£º¶Ô.m3u8²¥·ÅÁбíÎļþºÍ.tsýÌåÎļþÉèÖúÏÀíµÄ»º´æÕ½ÂÔÖÁ¹ØÖ÷Òª¡£
.m3u8Îļþͨ³£×ª±ä½Ï¿ì£¬¿ÉÒÔÉèÖý϶̵Ļº´æÊ±¼ä£¬¶ø.tsÎļþÔòת±ä½ÏÉÙ£¬¿ÉÒÔÉèÖýϳ¤µÄ»º´æÊ±¼ä¡£NginxµÄproxy_cacheÖ¸Áî¿ÉÒԺܺõØÖª×ãÕâÖÖÐèÇó¡£·ÖÆ¬´«ÊäÓÅ»¯£ºHLSµÄÓÅÊÆÔÚÓÚÆä·ÖƬ´«Ê䣬×ÝÈ»µ¥¸ö.tsÎļþ´«Êäʧ°Ü£¬²¥·ÅÆ÷Ò²¿ÉÒÔʵÑéÇëÇóÏÂÒ»¸ö¡£
¹ØÓÚÊÓÆµµã²¥£¨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ÎļþÒÔ¼°¶ÔÓ¦µÄÊÓÆµÆ¬¶Ï¡£
ÓÅ»¯Õ½ÂÔ£º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µÄÕâÒ»ÓÅÊÆÓÈΪÃû¹ó£¬ËüÄܹ»ÒÔ¼«µÍµÄ×ÊÔ´ÏûºÄ£¬ÇáËÉÓ¦¶Ô°ÙÍò¼¶µÄ²¢·¢ÅþÁ¬¡£ÕâÒâζ×Å£¬×ÝÈ»ÔÚÓû§Ô¢Ä¿á¯ÁëÆÚ£¬ÄúµÄÊÓÆµ·þÎñÒ²Äܼá³ÖÎȹ̣¬²»»áÓÉÓÚ·þÎñÆ÷¹ýÔØ¶øµ¼Ö¿¨¶Ù»òÍ߽⡣
ÇáÁ¿¼¶Óë¸ß²¢·¢ÄÜÁ¦£ºNginxµÄÉè¼ÆÕÜѧ¾ÍÊÇ¡°Ð¡ÇɶøÇ¿Ê¢¡±¡£Æä´úÂëÁ¿Ïà¶Ô½ÏÉÙ£¬ÄÚ´æÕ¼Óõͣ¬Æô¶¯ËÙÂʿ졣ÔÚÏÖʵ°²ÅÅÖУ¬Ò»¸öNginxʵÀý¾ÍÄÜÇáËÉ´¦Öóͷ£ÊýÍòÉõÖÁÊýÊ®ÍòµÄ²¢·¢ÅþÁ¬£¬Õâ¹ØÓÚ³Ð?ÔØ´ó¹æÄ£ÊÓÆµÆ½Ì¨ÖÁ¹ØÖ÷Òª¡£ÏëÏóһϣ¬Ò»¸öÈÈÃÅÖ±²¥¼äͬʱӿÈë³ÉǧÉÏÍòµÄ¹ÛÖÚ£¬NginxÄܹ»ÏñÒ»¸öѵÁ·ÓÐËØµÄÖ¸»Ó¹Ù£¬ÓÐÌõ²»ÎɵØÎªÃ¿Ò»Î»¹ÛÖÚ·Ö·¢ÊÓÆµÁ÷£¬È·±£ËûÃǶ¼ÄÜÏíÊܵ½ÎÞ·ìµÄԢĿÌåÑé¡£
ǿʢµÄ?·´Ïò´úÀíºÍ¸ºÔØÆ½ºâ¹¦Ð§£ºÊÓÆµ·þÎñͨ³£ÐèÒª¶ą̀·þÎñÆ÷ÐͬÊÂÇ飬ÒÔ·Öµ£Ñ¹Á¦²¢ÌṩÈßÓà¡£Nginx×÷Ϊ·´Ïò´úÀí£¬¿ÉÒÔ½«Óû§µÄÇëÇóת·¢µ½ºó¶ËµÄ¶ą̀ÊÓÆµ·þÎñÆ÷£¬²¢Æ¾Ö¤Ô¤ÉèµÄÕ½ÂÔ£¨ÈçÂÖѯ¡¢¼ÓȨÂÖѯ¡¢IP¹þÏ£µÈ£©¾ÙÐиºÔØÆ½ºâ¡£ÕâÒâζ×Å£¬Óû§ÇëÇ󲻻ἯÖдòµ½Ä³Ò»Ì¨·þÎñÆ÷ÉÏ£¬¶øÊDZ»ÔȳÆÊèÉ¢£¬¼«´óµØÌá¸ßÁËÕûÌåµÄÍÌÍÂÁ¿ºÍ¿ÉÓÃÐÔ¡£
ͨ¹ýÉîÈëÆÊÎöNginxÔÚ¾²Ì¬Îļþ·þÎñ¡¢HTTP/2ÐÒéÖ§³Ö¡¢TCPBBRÓÅ»¯¡¢HLS/DASHÐÒé´¦Öóͷ£¡¢CDN¹¹½¨¡¢ÖÇÄÜÁ÷Á¿µ÷Àí¡¢Çå¾²·À»¤ÒÔ¼°Ò»Á¬¼à¿ØµÈ·½ÃæµÄǿʢÄÜÁ¦£¬ÎÒÃÇ¿ÉÒÔÇåÎúµØ¿´µ½NginxÔõÑù³ÉΪʵÏÖ¡°100%ÊÓÆµÓÅ»¯¡±µÄÒªº¦ÀûÆ÷¡£
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¶à·¸´ÓûúÖÆ£¬Äܹ»Í¬Ê±¼àÌý¶à¸öÍøÂçÐÎò·û£¬¶øÎÞÐèΪÿ¸öÐÎò·û½¨Éèµ¥¶ÀµÄ?Ï̡߳£
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±ßÑØ½Úµã£¬¿ÉÒÔʵÏÖ¸ü¿ìµÄ?»á¼ûËÙÂÊ¡£
¸ºÔØÆ½ºâÕ½ÂÔ£º¹ØÓÚ´ó¹æÄ£ÊÓÆµÆ½Ì¨£¬µ¥?̨Nginx·þÎñÆ÷ÄÑÒÔÖ§³Ö£¬ÐèÒª°²ÅŶą̀Nginx»ò½«NginxÓëºó¶ËÊÓÆµ·þÎñÆ÷¼¯ÈºÅäºÏʹÓá£NginxµÄupstreamÄ£¿éÌṩÁ˶àÖÖ¸ºÔØÆ½ºâËã·¨£¬Èçround-robin£¨ÂÖѯ£©¡¢weight£¨¼ÓȨÂÖѯ£©¡¢ip_hash£¨IP¹þÏ££©µÈ¡£
Ñ¡ÔñºÏÊʵĸºÔØÆ½ºâÕ½ÂÔ£¬Äܹ»È·±£Á÷Á¿±»ÔȳƷÖÅɵ½¸÷¸ö·þÎñÆ÷£¬×èÖ¹µ¥µã¹ýÔØ£¬Ìá¸ßÕûϵһÇеĿÉÓÃÐÔºÍÍÌÍÂÁ¿¡£
ÐÂÎÅÊèÉ¢£º½«ÊÓÆµÎļþµÈ¾²Ì¬×ÊÔ´µÄ»á¼ûÇëÇ󽻸øNginx´¦Öóͷ££¬¶ø½«ÐèÒªºó¶ËÓ¦Ó÷þÎñÆ÷´¦Öóͷ£µÄ¶¯Ì¬ÇëÇó£¨ÈçÓû§ÈÏÖ¤¡¢Ì¸ÂÛ½»»¥µÈ?£©×ª·¢³öÈ¥¡£ÕâÖÖÊèÉ¢¿ÉÒÔ³ä·ÖÑéÕ¹Nginx¸ßЧ´¦Öóͷ£¾²Ì¬ÎļþµÄÄÜÁ¦£¬Èúó¶ËÓ¦Ó÷þÎñÆ÷רעÓÚ´¦Öóͷ£ÓªÒµÂß¼£¬´Ó¶øÌá¸ßÕû¸öϵͳµÄ´¦Öóͷ£Ð§ÂÊ¡£
ÀýÈ磬¿ÉÒÔͨ¹ýlocation¿éÆ¥ÅäÊÓÆµÎļþµÄURL£¬Ö±½ÓÔÚNginxÖоÙÐÐÉèÖ㬶ø½«ÆäËûURLת·¢¸øÓ¦Ó÷þÎñÆ÷¡£