Ê×Ò³
ѧϰ
»î¶¯
רÇø
¹¤¾ß
TVP
·¢²¼
¾«Ñ¡ÄÚÈÝ/¼¼ÊõÉçȺ/ÓŻݲúÆ·,¾¡ÔÚС³ÌÐò
Á¢¼´Ç°Íù

Éî¶È | NginxΪʲô¿ìµ½Í£²»ÏÂÀ´£¿

?Nginx µÄ½ø³ÌÄ£ÐÍ

Nginx ·þÎñÆ÷£¬Õý³£ÔËÐйý³ÌÖУº

  1. ¶à½ø³Ì£ºÒ»¸ö Master ½ø³Ì¡¢¶à¸ö Worker ½ø³Ì
  2. Master ½ø³Ì£º¹ÜÀí Worker ½ø³Ì
  3. ¶ÔÍâ½Ó¿Ú£º½ÓÊÕÍⲿµÄ²Ù×÷£¨Ðźţ©
  4. ¶ÔÄÚת·¢£º¸ù¾ÝÍⲿµÄ²Ù×÷µÄ²»Í¬£¬Í¨¹ýÐźŹÜÀí Worker
  5. ¼à¿Ø£º¼à¿Ø worker ½ø³ÌµÄÔËÐÐ״̬£¬worker ½ø³ÌÒì³£ÖÕÖ¹ºó£¬×Ô¶¯ÖØÆô worker ½ø³Ì
  6. Worker ½ø³Ì£ºËùÓÐ Worker ½ø³Ì¶¼ÊÇƽµÈµÄ
  7. ʵ¼Ê´¦Àí£ºÍøÂçÇëÇó£¬ÓÉ Worker ½ø³Ì´¦Àí£»
  8. Worker ½ø³ÌÊýÁ¿£ºÔÚ nginx.conf ÖÐÅäÖã¬Ò»°ãÉèÖÃΪºËÐÄÊý£¬³ä·ÖÀûÓà CPU ×ÊÔ´£¬Í¬Ê±£¬±ÜÃâ½ø³ÌÊýÁ¿¹ý¶à£¬±ÜÃâ½ø³Ì¾ºÕù CPU ×ÊÔ´£¬Ôö¼ÓÉÏÏÂÎÄÇл»µÄËðºÄ¡£

˼¿¼£º

  1. ÇëÇóÊÇÁ¬½Óµ½ Nginx£¬Master ½ø³Ì¸ºÔð´¦ÀíºÍת·¢£¿
  2. ÈçºÎÑ¡¶¨Äĸö Worker ½ø³Ì´¦ÀíÇëÇó£¿ÇëÇóµÄ´¦Àí½á¹û£¬ÊÇ·ñ»¹Òª¾­¹ý Master ½ø³Ì£¿

HTTP Á¬½Ó½¨Á¢ºÍÇëÇó´¦Àí¹ý³Ì

  1. Nginx Æô¶¯Ê±£¬Master ½ø³Ì£¬¼ÓÔØÅäÖÃÎļþ
  2. Master ½ø³Ì£¬³õʼ»¯¼àÌýµÄ socket
  3. Master ½ø³Ì£¬fork ³ö¶à¸ö Worker ½ø³Ì
  4. Worker ½ø³Ì£¬¾ºÕùеÄÁ¬½Ó£¬»ñʤ·½Í¨¹ýÈý´ÎÎÕÊÖ£¬½¨Á¢ Socket Á¬½Ó£¬²¢´¦ÀíÇëÇó

Nginx ¸ßÐÔÄÜ¡¢¸ß²¢·¢

  1. Nginx ²ÉÓ㺶à½ø³Ì + Òì²½·Ç×èÈû·½Ê½£¨IO ¶à·¸´Óà epoll£©
  2. ÇëÇóµÄÍêÕû¹ý³Ì£º
  3. ½¨Á¢Á¬½Ó
  4. ¶ÁÈ¡ÇëÇ󣺽âÎöÇëÇó
  5. ´¦ÀíÇëÇó
  6. ÏìÓ¦ÇëÇó
  7. ÇëÇóµÄÍêÕû¹ý³Ì£¬¶ÔÓ¦µ½µ×²ã£¬¾ÍÊÇ£º¶Áд socket ʼþ

Nginx µÄʼþ´¦ÀíÄ£ÐÍ

request£ºNginx ÖÐ http ÇëÇó¡£

»ù±¾µÄ HTTP Web Server ¹¤×÷ģʽ£º

  1. ½ÓÊÕÇëÇó£ºÖðÐжÁÈ¡ÇëÇóÐкÍÇëÇóÍ·£¬Åж϶ÎÓÐÇëÇóÌåºó£¬¶ÁÈ¡ÇëÇóÌå
  2. ´¦ÀíÇëÇó
  3. ·µ»ØÏìÓ¦£º¸ù¾Ý´¦Àí½á¹û£¬Éú³ÉÏàÓ¦µÄ HTTP ÇëÇó£¨ÏìÓ¦ÐС¢ÏìӦͷ¡¢ÏìÓ¦Ì壩

Nginx Ò²ÊÇÕâ¸öÌ×·£¬ÕûÌåÁ÷³ÌÒ»Ö¡£

Ä£¿é»¯Ìåϵ½á¹¹

nginxµÄÄ£¿é¸ù¾ÝÆ书ÄÜ»ù±¾ÉÏ¿ÉÒÔ·ÖΪÒÔϼ¸ÖÖÀàÐÍ£º

  • event module: ´î½¨Á˶ÀÁ¢ÓÚ²Ù×÷ϵͳµÄʼþ´¦Àí»úÖƵĿò¼Ü£¬¼°ÌṩÁ˸÷¾ßÌåʼþµÄ´¦Àí¡£°üÀ¨ngx_events_module£¬ ngx_event_core_moduleºÍngx_epoll_moduleµÈ¡£nginx¾ßÌåʹÓúÎÖÖʼþ´¦ÀíÄ£¿é£¬ÕâÒÀÀµÓÚ¾ßÌåµÄ²Ù×÷ϵͳºÍ±àÒëÑ¡Ïî¡£
  • phase handler: ´ËÀàÐ͵ÄÄ£¿éÒ²±»Ö±½Ó³ÆΪhandlerÄ£¿é¡£Ö÷Òª¸ºÔð´¦Àí¿Í»§¶ËÇëÇó²¢²úÉú´ýÏìÓ¦ÄÚÈÝ£¬±ÈÈçngx_http_static_moduleÄ£¿é£¬¸ºÔð¿Í»§¶ËµÄ¾²Ì¬Ò³ÃæÇëÇó´¦Àí²¢½«¶ÔÓ¦µÄ´ÅÅÌÎļþ×¼±¸ÎªÏìÓ¦ÄÚÈÝÊä³ö¡£
  • output filter: Ò²³ÆΪfilterÄ£¿é£¬Ö÷ÒªÊǸºÔð¶ÔÊä³öµÄÄÚÈݽøÐд¦Àí£¬¿ÉÒÔ¶ÔÊä³ö½øÐÐÐ޸ġ£ÀýÈ磬¿ÉÒÔʵÏÖ¶ÔÊä³öµÄËùÓÐhtmlÒ³ÃæÔö¼ÓÔ¤¶¨ÒåµÄfootbarÒ»ÀàµÄ¹¤×÷£¬»òÕ߶ÔÊä³öµÄͼƬµÄURL½øÐÐÌæ»»Ö®ÀàµÄ¹¤×÷¡£
  • upstream: upstreamÄ£¿éʵÏÖ·´Ïò´úÀíµÄ¹¦ÄÜ£¬½«ÕæÕýµÄÇëÇóת·¢µ½ºó¶Ë·þÎñÆ÷ÉÏ£¬²¢´Óºó¶Ë·þÎñÆ÷É϶ÁÈ¡ÏìÓ¦£¬·¢»Ø¿Í»§¶Ë¡£upstreamÄ£¿éÊÇÒ»ÖÖÌØÊâµÄhandler£¬Ö»²»¹ýÏìÓ¦ÄÚÈݲ»ÊÇÕæÕýÓÉ×Ô¼º²úÉúµÄ£¬¶øÊÇ´Óºó¶Ë·þÎñÆ÷É϶ÁÈ¡µÄ¡£
  • load-balancer: ¸ºÔؾùºâÄ£¿é£¬ÊµÏÖÌض¨µÄËã·¨£¬ÔÚÖÚ¶àµÄºó¶Ë·þÎñÆ÷ÖУ¬Ñ¡ÔñÒ»¸ö·þÎñÆ÷³öÀ´×÷Ϊij¸öÇëÇóµÄת·¢·þÎñÆ÷¡£

³£¼ûÎÊÌâÆÊÎö

Nginx vs. Apache

ÍøÂç IO Ä£ÐÍ£º

  1. nginx£ºIO ¶à·¸´Óã¬epoll(freebsd ÉÏÊÇ kqueue )
  2. ¸ßÐÔÄÜ
  3. ¸ß²¢·¢
  4. Õ¼ÓÃϵͳ×ÊÔ´ÉÙ
  5. apache£º×èÈû + ¶à½ø³Ì/¶àÏß³Ì
  6. ¸üÎȶ¨£¬bug ÉÙ
  7. Ä£¿é¸ü·á¸»

³¡¾°£º

´¦Àí¶à¸öÇëÇóʱ£¬¿ÉÒÔ²ÉÓãºIO ¶à·¸´Óà »òÕß ×èÈû IO +¶àÏß³Ì

  • IO ¶à··þÓãºÒ»¸ö Ị̈߳¬¸ú×Ù¶à¸ö socket ״̬£¬Äĸö¾ÍÐ÷£¬¾Í¶ÁдÄĸö£»
  • ×èÈû IO + ¶àỊ̈߳ºÃ¿Ò»¸öÇëÇó£¬Ð½¨Ò»¸ö·þÎñÏß³Ì

˼¿¼£ºIO ¶à·¸´Óà ºÍ ¶àÏß³Ì µÄÊÊÓó¡¾°£¿

  • IO ¶à·¸´Ó㺵¥¸öÁ¬½ÓµÄÇëÇó´¦ÀíËÙ¶ÈûÓÐÓÅÊÆ£¬ÊÊºÏ IO Ãܼ¯ÐÍ ³¡¾°£¬Ê¼þÇý¶¯
  • ´ó²¢·¢Á¿£ºÖ»Ê¹ÓÃÒ»¸öỊ̈߳¬´¦Àí´óÁ¿µÄ²¢·¢ÇëÇ󣬽µµÍÉÏÏÂÎÄ»·¾³Çл»ËðºÄ£¬Ò²²»ÐèÒª¿¼ÂDz¢·¢ÎÊÌ⣬Ïà¶Ô¿ÉÒÔ´¦Àí¸ü¶àµÄÇëÇó£»
  • ÏûºÄ¸üÉÙµÄϵͳ×ÊÔ´£¨²»ÐèÒªÏ̵߳÷¶È¿ªÏú£©
  • ÊÊÓÃÓÚ³¤Á¬½ÓµÄÇé¿ö£¨¶àÏß³Ìģʽ³¤Á¬½ÓÈÝÒ×Ôì³ÉÏ̹߳ý¶à£¬Ôì³ÉƵ·±µ÷¶È£©
  • ×èÈûIO + ¶àỊ̈߳ºÊµÏÖ¼òµ¥£¬¿ÉÒÔ²»ÒÀÀµÏµÍ³µ÷Óã¬ÊÊºÏ CPU Ãܼ¯ÐÍ ³¡¾°
  • ÿ¸öỊ̈߳¬¶¼ÐèҪʱ¼äºÍ¿Õ¼ä£»
  • Ïß³ÌÊýÁ¿Ôö³¤Ê±£¬Ï̵߳÷¶È¿ªÏúÖ¸ÊýÔö³¤

Nginx ×î´óÁ¬½ÓÊý

»ù´¡±³¾°£º

  1. Nginx ÊǶà½ø³ÌÄ£ÐÍ£¬Worker ½ø³ÌÓÃÓÚ´¦ÀíÇëÇó£»
  2. µ¥¸ö½ø³ÌµÄÁ¬½ÓÊý£¨ÎļþÃèÊö·û fd£©£¬ÓÐÉÏÏÞ£¨nofile£©£ºulimit -n
  3. Nginx ÉÏÅäÖõ¥¸ö worker ½ø³ÌµÄ×î´óÁ¬½ÓÊý£ºworker_connections ÉÏÏÞΪ nofile
  4. Nginx ÉÏÅäÖà worker ½ø³ÌµÄÊýÁ¿£ºworker_processes

Òò´Ë£¬Nginx µÄ×î´óÁ¬½ÓÊý£º

  1. Nginx µÄ×î´óÁ¬½ÓÊý£ºWorker ½ø³ÌÊýÁ¿ x µ¥¸ö Worker ½ø³ÌµÄ×î´óÁ¬½ÓÊý
  2. ÉÏÃæÊÇ Nginx ×÷ΪͨÓ÷þÎñÆ÷ʱ£¬×î´óµÄÁ¬½ÓÊý
  3. Nginx ×÷Ϊ·´Ïò´úÀí·þÎñÆ÷ʱ£¬Äܹ»·þÎñµÄ×î´óÁ¬½ÓÊý£º£¨Worker ½ø³ÌÊýÁ¿ x µ¥¸ö Worker ½ø³ÌµÄ×î´óÁ¬½ÓÊý£©/ 2¡£
  4. Nginx ·´Ïò´úÀíʱ£¬»á½¨Á¢ Client µÄÁ¬½ÓºÍºó¶Ë Web Server µÄÁ¬½Ó£¬Õ¼Óà 2 ¸öÁ¬½Ó

˼¿¼£º

ÿ´ò¿ªÒ»¸ö socket Õ¼ÓÃÒ»¸ö fd

Ϊʲô£¬Ò»¸ö½ø³ÌÄܹ»´ò¿ªµÄ fd ÊýÁ¿ÓÐÏÞÖÆ£¿

IO Ä£ÐÍ

³¡¾°£º

´¦Àí¶à¸öÇëÇóʱ£¬¿ÉÒÔ²ÉÓãºIO ¶à·¸´Óà »òÕß ×èÈû IO +¶àÏß³Ì

  • IO ¶à·¸´ÓãºÒ»¸ö Ị̈߳¬¸ú×Ù¶à¸ö socket ״̬£¬Äĸö¾ÍÐ÷£¬¾Í¶ÁдÄĸö£»
  • ×èÈû IO + ¶àỊ̈߳ºÃ¿Ò»¸öÇëÇó£¬Ð½¨Ò»¸ö·þÎñÏß³Ì

˼¿¼£ºIO ¶à·¸´Óà ºÍ ¶àÏß³Ì µÄÊÊÓó¡¾°£¿

  • IO ¶à·¸´Ó㺵¥¸öÁ¬½ÓµÄÇëÇó´¦ÀíËÙ¶ÈûÓÐÓÅÊÆ
  • ´ó²¢·¢Á¿£ºÖ»Ê¹ÓÃÒ»¸öỊ̈߳¬´¦Àí´óÁ¿µÄ²¢·¢ÇëÇ󣬽µµÍÉÏÏÂÎÄ»·¾³Çл»ËðºÄ£¬Ò²²»ÐèÒª¿¼ÂDz¢·¢ÎÊÌ⣬Ïà¶Ô¿ÉÒÔ´¦Àí¸ü¶àµÄÇëÇó£»
  • ÏûºÄ¸üÉÙµÄϵͳ×ÊÔ´£¨²»ÐèÒªÏ̵߳÷¶È¿ªÏú£©
  • ÊÊÓÃÓÚ³¤Á¬½ÓµÄÇé¿ö£¨¶àÏß³Ìģʽ³¤Á¬½ÓÈÝÒ×Ôì³ÉÏ̹߳ý¶à£¬Ôì³ÉƵ·±µ÷¶È£©
  • ×èÈûIO + ¶àỊ̈߳ºÊµÏÖ¼òµ¥£¬¿ÉÒÔ²»ÒÀÀµÏµÍ³µ÷Óá£
  • ÿ¸öỊ̈߳¬¶¼ÐèҪʱ¼äºÍ¿Õ¼ä£»
  • Ïß³ÌÊýÁ¿Ôö³¤Ê±£¬Ï̵߳÷¶È¿ªÏúÖ¸ÊýÔö³¤

select/poll ºÍ epoll ±È½Ï

ÏêϸÄÚÈÝ£¬²Î¿¼£º

  • select poll epollÈýÕßÖ®¼äµÄ±È½Ï

select/poll ϵͳµ÷Óãº

´úÂëÓïÑÔ£ºjavascript
¸´ÖÆ
//?select?ϵͳµ÷ÓÃ??int?select(int?maxfdp,fd_set?*readfds,fd_set?*writefds,fd_set?*errorfds,struct?timeval?*timeout);??//?poll?ϵͳµ÷ÓÃ??int?poll(struct?pollfd?fds[],?nfds_t?nfds,?int?timeout)£»?

select£º

  • ²éѯ fd_set ÖУ¬ÊÇ·ñÓоÍÐ÷µÄ fd£¬¿ÉÒÔÉ趨һ¸ö³¬Ê±Ê±¼ä£¬µ±ÓÐ fd (File descripter) ¾ÍÐ÷»ò³¬Ê±·µ»Ø£»
  • fd_set ÊÇÒ»¸öλ¼¯ºÏ£¬´óСÊÇÔÚ±àÒëÄÚºËʱµÄ³£Á¿£¬Ä¬ÈÏ´óСΪ 1024
  • Ìص㣺
  • Á¬½ÓÊýÏÞÖÆ£¬fd_set ¿É±íʾµÄ fd ÊýÁ¿Ì«Ð¡ÁË£»
  • ÏßÐÔɨÃ裺ÅÐ¶Ï fd ÊÇ·ñ¾ÍÐ÷£¬ÐèÒª±éÀúÒ»±ß fd_set£»
  • Êý¾Ý¸´ÖÆ£ºÓû§¿Õ¼äºÍÄں˿ռ䣬¸´ÖÆÁ¬½Ó¾ÍÐ÷״̬ÐÅÏ¢

poll£º

  • ½â¾öÁËÁ¬½ÓÊýÏÞÖÆ£º
  • poll Öн« select ÖÐµÄ fd_set Ìæ»»³ÉÁËÒ»¸ö pollfd Êý×é
  • ½â¾ö fd ÊýÁ¿¹ýСµÄÎÊÌâ
  • Êý¾Ý¸´ÖÆ£ºÓû§¿Õ¼äºÍÄں˿ռ䣬¸´ÖÆÁ¬½Ó¾ÍÐ÷״̬ÐÅÏ¢
  • epoll£ºevent ʼþÇý¶¯

epoll£ºevent ʼþÇý¶¯

  • ʼþ»úÖÆ£º±ÜÃâÏßÐÔɨÃè
  • Ϊÿ¸ö fd£¬×¢²áÒ»¸ö¼àÌýʼþ
  • fd ±ä¸üΪ¾ÍÐ÷ʱ£¬½« fd Ìí¼Óµ½¾ÍÐ÷Á´±í
  • fd ÊýÁ¿£ºÎÞÏÞÖÆ£¨OS ¼¶±ðµÄÏÞÖÆ£¬µ¥¸ö½ø³ÌÄÜ´ò¿ª¶àÉÙ¸ö fd£©

select£¬poll£¬epoll£º

  1. I/O¶à·¸´ÓõĻúÖÆ£»
  2. I/O¶à·¸´ÓþÍͨ¹ýÒ»ÖÖ»úÖÆ£¬¿ÉÒÔ¼àÊÓ¶à¸öÃèÊö·û£¬Ò»µ©Ä³¸öÃèÊö·û¾ÍÐ÷£¨Ò»°ãÊǶÁ¾ÍÐ÷»òÕßд¾ÍÐ÷£©£¬Äܹ»Í¨Öª³ÌÐò½øÐÐÏàÓ¦µÄ¶Áд²Ù×÷¡£
  3. ¼àÊÓ¶à¸öÎļþÃèÊö·û
  4. µ«select£¬poll£¬epoll±¾ÖÊÉ϶¼ÊÇͬ²½I/O£º
  5. Óû§½ø³Ì¸ºÔð¶Áд£¨´ÓÄں˿ռ俽±´µ½Óû§¿Õ¼ä£©£¬¶Áд¹ý³ÌÖУ¬Óû§½ø³ÌÊÇ×èÈûµÄ£»
  6. Òì²½ IO£¬ÎÞÐèÓû§½ø³Ì¸ºÔð¶Áд£¬Òì²½IO£¬»á¸ºÔð´ÓÄں˿ռ俽±´µ½Óû§¿Õ¼ä£»

Nginx µÄ²¢·¢´¦ÀíÄÜÁ¦

¹ØÓÚ Nginx µÄ²¢·¢´¦ÀíÄÜÁ¦£º

  • ²¢·¢Á¬½ÓÊý£¬Ò»°ãÓÅ»¯ºó£¬·åÖµÄܱ£³ÖÔÚ 1~3w ×óÓÒ¡££¨ÄÚ´æºÍ CPU ºËÐÄÊý²»Í¬£¬»áÓнøÒ»²½ÓÅ»¯¿Õ¼ä£©?
  • ·¢±íÓÚ:
  • Ô­ÎÄÁ´½Ó£ºhttp://news.51cto.com/art/202001/609278.htm
  • ÈçÓÐÇÖȨ£¬ÇëÁªÏµ cloudcommunity@tencent.com ɾ³ý¡£

ɨÂë

Ìí¼ÓÕ¾³¤ ½ø½»Á÷Ⱥ

ÁìȡרÊô 10ÔªÎÞÃż÷ȯ

˽Ïí×îР¼¼Êõ¸É»õ

ɨÂë¼ÓÈ뿪·¢ÕßÉçȺ
Áìȯ
http://www.vxiaotou.com