Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Àí½âNginx¹¤×÷Ô­Àí
 
×÷ÕߣºRick617
  1479  次浏览      28
2020-1-17
 
±à¼­ÍƼö:
ÎÄÕ½éÉÜÁËNginxÄ£¿é»®·Ö¡¢Ä£¿é´¦ÀíºÍ´¦ÀíÁ÷³Ì¡¢NginxÇëÇó´¦ÀíÒÔ¼°Nginx¼Ü¹¹¼°¹¤×÷Á÷³ÌµÈÏà¹ØÄÚÈÝ£¬Ï£Íû¶ÔÄúÄÜÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚjianshu£¬ÓÉ»ðÁú¹ûÈí¼þLuca±à¼­ÍƼö¡£

1 ·´Ïò´úÀí

1.1 ¸ÅÄî

·´Ïò´úÀí£¨Reverse Proxy£©·½Ê½ÊÇÖ¸ÒÔ´úÀí·þÎñÆ÷À´½ÓÊÜinternetÉϵÄÁ¬½ÓÇëÇó£¬È»ºó½«ÇëÇóת·¢¸øÄÚ²¿ÍøÂçÉϵķþÎñÆ÷£¬²¢½«´Ó·þÎñÆ÷Éϵõ½µÄ½á¹û·µ»Ø¸øinternetÉÏÇëÇóÁ¬½ÓµÄ¿Í»§¶Ë£¬´Ëʱ´úÀí·þÎñÆ÷¶ÔÍâ¾Í±íÏÖΪһ¸ö·þÎñÆ÷¡£

¾Ù¸öÀý×Ó£¬±ÈÈçÎÒÏë·ÃÎÊ http://www.test.com/readme£¬µ«www.test.comÉϲ¢²»´æÔÚreadmeÒ³Ãæ£¬ÓÚÊÇËûÊÇ͵͵´ÓÁíÍâһ̨·þÎñÆ÷ÉÏÈ¡»ØÀ´£¬È»ºó×÷Ϊ×Ô¼ºµÄÄÚÈÝ·µ»ØÓû§£¬µ«Óû§²¢²»ÖªÇé¡£ÕâÀïËùÌáµ½µÄ www.test.com Õâ¸öÓòÃû¶ÔÓ¦µÄ·þÎñÆ÷¾ÍÉèÖÃÁË·´Ïò´úÀí¹¦ÄÜ¡£

½áÂÛ¾ÍÊÇ£¬·´Ïò´úÀí·þÎñÆ÷¶ÔÓÚ¿Í»§¶Ë¶øÑÔËü¾ÍÏñÊÇԭʼ·þÎñÆ÷£¬²¢ÇÒ¿Í»§¶Ë²»ÐèÒª½øÐÐÈκÎÌØ±ðµÄÉèÖ᣿ͻ§¶ËÏò·´Ïò´úÀíµÄÃüÃû¿Õ¼ä(name-space)ÖеÄÄÚÈÝ·¢ËÍÆÕͨÇëÇ󣬽Ó×Å·´Ïò´úÀí·þÎñÆ÷½«ÅжÏÏòºÎ´¦(ԭʼ·þÎñÆ÷)ת½»ÇëÇ󣬲¢½«»ñµÃµÄÄÚÈÝ·µ»Ø¸ø¿Í»§¶Ë£¬¾ÍÏñÕâЩÄÚÈÝÔ­±¾¾ÍÊÇËü×Ô¼ºµÄÒ»Ñù¡£

ÕýÏò´úÀí£¬¼ÈÈ»Óз´Ïò´úÀí£¬¾Í¿Ï¶¨ÓÐÕýÏò´úÀí¡£Ê²Ã´½ÐÕýÏò´úÀíÄØ£¿

ÕýÏò´úÀí£¨Forward Proxy£©Í¨³£¶¼±»¼ò³ÆÎª´úÀí£¬¾ÍÊÇÔÚÓû§ÎÞ·¨Õý³£·ÃÎÊÍⲿ×ÊÔ´£¬±È·½ËµÊܵ½GFWµÄÓ°ÏìÎÞ·¨·ÃÎÊtwitterµÄʱºò£¬ÎÒÃÇ¿ÉÒÔͨ¹ý´úÀíµÄ·½Ê½£¬ÈÃÓû§Èƹý·À»ðǽ£¬´Ó¶øÁ¬½Óµ½Ä¿±êÍøÂç»òÕß·þÎñ¡£

ÕýÏò´úÀíµÄ¹¤×÷Ô­Àí¾ÍÏñÒ»¸öÌø°å£¬±ÈÈ磺ÎÒ·ÃÎʲ»ÁËgoogle.com£¬µ«ÊÇÎÒÄÜ·ÃÎÊÒ»¸ö´úÀí·þÎñÆ÷A£¬AÄÜ·ÃÎÊgoogle.com£¬ÓÚÊÇÎÒÏÈÁ¬ÉÏ´úÀí·þÎñÆ÷A£¬¸æËßËûÎÒÐèÒªgoogle.comµÄÄÚÈÝ£¬A¾Íȥȡ»ØÀ´£¬È»ºó·µ»Ø¸øÎÒ¡£´ÓÍøÕ¾µÄ½Ç¶È£¬Ö»ÔÚ´úÀí·þÎñÆ÷À´È¡ÄÚÈݵÄʱºòÓÐÒ»´Î¼Ç¼£¬ÓÐʱºò²¢²»ÖªµÀÊÇÓû§µÄÇëÇó£¬Ò²Òþ²ØÁËÓû§µÄ×ÊÁÏ£¬ÕâÈ¡¾öÓÚ´úÀí¸æ²»¸æËßÍøÕ¾¡£

½áÂÛ¾ÍÊÇ£¬ÕýÏò´úÀíÊÇÒ»¸öλÓÚ¿Í»§¶ËºÍԭʼ·þÎñÆ÷(origin server)Ö®¼äµÄ·þÎñÆ÷¡£ÎªÁË´Óԭʼ·þÎñÆ÷È¡µÃÄÚÈÝ£¬¿Í»§¶ËÏò´úÀí·¢ËÍÒ»¸öÇëÇó²¢Ö¸¶¨Ä¿±ê(ԭʼ·þÎñÆ÷)£¬È»ºó´úÀíÏòԭʼ·þÎñÆ÷ת½»ÇëÇó²¢½«»ñµÃµÄÄÚÈÝ·µ»Ø¸ø¿Í»§¶Ë¡£

·´Ïò´úÀíVSÕýÏò´úÀí£º

ÕýÏò´úÀíʾÒâͼ

·´Ïò´úÀíʾÒâͼ

1.2 ¹¤×÷Á÷³Ì

Óû§Í¨¹ýÓòÃû·¢³ö·ÃÎÊWeb·þÎñÆ÷µÄÇëÇ󣬸ÃÓòÃû±»DNS·þÎñÆ÷½âÎöΪ·´Ïò´úÀí·þÎñÆ÷µÄIPµØÖ·£»

·´Ïò´úÀí·þÎñÆ÷½ÓÊÜÓû§µÄÇëÇó£»

·´Ïò´úÀí·þÎñÆ÷ÔÚ±¾µØ»º´æÖвéÕÒÇëÇóµÄÄÚÈÝ£¬ÕÒµ½ºóÖ±½Ó°ÑÄÚÈÝ·¢Ë͸øÓû§£»

Èç¹û±¾µØ»º´æÀïûÓÐÓû§ËùÇëÇóµÄÐÅÏ¢ÄÚÈÝ£¬·´Ïò´úÀí·þÎñÆ÷»á´úÌæÓû§ÏòÔ´·þÎñÆ÷ÇëÇóͬÑùµÄÐÅÏ¢ÄÚÈÝ£¬²¢°ÑÐÅÏ¢ÄÚÈÝ·¢¸øÓû§£¬Èç¹ûÐÅÏ¢ÄÚÈÝÊÇ»º´æµÄ»¹»á°ÑËü±£´æµ½»º´æÖС£

1.3 Óŵã

±£»¤ÁËÕæÊµµÄweb·þÎñÆ÷£¬±£Ö¤ÁËweb·þÎñÆ÷µÄ×ÊÔ´°²È«

ͨ³£µÄ´úÀí·þÎñÆ÷£¬Ö»ÓÃÓÚ´úÀíÄÚ²¿ÍøÂç¶ÔInternetÍâ²¿ÍøÂçµÄÁ¬½ÓÇëÇ󣬿ͻ§»ú±ØÐëÖ¸¶¨´úÀí·þÎñÆ÷£¬²¢½«±¾À´ÒªÖ±½Ó·¢Ë͵½Web·þÎñÆ÷ÉϵÄhttpÇëÇó·¢Ë͵½´úÀí·þÎñÆ÷ÖС£²»Ö§³ÖÍâ²¿ÍøÂç¶ÔÄÚ²¿ÍøÂçµÄÁ¬½ÓÇëÇó£¬ÒòΪÄÚ²¿ÍøÂç¶ÔÍâ²¿ÍøÂçÊDz»¿É¼ûµÄ¡£µ±Ò»¸ö´úÀí·þÎñÆ÷Äܹ»´úÀíÍâ²¿ÍøÂçÉϵÄÖ÷»ú£¬·ÃÎÊÄÚ²¿ÍøÂçʱ£¬ÕâÖÖ´úÀí·þÎñµÄ·½Ê½³ÆÎª·´Ïò´úÀí·þÎñ¡£´Ëʱ´úÀí·þÎñÆ÷¶ÔÍâ¾Í±íÏÖΪһ¸öWeb·þÎñÆ÷£¬Íâ²¿ÍøÂç¾Í¿ÉÒÔ¼òµ¥°ÑËüµ±×÷Ò»¸ö±ê×¼µÄWeb·þÎñÆ÷¶ø²»ÐèÒªÌØ¶¨µÄÅäÖᣲ»Í¬Ö®´¦ÔÚÓÚ£¬Õâ¸ö·þÎñÆ÷ûÓб£´æÈκÎÍøÒ³µÄÕæÊµÊý¾Ý£¬ËùÓеľ²Ì¬ÍøÒ³»òÕßCGI³ÌÐò£¬¶¼±£´æÔÚÄÚ²¿µÄWeb·þÎñÆ÷ÉÏ¡£Òò´Ë¶Ô·´Ïò´úÀí·þÎñÆ÷µÄ¹¥»÷²¢²»»áʹµÃÍøÒ³ÐÅÏ¢Ôâµ½ÆÆ»µ£¬ÕâÑù¾ÍÔöÇ¿ÁËWeb·þÎñÆ÷µÄ°²È«ÐÔ¡£

½ÚÔ¼ÁËÓÐÏÞµÄIPµØÖ·×ÊÔ´

ÆóÒµÄÚËùÓеÄÍøÕ¾¹²ÏíÒ»¸öÔÚinternetÖÐ×¢²áµÄIPµØÖ·£¬ÕâЩ·þÎñÆ÷·ÖÅä˽ÓеØÖ·£¬²ÉÓÃÐéÄâÖ÷»úµÄ·½Ê½¶ÔÍâÌṩ·þÎñ¡£

¼õÉÙWEB·þÎñÆ÷ѹÁ¦£¬Ìá¸ßÏìÓ¦ËÙ¶È

·´Ïò´úÀí¾ÍÊÇͨ³£Ëù˵µÄweb·þÎñÆ÷¼ÓËÙ£¬ËüÊÇÒ»ÖÖͨ¹ýÔÚ·±Ã¦µÄweb·þÎñÆ÷ºÍÍâ²¿ÍøÂçÖ®¼äÔö¼ÓÒ»¸ö¸ßËÙµÄweb»º³å·þÎñÆ÷À´½µµÍʵ¼ÊµÄweb·þÎñÆ÷µÄ¸ºÔصÄÒ»ÖÖ¼¼Êõ¡£·´Ïò´úÀíÊÇÕë¶Ôweb·þÎñÆ÷Ìá¸ß¼ÓËÙ¹¦ÄÜ£¬×÷Ϊ´úÀí»º´æ£¬Ëü²¢²»ÊÇÕë¶Ôä¯ÀÀÆ÷Óû§£¬¶øÕë¶Ôһ̨»ò¶àÌ¨ÌØ¶¨µÄweb·þÎñÆ÷£¬Ëü¿ÉÒÔ´úÀíÍâ²¿ÍøÂç¶ÔÄÚ²¿ÍøÂçµÄ·ÃÎÊÇëÇó¡£

·´Ïò´úÀí·þÎñÆ÷»áÇ¿ÖÆ½«Íâ²¿ÍøÂç¶ÔÒª´úÀíµÄ·þÎñÆ÷µÄ·ÃÎʾ­¹ýËü£¬ÕâÑù·´Ïò´úÀí·þÎñÆ÷¸ºÔð½ÓÊÕ¿Í»§¶ËµÄÇëÇó£¬È»ºóµ½Ô´·þÎñÆ÷ÉÏ»ñÈ¡ÄÚÈÝ£¬°ÑÄÚÈÝ·µ»Ø¸øÓû§£¬²¢°ÑÄÚÈݱ£´æµ½±¾µØ£¬ÒÔ±ãÈÕºóÔÙÊÕµ½Í¬ÑùµÄÐÅÏ¢ÇëÇóʱ£¬Ëü»á°Ñ±¾µØ»º´æÀïµÄÄÚÈÝÖ±½Ó·¢¸øÓû§£¬ÒÔ¼õÉÙºó¶Ëweb·þÎñÆ÷µÄѹÁ¦£¬Ìá¸ßÏìÓ¦ËÙ¶È¡£Òò´ËNginx»¹¾ßÓлº´æ¹¦ÄÜ¡£

ÆäËûÓŵã

£¨1£©ÇëÇóµÄͳһ¿ØÖÆ£¬°üÀ¨ÉèÖÃȨÏÞ¡¢¹ýÂ˹æÔòµÈ£»

£¨2£©Çø·Ö¶¯Ì¬ºÍ¾²Ì¬¿É»º´æÄÚÈÝ£»

£¨3£©ÊµÏÖ¸ºÔؾùºâ£¬ÄÚ²¿¿ÉÒÔ²ÉÓöą̀·þÎñÆ÷À´×é³É·þÎñÆ÷¼¯Èº£¬Íⲿ»¹ÊÇ¿ÉÒÔ²ÉÓÃÒ»¸öµØÖ··ÃÎÊ£»

£¨4£©½â¾öAjax¿çÓòÎÊÌ⣻

£¨5£©×÷ÎªÕæÊµ·þÎñÆ÷µÄ»º³å£¬½â¾ö˲¼ä¸ºÔØÁ¿´óµÄÎÊÌ⣻

2 NginxÄ£¿é

NginxÓÐÎå´óÓŵ㣺ģ¿é»¯¡¢Ê¼þÇý¶¯¡¢Òì²½¡¢·Ç×èÈû¡¢¶à½ø³Ìµ¥Ï̡߳£ÓÉÄں˺ÍÄ£¿é×é³ÉµÄ£¬ÆäÖÐÄÚºËÍê³ÉµÄ¹¤×÷±È½Ï¼òµ¥£¬½ö½öͨ¹ý²éÕÒÅäÖÃÎļþ½«¿Í»§¶ËÇëÇóÓ³Éäµ½Ò»¸ölocation block£¬È»ºóÓÖ½«Õâ¸ölocation blockÖÐËùÅäÖõÄÿ¸öÖ¸Á»áÆô¶¯²»Í¬µÄÄ£¿éÈ¥Íê³ÉÏàÓ¦µÄ¹¤×÷¡£

2.1 Ä£¿é»®·Ö

NginxµÄÄ£¿é´Ó½á¹¹ÉÏ·ÖΪºËÐÄÄ£¿é¡¢»ù´¡Ä£¿éºÍµÚÈý·½Ä£¿é£º

ºËÐÄÄ£¿é£ºHTTPÄ£¿é¡¢EVENTÄ£¿éºÍMAILÄ£¿é

»ù´¡Ä£¿é£ºHTTP AccessÄ£¿é¡¢HTTP FastCGIÄ£¿é¡¢HTTP ProxyÄ£¿éºÍHTTP RewriteÄ£¿é£¬

µÚÈý·½Ä£¿é£ºHTTP Upstream Request HashÄ£¿é¡¢NoticeÄ£¿éºÍHTTP Access KeyÄ£¿é¡£

NginxµÄÄ£¿é´Ó¹¦ÄÜÉÏ·ÖΪÈçÏÂËÄÀࣺ

Core(ºËÐÄÄ£¿é)£º¹¹½¨nginx»ù´¡·þÎñ¡¢¹ÜÀíÆäËûÄ£¿é¡£

Handlers£¨´¦ÀíÆ÷Ä£¿é£©£º´ËÀàÄ£¿éÖ±½Ó´¦ÀíÇëÇ󣬲¢½øÐÐÊä³öÄÚÈݺÍÐÞ¸ÄheadersÐÅÏ¢µÈ²Ù×÷¡£

Filters £¨¹ýÂËÆ÷Ä£¿é£©£º´ËÀàÄ£¿éÖ÷Òª¶ÔÆäËû´¦ÀíÆ÷Ä£¿éÊä³öµÄÄÚÈݽøÐÐÐ޸IJÙ×÷£¬×îºóÓÉNginxÊä³ö¡£

Proxies £¨´úÀíÀàÄ£¿é£©£º´ËÀàÄ£¿éÊÇNginxµÄHTTP UpstreamÖ®ÀàµÄÄ£¿é£¬ÕâЩģ¿éÖ÷ÒªÓëºó¶ËһЩ·þÎñ±ÈÈçFastCGIµÈ½øÐн»»¥£¬ÊµÏÖ·þÎñ´úÀíºÍ¸ºÔؾùºâµÈ¹¦ÄÜ¡£

NginxµÄºËÐÄÄ£¿éÖ÷Òª¸ºÔð½¨Á¢nginx·þÎñÄ£ÐÍ¡¢¹ÜÀíÍøÂç²ãºÍÓ¦ÓòãЭÒé¡¢ÒÔ¼°Æô¶¯Õë¶ÔÌØ¶¨Ó¦ÓõÄһϵÁкòѡģ¿é¡£ÆäËûÄ£¿é¸ºÔð·ÖÅ䏸web·þÎñÆ÷µÄʵ¼Ê¹¤×÷£º

(1) µ±Nginx·¢ËÍÎļþ»òÕßת·¢ÇëÇ󵽯äËû·þÎñÆ÷£¬ÓÉHandlers(´¦ÀíÄ£¿é)»òProxies£¨´úÀíÀàÄ£¿é£©Ìṩ·þÎñ£»

(2) µ±ÐèÒªNginx°ÑÊä³öѹËõ»òÕßÔÚ·þÎñ¶Ë¼ÓһЩ¶«Î÷£¬ÓÉFilters(¹ýÂËÄ£¿é)Ìṩ·þÎñ¡£

2.2 Ä£¿é´¦Àí

µ±·þÎñÆ÷Æô¶¯£¬Ã¿¸öhandlers(´¦ÀíÄ£¿é)¶¼Óлú»áÓ³Éäµ½ÅäÖÃÎļþÖж¨ÒåµÄÌØ¶¨Î»Öã¨location£©£»Èç¹ûÓжà¸öhandlers(´¦ÀíÄ£¿é)Ó³Éäµ½ÌØ¶¨Î»ÖÃʱ£¬Ö»ÓÐÒ»¸ö»á¡°Ó®¡±£¨ËµÃ÷ÅäÖÃÎļþÓгåÍ»ÏӦ¸Ã±ÜÃâ·¢Éú£©¡£

´¦ÀíÄ£¿éÒÔÈýÖÖÐÎʽ·µ»Ø£º

OK

ERROR

»òÕß·ÅÆú´¦ÀíÕâ¸öÇëÇó¶øÈÃĬÈÏ´¦ÀíÄ£¿éÀ´´¦Àí£¨Ö÷ÒªÊÇÓÃÀ´´¦ÀíһЩ¾²Ì¬Îļþ£¬ÊÂʵÉÏÈç¹ûÊÇλÖÃÕýÈ·¶øÕæÊµµÄ¾²Ì¬Îļþ£¬Ä¬ÈϵĴ¦ÀíÄ£¿é»áÇÀÏÈ´¦Àí£©¡£

Èç¹ûhandlers(´¦ÀíÄ£¿é)°ÑÇëÇó·´Ïò´úÀíµ½ºó¶ËµÄ·þÎñÆ÷£¬¾Í±ä³ÉÁíÍâÒ»ÀàµÄÄ£¿é£ºload-balancers£¨¸ºÔؾùºâÄ£¿é£©¡£¸ºÔؾùºâÄ£¿éµÄÅäÖÃÖÐÓÐÒ»×éºó¶Ë·þÎñÆ÷£¬µ±Ò»¸öHTTPÇëÇó¹ýÀ´Ê±£¬Ëü¾ö¶¨ÄĄ̈·þÎñÆ÷Ó¦µ±»ñµÃÕâ¸öÇëÇó¡£

NginxµÄ¸ºÔؾùºâÄ£¿é²ÉÓÃÁ½ÖÖ·½·¨£º

ÂÖת·¨£¬Ëü´¦ÀíÇëÇó¾ÍÏñֽůÓÎÏ·Ò»Ñù´ÓÍ·µ½Î²·Ö·¢£»

IP¹þÏ£·¨£¬ÔÚÖÚ¶àÇëÇóµÄÇé¿öÏ£¬ËüÈ·±£À´×Ôͬһ¸öIPµÄÇëÇó»á·Ö·¢µ½ÏàͬµÄºó¶Ë·þÎñÆ÷¡£

Èç¹ûhandlers(´¦ÀíÄ£¿é)ûÓвúÉú´íÎó£¬filters£¨¹ýÂËÄ£¿é£©½«±»µ÷Ó᣶à¸öfilters£¨¹ýÂËÄ£¿é£©ÄÜÓ³É䵽ÿ¸öλÖã¬ËùÒÔ£¨±ÈÈ磩ÿ¸öÇëÇ󶼿ÉÒÔ±»Ñ¹Ëõ³É¿é¡£ËüÃǵÄÖ´ÐÐ˳ÐòÔÚ±àÒëʱ¾ö¶¨¡£

filters£¨¹ýÂËÄ£¿é£©ÊǾ­µäµÄ¡°½ÓÁ¦Á´±í£¨CHAIN OF RESPONSIBILITY£©¡±Ä£ÐÍ£ºÒ»¸öfilters£¨¹ýÂËÄ£¿é£©±»µ÷Óã¬Íê³ÉÆä¹¤×÷£¬È»ºóµ÷ÓÃÏÂÒ»¸öfilters£¨¹ýÂËÄ£¿é£©£¬Ö±µ½×îºóÒ»¸öfilters£¨¹ýÂËÄ£¿é£©¡£

¹ýÂËÄ£¿éÁ´µÄÌØ±ðÖ®´¦ÔÚÓÚ£º

ÿ¸öfilters£¨¹ýÂËÄ£¿é£©²»»áµÈÉÏÒ»¸öfilters£¨¹ýÂËÄ£¿é£©È«²¿Íê³É£»

ËüÄܰÑǰһ¸ö¹ýÂËÄ£¿éµÄÊä³ö×÷ΪÆä´¦ÀíÄÚÈÝ£»ÓеãÏñUnixÖеÄÁ÷Ë®Ïߣ»

¹ýÂËÄ£¿éÄÜÒÔbuffer£¨»º³åÇø£©Îªµ¥Î»½øÐвÙ×÷£¬ÕâЩbufferÒ»°ã¶¼ÊÇÒ»Ò³£¨4K£©´óС£¬µ±È»ÄãÒ²¿ÉÒÔÔÚnginx.confÎļþÖнøÐÐÅäÖá£ÕâÒâζ×Å£¬±ÈÈ磬ģ¿é¿ÉÒÔѹËõÀ´×Ôºó¶Ë·þÎñÆ÷µÄÏìÓ¦£¬È»ºóÏñÁ÷Ò»ÑùµÄµ½´ï¿Í»§¶Ë£¬Ö±µ½Õû¸öÏìÓ¦·¢ËÍÍê³É¡£

×ÜÖ®£¬¹ýÂËÄ£¿éÁ´ÒÔÁ÷Ë®Ïߵķ½Ê½¸ßЧÂʵØÏò¿Í»§¶Ë·¢ËÍÏìÓ¦ÐÅÏ¢¡£

ËùÒÔ×ܽáÏÂÉÏÃæµÄÄÚÈÝ£¬Ò»¸öµäÐ͵ÄHTTP´¦ÀíÖÜÆÚÊÇÕâÑùµÄ£º

¿Í»§¶Ë·¢ËÍHTTPÇëÇó ¨C>

Nginx»ùÓÚÅäÖÃÎļþÖеÄλÖÃÑ¡ÔñÒ»¸öºÏÊʵĴ¦ÀíÄ£¿é ->

(Èç¹ûÓÐ)¸ºÔؾùºâÄ£¿éÑ¡Ôñһ̨ºó¶Ë·þÎñÆ÷ ¨C>

´¦ÀíÄ£¿é½øÐд¦Àí²¢°ÑÊä³ö»º³å·Åµ½µÚÒ»¸ö¹ýÂËÄ£¿éÉÏ ¨C>

µÚÒ»¸ö¹ýÂËÄ£¿é´¦ÀíºóÊä³ö¸øµÚ¶þ¸ö¹ýÂËÄ£¿é ¨C>

È»ºóµÚ¶þ¸ö¹ýÂËÄ£¿éÓÖµ½µÚÈý¸ö ¨C>

ÒÀ´ËÀàÍÆ ¨C> ×îºó°ÑÏìÓ¦·¢¸ø¿Í»§¶Ë¡£

ÏÂͼչʾÁËNginxÄ£¿é´¦ÀíÁ÷³Ì£º

NginxÄ£¿é´¦ÀíÁ÷³Ì

Nginx±¾Éí×öµÄ¹¤×÷ʵ¼ÊºÜÉÙ£¬µ±Ëü½Óµ½Ò»¸öHTTPÇëÇóʱ£¬Ëü½ö½öÊÇͨ¹ý²éÕÒÅäÖÃÎļþ½«´Ë´ÎÇëÇóÓ³Éäµ½Ò»¸ölocation block£¬¶ø´ËlocationÖÐËùÅäÖõĸ÷¸öÖ¸ÁîÔò»áÆô¶¯²»Í¬µÄÄ£¿éÈ¥Íê³É¹¤×÷£¬Òò´ËÄ£¿é¿ÉÒÔ¿´×öNginxÕæÕýµÄÀͶ¯¹¤×÷Õß¡£Í¨³£Ò»¸ölocationÖеÄÖ¸Áî»áÉæ¼°Ò»¸öhandlerÄ£¿éºÍ¶à¸öfilterÄ£¿é£¨µ±È»£¬¶à¸ölocation¿ÉÒÔ¸´ÓÃͬһ¸öÄ£¿é£©¡£handlerÄ£¿é¸ºÔð´¦ÀíÇëÇó£¬Íê³ÉÏìÓ¦ÄÚÈݵÄÉú³É£¬¶øfilterÄ£¿é¶ÔÏìÓ¦ÄÚÈݽøÐд¦Àí¡£

3 NginxÇëÇó´¦Àí

NginxÔÚÆô¶¯Ê±»áÒÔdaemonÐÎʽÔÚºǫ́ÔËÐУ¬²ÉÓÃ¶à½ø³Ì+Òì²½·Ç×èÈûIOʼþÄ£ÐÍÀ´´¦Àí¸÷ÖÖÁ¬½ÓÇëÇó¡£¶à½ø³ÌÄ£ÐͰüÀ¨Ò»¸ömaster½ø³Ì£¬¶à¸öworker½ø³Ì£¬Ò»°ãworker½ø³Ì¸öÊýÊǸù¾Ý·þÎñÆ÷CPUºËÊýÀ´¾ö¶¨µÄ¡£master½ø³Ì¸ºÔð¹ÜÀíNginx±¾ÉíºÍÆäËûworker½ø³Ì¡£ÈçÏÂͼ£º

Master½ø³Ì¸ºÔð¹ÜÀíNginx±¾ÉíºÍÆäËûworker½ø³Ì

Master-Workerģʽ

´ÓÉÏͼÖпÉÒÔºÜÃ÷ÏԵؿ´µ½£¬4¸öworker½ø³ÌµÄ¸¸½ø³Ì¶¼ÊÇmaster½ø³Ì£¬±íÃ÷worker½ø³Ì¶¼ÊÇ´Ó¸¸½ø³Ìfork³öÀ´µÄ£¬²¢ÇÒ¸¸½ø³ÌµÄppidΪ1£¬±íʾÆäΪdaemon½ø³Ì¡£

ÐèҪ˵Ã÷µÄÊÇ£¬ÔÚnginx¶à½ø³ÌÖУ¬Ã¿¸öworker¶¼ÊÇÆ½µÈµÄ£¬Òò´Ëÿ¸ö½ø³Ì´¦ÀíÍⲿÇëÇóµÄ»ú»áÈ¨ÖØ¶¼ÊÇÒ»Öµġ£

Master½ø³ÌµÄ×÷ÓÃÊÇ£¿

¶ÁÈ¡²¢ÑéÖ¤ÅäÖÃÎļþnginx.conf£»¹ÜÀíworker½ø³Ì£»

Worker½ø³ÌµÄ×÷ÓÃÊÇ£¿

ÿһ¸öWorker½ø³Ì¶¼Î¬»¤Ò»¸öỊ̈߳¨±ÜÃâÏß³ÌÇл»£©£¬´¦ÀíÁ¬½ÓºÍÇëÇó£»×¢ÒâWorker½ø³ÌµÄ¸öÊýÓÉÅäÖÃÎļþ¾ö¶¨£¬Ò»°ãºÍCPU¸öÊýÏà¹Ø£¨ÓÐÀûÓÚ½ø³ÌÇл»£©£¬ÅäÖü¸¸ö¾ÍÓм¸¸öWorker½ø³Ì¡£

NginxÈçºÎ×öµ½ÈȲ¿Êð£¿

ËùνÈȲ¿Ê𣬾ÍÊÇÅäÖÃÎļþnginx.confÐ޸ĺ󣬲»ÐèÒªstop Nginx£¬²»ÐèÒªÖжÏÇëÇ󣬾ÍÄÜÈÃÅäÖÃÎļþÉúЧ£¡£¨nginx -s reload ÖØÐ¼ÓÔØ/nginx -t¼ì²éÅäÖÃ/nginx -s stop£©

ͨ¹ýÉÏÎÄÎÒÃÇÒѾ­ÖªµÀworker½ø³Ì¸ºÔð´¦Àí¾ßÌåµÄÇëÇó£¬ÄÇôÈç¹ûÏë´ïµ½ÈȲ¿ÊðµÄЧ¹û£¬¿ÉÒÔÏëÏó£º

·½°¸Ò»£º

ÐÞ¸ÄÅäÖÃÎļþnginx.confºó£¬Ö÷½ø³Ìmaster¸ºÔðÍÆË͸øwoker½ø³Ì¸üÐÂÅäÖÃÐÅÏ¢£¬woker½ø³ÌÊÕµ½ÐÅÏ¢ºó£¬¸üнø³ÌÄÚ²¿µÄÏß³ÌÐÅÏ¢¡£

·½°¸¶þ£º

ÐÞ¸ÄÅäÖÃÎļþnginx.confºó£¬ÖØÐÂÉú³ÉеÄworker½ø³Ì£¬µ±È»»áÒÔеÄÅäÖýøÐд¦ÀíÇëÇ󣬶øÇÒеÄÇëÇó±ØÐë¶¼½»¸øÐµÄworker½ø³Ì£¬ÖÁÓÚÀϵÄworker½ø³Ì£¬µÈ°ÑÄÇЩÒÔǰµÄÇëÇó´¦ÀíÍê±Ïºó£¬killµô¼´¿É¡£

Nginx²ÉÓõľÍÊÇ·½°¸¶þÀ´´ïµ½ÈȲ¿ÊðµÄ£¡

NginxÈçºÎ×öµ½¸ß²¢·¢ÏµĸßЧ´¦Àí£¿

ÉÏÎÄÒѾ­Ìá¼°NginxµÄworker½ø³Ì¸öÊýÓëCPU°ó¶¨¡¢worker½ø³ÌÄÚ²¿°üº¬Ò»¸öÏ̸߳ßЧ»Ø»·´¦ÀíÇëÇó£¬ÕâµÄÈ·ÓÐÖúÓÚЧÂÊ£¬µ«ÕâÊDz»¹»µÄ¡£

×÷ΪרҵµÄ³ÌÐòÔ±£¬ÎÒÃÇ¿ÉÒÔ¿ªÒ»ÏÂÄÔ¶´£ºBIO/NIO/AIO¡¢Òì²½/ͬ²½¡¢×èÈû/·Ç×èÈû...

Ҫͬʱ´¦ÀíÄÇô¶àµÄÇëÇó£¬ÒªÖªµÀ£¬ÓеÄÇëÇóÐèÒª·¢ÉúIO£¬¿ÉÄÜÐèÒªºÜ³¤Ê±¼ä£¬Èç¹ûµÈ×ÅËü£¬¾Í»áÍÏÂýworkerµÄ´¦ÀíËÙ¶È¡£

Nginx²ÉÓÃÁËLinuxµÄepollÄ£ÐÍ£¬epollÄ£ÐÍ»ùÓÚʼþÇý¶¯»úÖÆ£¬Ëü¿ÉÒÔ¼à¿Ø¶à¸öʼþÊÇ·ñ×¼±¸Íê±Ï£¬Èç¹ûOK£¬ÄÇô·ÅÈëepoll¶ÓÁÐÖУ¬Õâ¸ö¹ý³ÌÊÇÒì²½µÄ¡£workerÖ»ÐèÒª´Óepoll¶ÓÁÐÑ­»·´¦Àí¼´¿É¡£

Nginx¹ÒÁËÔõô°ì£¿

Nginx¼ÈÈ»×÷ΪÈë¿ÚÍø¹Ø£¬ºÜÖØÒª£¬Èç¹û³öÏÖµ¥µãÎÊÌ⣬ÏÔÈ»ÊDz»¿É½ÓÊܵġ£

´ð°¸ÊÇ£ºKeepalived+NginxʵÏָ߿ÉÓá£

KeepalivedÊÇÒ»¸ö¸ß¿ÉÓýâ¾ö·½°¸£¬Ö÷ÒªÊÇÓÃÀ´·ÀÖ¹·þÎñÆ÷µ¥µã·¢Éú¹ÊÕÏ£¬¿ÉÒÔͨ¹ýºÍNginxÅäºÏÀ´ÊµÏÖWeb·þÎñµÄ¸ß¿ÉÓᣣ¨Æäʵ£¬Keepalived²»½ö½ö¿ÉÒÔºÍNginxÅäºÏ£¬»¹¿ÉÒԺͺܶàÆäËû·þÎñÅäºÏ£©

Keepalived+NginxʵÏָ߿ÉÓõÄ˼·£º

µÚÒ»£ºÇëÇó²»ÒªÖ±½Ó´òµ½NginxÉÏ£¬Ó¦¸ÃÏÈͨ¹ýKeepalived£¨Õâ¾ÍÊÇËùνÐéÄâIP£¬VIP£©

µÚ¶þ£ºKeepalivedÓ¦¸ÃÄÜ¼à¿ØNginxµÄÉúÃü״̬£¨Ìṩһ¸öÓû§×Ô¶¨ÒåµÄ½Å±¾£¬¶¨ÆÚ¼ì²éNginx½ø³Ì״̬£¬½øÐÐÈ¨ÖØ±ä»¯,£¬´Ó¶øÊµÏÖNginx¹ÊÕÏÇл»£©

Keepalived+Nginx

Nginx¼Ü¹¹¼°¹¤×÷Á÷³Ìͼ£º

Nginx¼Ü¹¹¼°¹¤×÷Á÷³Ìͼ

NginxÕæÕý´¦ÀíÇëÇóÒµÎñµÄÊÇWorker֮ϵÄÏ̡߳£worker½ø³ÌÖÐÓÐÒ»¸öngx_worker_process_cycle()º¯Êý£¬Ö´ÐÐÎÞÏÞÑ­»·£¬²»¶Ï´¦ÀíÊÕµ½µÄÀ´×Ô¿Í»§¶ËµÄÇëÇ󣬲¢½øÐд¦Àí£¬Ö±µ½Õû¸öNginx·þÎñ±»Í£Ö¹¡£

worker ½ø³ÌÖУ¬ngx_worker_process_cycle()º¯Êý¾ÍÊÇÕâ¸öÎÞÏÞÑ­»·µÄ´¦Àíº¯Êý¡£ÔÚÕâ¸öº¯ÊýÖУ¬Ò»¸öÇëÇóµÄ¼òµ¥´¦ÀíÁ÷³ÌÈçÏ£º

²Ù×÷ϵͳÌṩµÄ»úÖÆ£¨ÀýÈç epoll, kqueue µÈ£©²úÉúÏà¹ØµÄʼþ¡£

½ÓÊպʹ¦ÀíÕâЩʼþ£¬ÈçÊǽÓÊÕµ½Êý¾Ý£¬Ôò²úÉú¸ü¸ß²ãµÄ request ¶ÔÏó¡£

´¦Àí request µÄ header ºÍ body¡£

²úÉúÏìÓ¦£¬²¢·¢Ëͻؿͻ§¶Ë¡£

Íê³É request µÄ´¦Àí¡£

ÖØÐ³õʼ»¯¶¨Ê±Æ÷¼°ÆäËûʼþ¡£

3.1 ¶à½ø³Ì´¦ÀíÄ£ÐÍ

ÏÂÃæÀ´½éÉÜÒ»¸öÇëÇó½øÀ´£¬¶à½ø³ÌÄ£Ð͵Ĵ¦Àí·½Ê½£º

Ê×ÏÈ£¬master½ø³ÌÒ»¿ªÊ¼¾Í»á¸ù¾ÝÎÒÃǵÄÅäÖã¬À´½¨Á¢ÐèÒªlistenµÄÍøÂçsocket fd£¬È»ºófork³ö¶à¸öworker½ø³Ì¡£

Æä´Î£¬¸ù¾Ý½ø³ÌµÄÌØÐÔ£¬Ð½¨Á¢µÄworker½ø³Ì£¬Ò²»áºÍmaster½ø³ÌÒ»Ñù£¬¾ßÓÐÏàͬµÄÉèÖá£Òò´Ë£¬ÆäÒ²»áÈ¥¼àÌýÏàͬip¶Ë¿ÚµÄÌ×½Ó×Ösocket fd¡£

È»ºó£¬Õâ¸öʱºòÓжà¸öworker½ø³Ì¶¼ÔÚ¼àÌýͬÑùÉèÖõÄsocket fd£¬Òâζ×ŵ±ÓÐÒ»¸öÇëÇó½øÀ´µÄʱºò£¬ËùÓеÄworker¶¼»á¸ÐÖªµ½¡£ÕâÑù¾Í»á²úÉúËùνµÄ¡°¾ªÈºÏÖÏ󡱡£ÎªÁ˱£Ö¤Ö»»áÓÐÒ»¸ö½ø³Ì³É¹¦×¢²áµ½listenfdµÄ¶Áʼþ£¬nginxÖÐʵÏÖÁËÒ»¸ö¡°accept_mutex¡±ÀàËÆ»¥³âËø£¬Ö»ÓлñÈ¡µ½Õâ¸öËøµÄ½ø³Ì£¬²Å¿ÉÒÔÈ¥×¢²á¶Áʼþ¡£ÆäËû½ø³ÌÈ«²¿accept ʧ°Ü¡£

×îºó£¬¼àÌý³É¹¦µÄworker½ø³Ì£¬¶ÁÈ¡ÇëÇ󣬽âÎö´¦Àí£¬ÏìÓ¦Êý¾Ý·µ»Ø¸ø¿Í»§¶Ë£¬¶Ï¿ªÁ¬½Ó£¬½áÊø¡£Òò´Ë£¬Ò»¸örequestÇëÇó£¬Ö»ÐèÒªworker½ø³Ì¾Í¿ÉÒÔÍê³É¡£

½ø³ÌÄ£Ð͵Ĵ¦Àí·½Ê½´øÀ´µÄһЩºÃ´¦¾ÍÊÇ£º½ø³ÌÖ®¼äÊǶÀÁ¢µÄ£¬Ò²¾ÍÊÇÒ»¸öworker½ø³Ì³öÏÖÒì³£Í˳ö£¬ÆäËûworker½ø³ÌÊDz»»áÊܵ½Ó°ÏìµÄ£»´ËÍ⣬¶ÀÁ¢½ø³ÌÒ²»á±ÜÃâһЩ²»ÐèÒªµÄËø²Ù×÷£¬ÕâÑù×Ó»áÌá¸ß´¦ÀíЧÂÊ£¬²¢ÇÒ¿ª·¢µ÷ÊÔÒ²¸üÈÝÒס£

ÈçǰÎÄËùÊö£¬¶à½ø³ÌÄ£ÐÍ+Òì²½·Ç×èÈûÄ£ÐͲÅÊÇʤ³öµÄ·½°¸¡£µ¥´¿µÄ¶à½ø³ÌÄ£ÐͻᵼÖÂÁ¬½Ó²¢·¢ÊýÁ¿µÄ½µµÍ£¬¶ø²ÉÓÃÒì²½·Ç×èÈûIOÄ£ÐͺܺõĽâ¾öÁËÕâ¸öÎÊÌ⣻²¢ÇÒ»¹Òò´Ë±ÜÃâµÄ¶àÏ̵߳ÄÉÏÏÂÎÄÇл»µ¼ÖµÄÐÔÄÜËðʧ¡£

worker½ø³Ì»á¾ºÕù¼àÌý¿Í»§¶ËµÄÁ¬½ÓÇëÇó£ºÕâÖÖ·½Ê½¿ÉÄÜ»á´øÀ´Ò»¸öÎÊÌ⣬¾ÍÊÇ¿ÉÄÜËùÓеÄÇëÇó¶¼±»Ò»¸öworker½ø³Ì¸ø¾ºÕù»ñÈ¡ÁË£¬µ¼ÖÂÆäËû½ø³Ì¶¼±È½Ï¿ÕÏУ¬¶øÄ³Ò»¸ö½ø³Ì»á´¦ÓÚæµµÄ״̬£¬ÕâÖÖ״̬¿ÉÄÜ»¹»áµ¼ÖÂÎÞ·¨¼°Ê±ÏìÓ¦Á¬½Ó¶ø¶ªÆúdiscardµô±¾ÓÐÄÜÁ¦´¦ÀíµÄÇëÇó¡£ÕâÖÖ²»¹«Æ½µÄÏÖÏó£¬ÊÇÐèÒª±ÜÃâµÄ£¬ÓÈÆäÊÇÔڸ߿ɿ¿web·þÎñÆ÷»·¾³Ï¡£

Õë¶ÔÕâÖÖÏÖÏó£¬Nginx²ÉÓÃÁËÒ»¸öÊÇ·ñ´ò¿ªaccept_mutexÑ¡ÏîµÄÖµ£¬ngx_accept_disabled±êʶ¿ØÖÆÒ»¸öworker½ø³ÌÊÇ·ñÐèҪȥ¾ºÕù»ñÈ¡accept_mutexÑ¡Ï½ø¶ø»ñÈ¡acceptʼþ¡£

ngx_accept_disabledÖµ£ºnginxµ¥½ø³ÌµÄËùÓÐÁ¬½Ó×ÜÊýµÄ°Ë·ÖÖ®Ò»£¬¼õȥʣϵĿÕÏÐÁ¬½ÓÊýÁ¿£¬µÃµ½µÄÕâ¸öngx_accept_disabled¡£

µ±ngx_accept_disabled´óÓÚ0ʱ£¬²»»áÈ¥³¢ÊÔ»ñÈ¡accept_mutexËø£¬²¢ÇÒ½«ngx_accept_disabled¼õ1£¬ÓÚÊÇ£¬Ã¿´ÎÖ´Ðе½´Ë´¦Ê±£¬¶¼»áÈ¥¼õ1£¬Ö±µ½Ð¡ÓÚ0¡£²»È¥»ñÈ¡accept_mutexËø£¬¾ÍÊǵÈÓÚÈóö»ñÈ¡Á¬½ÓµÄ»ú»á£¬ºÜÏÔÈ»¿ÉÒÔ¿´³ö£¬µ±¿ÕÏÐÁ¬½ÓÔ½ÉÙʱ£¬ngx_accept_disableÔ½´ó£¬ÓÚÊÇÈóöµÄ»ú»á¾ÍÔ½¶à£¬ÕâÑùÆäËü½ø³Ì»ñÈ¡ËøµÄ»ú»áÒ²¾ÍÔ½´ó¡£²»È¥accept£¬×Ô¼ºµÄÁ¬½Ó¾Í¿ØÖÆÏÂÀ´ÁË£¬ÆäËü½ø³ÌµÄÁ¬½Ó³Ø¾Í»áµÃµ½ÀûÓã¬ÕâÑù£¬nginx¾Í¿ØÖÆÁË¶à½ø³Ì¼äÁ¬½ÓµÄƽºâÁË¡£

3.2 Ò»¸ö¼òµ¥µÄHTTPÇëÇó

´Ó Nginx µÄÄÚ²¿À´¿´£¬Ò»¸ö HTTP Request µÄ´¦Àí¹ý³ÌÉæ¼°µ½ÒÔϼ¸¸ö½×¶Î£º

³õʼ»¯ HTTP Request£¨¶ÁÈ¡À´×Ô¿Í»§¶ËµÄÊý¾Ý£¬Éú³É HTTP Request ¶ÔÏ󣬸öÔÏóº¬ÓиÃÇëÇóËùÓеÄÐÅÏ¢£©¡£

´¦ÀíÇëÇóÍ·¡£

´¦ÀíÇëÇóÌå¡£

Èç¹ûÓеϰ£¬µ÷ÓÃÓë´ËÇëÇó£¨URL »òÕß Location£©¹ØÁªµÄ handler¡£

ÒÀ´Îµ÷Óø÷ phase handler ½øÐд¦Àí¡£

ÔÚ½¨Á¢Á¬½Ó¹ý³ÌÖУ¬¶ÔÓÚnginx¼àÌýµ½µÄÿ¸ö¿Í»§¶ËÁ¬½Ó£¬¶¼»á½«ËüµÄ¶ÁʼþµÄhandlerÉèÖÃΪngx_http_init_requestº¯Êý£¬Õâ¸öº¯Êý¾ÍÊÇÇëÇó´¦ÀíµÄÈë¿Ú¡£ÔÚ´¦ÀíÇëÇóʱ£¬Ö÷Òª¾ÍÊÇÒª½âÎöhttpÇëÇ󣬱ÈÈ磺uri£¬ÇëÇóÐеȣ¬È»ºóÔÙ¸ù¾ÝÇëÇóÉú³ÉÏìÓ¦¡£ÏÂÃæ¿´Ò»ÏÂnginx´¦ÀíµÄ¾ßÌå¹ý³Ì£º

Nginx´¦ÀíµÄ¾ßÌå¹ý³Ì

ÔÚÕâÀÎÒÃÇÐèÒªÁ˽âһϠphase handler Õâ¸ö¸ÅÄî¡£phase ×ÖÃæµÄÒâ˼£¬¾ÍÊǽ׶Ρ£ËùÒÔ phase handlers Ò²¾ÍºÃÀí½âÁË£¬¾ÍÊǰüº¬Èô¸É¸ö´¦Àí½×¶ÎµÄһЩ handler¡£

ÔÚÿһ¸ö½×¶Î£¬°üº¬ÓÐÈô¸É¸ö handler£¬ÔÙ´¦Àíµ½Ä³¸ö½×¶ÎµÄʱºò£¬ÒÀ´Îµ÷ÓÃ¸Ã½×¶ÎµÄ handler ¶Ô HTTP Request ½øÐд¦Àí¡£

ͨ³£Çé¿öÏ£¬Ò»¸ö phase handler ¶ÔÕâ¸ö request ½øÐд¦Àí£¬²¢²úÉúһЩÊä³ö¡£Í¨³£ phase handler ÊÇÓ붨ÒåÔÚÅäÖÃÎļþÖеÄij¸ö location Ïà¹ØÁªµÄ¡£

Ò»¸ö phase handler ͨ³£Ö´ÐÐÒÔϼ¸ÏîÈÎÎñ£º

»ñÈ¡ location ÅäÖá£

²úÉúÊʵ±µÄÏìÓ¦¡£

·¢ËÍ response header¡£

·¢ËÍ response body¡£

µ± Nginx ¶ÁÈ¡µ½Ò»¸ö HTTP Request µÄ header µÄʱºò£¬Nginx Ê×ÏȲéÕÒÓëÕâ¸öÇëÇó¹ØÁªµÄÐéÄâÖ÷»úµÄÅäÖá£Èç¹ûÕÒµ½ÁËÕâ¸öÐéÄâÖ÷»úµÄÅäÖã¬ÄÇôͨ³£Çé¿öÏ£¬Õâ¸ö HTTP Request ½«»á¾­¹ýÒÔϼ¸¸ö½×¶ÎµÄ´¦Àí£¨phase handlers£©£º

NGX_HTTP_POST_READ_PHASE: ¶ÁÈ¡ÇëÇóÄÚÈݽ׶Î

NGX_HTTP_SERVER_REWRITE_PHASE: Server ÇëÇóµØÖ·ÖØÐ´½×¶Î

NGX_HTTP_FIND_CONFIG_PHASE: ÅäÖòéÕÒ½×¶Î

NGX_HTTP_REWRITE_PHASE: LocationÇëÇóµØÖ·ÖØÐ´½×¶Î

NGX_HTTP_POST_REWRITE_PHASE: ÇëÇóµØÖ·ÖØÐ´Ìá½»½×¶Î

NGX_HTTP_PREACCESS_PHASE: ·ÃÎÊȨÏÞ¼ì²é×¼±¸½×¶Î

NGX_HTTP_ACCESS_PHASE: ·ÃÎÊȨÏÞ¼ì²é½×¶Î

NGX_HTTP_POST_ACCESS_PHASE: ·ÃÎÊȨÏÞ¼ì²éÌá½»½×¶Î

NGX_HTTP_TRY_FILES_PHASE: ÅäÖÃÏî try_files ´¦Àí½×¶Î

NGX_HTTP_CONTENT_PHASE: ÄÚÈݲúÉú½×¶Î

NGX_HTTP_LOG_PHASE: ÈÕ־ģ¿é´¦Àí½×¶Î

ÔÚÄÚÈݲúÉú½×¶Î£¬ÎªÁ˸øÒ»¸ö request ²úÉúÕýÈ·µÄÏìÓ¦£¬Nginx ±ØÐë°ÑÕâ¸ö request ½»¸øÒ»¸öºÏÊ浀 content handler È¥´¦Àí¡£Èç¹ûÕâ¸ö request ¶ÔÓ¦µÄ location ÔÚÅäÖÃÎļþÖб»Ã÷È·Ö¸¶¨ÁËÒ»¸ö content handler£¬ÄÇôNginx ¾Í¿ÉÒÔͨ¹ý¶Ô location µÄÆ¥Å䣬ֱ½ÓÕÒµ½Õâ¸ö¶ÔÓ¦µÄ handler£¬²¢°ÑÕâ¸ö request ½»¸øÕâ¸ö content handler È¥´¦Àí¡£ÕâÑùµÄÅäÖÃÖ¸Áî°üÀ¨Ïñ£¬perl£¬flv£¬proxy_pass£¬mp4µÈ¡£

Èç¹ûÒ»¸ö request ¶ÔÓ¦µÄ location ²¢Ã»ÓÐÖ±½ÓÓÐÅäÖÃµÄ content handler£¬ÄÇô Nginx ÒÀ´Î³¢ÊÔ£º

Èç¹ûÒ»¸ö location ÀïÃæÓÐÅäÖà random_index on£¬ÄÇÃ´Ëæ»úÑ¡ÔñÒ»¸öÎļþ£¬·¢Ë͸ø¿Í»§¶Ë¡£

Èç¹ûÒ»¸ö location ÀïÃæÓÐÅäÖà index Ö¸ÁÄÇô·¢ËÍ index Ö¸ÁîÖ¸Ã÷µÄÎļþ£¬¸ø¿Í»§¶Ë¡£

Èç¹ûÒ»¸ö location ÀïÃæÓÐÅäÖà autoindex on£¬ÄÇô¾Í·¢ËÍÇëÇóµØÖ·¶ÔÓ¦µÄ·þÎñ¶Ë·¾¶ÏµÄÎļþÁÐ±í¸ø¿Í»§¶Ë¡£

Èç¹ûÕâ¸ö request ¶ÔÓ¦µÄ location ÉÏÓÐÉèÖà gzip_static on£¬ÄÇô¾Í²éÕÒÊÇ·ñÓжÔÓ¦µÄ.gzÎļþ´æÔÚ£¬Óеϰ£¬¾Í·¢ËÍÕâ¸ö¸ø¿Í»§¶Ë£¨¿Í»§¶ËÖ§³Ö gzip µÄÇé¿öÏ£©¡£

ÇëÇóµÄ URI Èç¹û¶ÔÓ¦Ò»¸ö¾²Ì¬Îļþ£¬static module ¾Í·¢Ë;²Ì¬ÎļþµÄÄÚÈݵ½¿Í»§¶Ë¡£

ÄÚÈݲúÉú½×¶ÎÍê³ÉÒÔºó£¬Éú³ÉµÄÊä³ö»á±»´«µÝµ½ filter Ä£¿éÈ¥½øÐд¦Àí¡£filter Ä£¿éÒ²ÊÇÓë location Ïà¹ØµÄ¡£ËùÓÐµÄ filter Ä£¿é¶¼±»×éÖ¯³ÉÒ»ÌõÁ´¡£Êä³ö»áÒÀ´Î´©Ô½ËùÓÐµÄ filter£¬Ö±µ½ÓÐÒ»¸ö filter Ä£¿éµÄ·µ»ØÖµ±íÃ÷ÒѾ­´¦ÀíÍê³É¡£

ÕâÀïÁоټ¸¸ö³£¼ûµÄ filter Ä£¿é£¬ÀýÈ磺

server-side includes¡£

XSLT filtering¡£

ͼÏñËõ·ÅÖ®ÀàµÄ¡£

gzip ѹËõ¡£

ÔÚËùÓÐµÄ filter ÖУ¬Óм¸¸ö filter Ä£¿éÐèÒª¹Ø×¢Ò»Ï¡£°´ÕÕµ÷ÓõÄ˳ÐòÒÀ´Î˵Ã÷ÈçÏ£º

copy: ½«Ò»Ð©ÐèÒª¸´ÖÆµÄ buf(Îļþ»òÕßÄÚ´æ)ÖØÐ¸´ÖÆÒ»·ÝÈ»ºó½»¸øÊ£ÓàµÄ body filter ´¦Àí¡£

postpone: Õâ¸ö filter ÊǸºÔð subrequest µÄ£¬Ò²¾ÍÊÇ×ÓÇëÇóµÄ¡£

write: дÊä³öµ½¿Í»§¶Ë£¬Êµ¼ÊÉÏÊÇдµ½Á¬½Ó¶ÔÓ¦µÄ socket ÉÏ¡£

3.3 ÇëÇóÍêÕû´¦Àí¹ý³Ì

¸ù¾ÝÒÔÉÏÇëÇó²½ÖèËùÊö£¬ÇëÇóÍêÕûµÄ´¦Àí¹ý³ÌÈçÏÂͼËùʾ£º

ÇëÇóÍêÕûµÄ´¦Àí¹ý³Ì

3.4 keepalive ³¤Á¬½Ó

µ±È»£¬ÔÚnginxÖУ¬¶ÔÓÚhttp1.0Óëhttp1.1Ò²ÊÇÖ§³Ö³¤Á¬½ÓµÄ¡£

ʲôÊdz¤Á¬½ÓÄØ£¿ÎÒÃÇÖªµÀ£¬httpÇëÇóÊÇ»ùÓÚTCPЭÒéÖ®Éϵģ¬ÄÇô£¬µ±¿Í»§¶ËÔÚ·¢ÆðÇëÇóǰ£¬ÐèÒªÏÈÓë·þÎñ¶Ë½¨Á¢TCPÁ¬½Ó£¬¶øÃ¿Ò»´ÎµÄTCPÁ¬½ÓÊÇÐèÒªÈý´ÎÎÕÊÖÀ´È·¶¨µÄ£¬Èç¹û¿Í»§¶ËÓë·þÎñ¶ËÖ®¼äÍøÂç²îÒ»µã£¬ÕâÈý´Î½»»¥Ïû·ÑµÄʱ¼ä»á±È½Ï¶à£¬¶øÇÒÈý´Î½»»¥Ò²»á´øÀ´ÍøÂçÁ÷Á¿¡£µ±È»£¬µ±Á¬½Ó¶Ï¿ªºó£¬Ò²»áÓÐËĴεĽ»»¥£¬µ±È»¶ÔÓû§ÌåÑéÀ´Ëµ¾Í²»ÖØÒªÁË¡£¶øhttpÇëÇóÊÇÇëÇóÓ¦´ðʽµÄ£¬Èç¹ûÎÒÃÇÄÜÖªµÀÿ¸öÇëÇóÍ·ÓëÏìÓ¦ÌåµÄ³¤¶È£¬ÄÇôÎÒÃÇÊÇ¿ÉÒÔÔÚÒ»¸öÁ¬½ÓÉÏÃæÖ´Ðжà¸öÇëÇóµÄ£¬Õâ¾ÍÊÇËùνµÄ³¤Á¬½Ó£¬µ«Ç°ÌáÌõ¼þÊÇÎÒÃÇÏȵÃÈ·¶¨ÇëÇóÍ·ÓëÏìÓ¦ÌåµÄ³¤¶È¡£

¶ÔÓÚÇëÇóÀ´Ëµ£¬Èç¹ûµ±Ç°ÇëÇóÐèÒªÓÐbody£¬ÈçPOSTÇëÇó£¬ÄÇônginx¾ÍÐèÒª¿Í»§¶ËÔÚÇëÇóÍ·ÖÐÖ¸¶¨content-lengthÀ´±íÃ÷bodyµÄ´óС£¬·ñÔò·µ»Ø400´íÎó¡£Ò²¾ÍÊÇ˵£¬ÇëÇóÌåµÄ³¤¶ÈÊÇÈ·¶¨µÄ£¬ÄÇôÏìÓ¦ÌåµÄ³¤¶ÈÄØ£¿ÏÈÀ´¿´¿´httpЭÒéÖйØÓÚÏìÓ¦body³¤¶ÈµÄÈ·¶¨£º

¶ÔÓÚhttp1.0ЭÒéÀ´Ëµ£¬Èç¹ûÏìӦͷÖÐÓÐcontent-lengthÍ·£¬ÔòÒÔcontent-lengthµÄ³¤¶È¾Í¿ÉÒÔÖªµÀbodyµÄ³¤¶ÈÁË£¬¿Í»§¶ËÔÚ½ÓÊÕbodyʱ£¬¾Í¿ÉÒÔÒÀÕÕÕâ¸ö³¤¶ÈÀ´½ÓÊÕÊý¾Ý£¬½ÓÊÕÍêºó£¬¾Í±íʾÕâ¸öÇëÇóÍê³ÉÁË¡£¶øÈç¹ûûÓÐcontent-lengthÍ·£¬Ôò¿Í»§¶Ë»áÒ»Ö±½ÓÊÕÊý¾Ý£¬Ö±µ½·þÎñ¶ËÖ÷¶¯¶Ï¿ªÁ¬½Ó£¬²Å±íʾbody½ÓÊÕÍêÁË¡£

¶ø¶ÔÓÚhttp1.1ЭÒéÀ´Ëµ£¬Èç¹ûÏìӦͷÖеÄTransfer-encodingΪchunked´«Ê䣬Ôò±íʾbodyÊÇÁ÷ʽÊä³ö£¬body»á±»·Ö³É¶à¸ö¿é£¬Ã¿¿éµÄ¿ªÊ¼»á±êʶ³öµ±Ç°¿éµÄ³¤¶È£¬´Ëʱ£¬body²»ÐèҪͨ¹ý³¤¶ÈÀ´Ö¸¶¨¡£Èç¹ûÊÇ·Çchunked´«Ê䣬¶øÇÒÓÐcontent-length£¬Ôò°´ÕÕcontent-lengthÀ´½ÓÊÕÊý¾Ý¡£·ñÔò£¬Èç¹ûÊÇ·Çchunked£¬²¢ÇÒûÓÐcontent-length£¬Ôò¿Í»§¶Ë½ÓÊÕÊý¾Ý£¬Ö±µ½·þÎñ¶ËÖ÷¶¯¶Ï¿ªÁ¬½Ó¡£

´ÓÉÏÃæ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½£¬³ýÁËhttp1.0²»´øcontent-lengthÒÔ¼°http1.1·Çchunked²»´øcontent-lengthÍ⣬bodyµÄ³¤¶ÈÊÇ¿ÉÖªµÄ¡£´Ëʱ£¬µ±·þÎñ¶ËÔÚÊä³öÍêbodyÖ®ºó£¬»á¿ÉÒÔ¿¼ÂÇʹÓó¤Á¬½Ó¡£ÄÜ·ñʹÓó¤Á¬½Ó£¬Ò²ÊÇÓÐÌõ¼þÏÞÖÆµÄ¡£Èç¹û¿Í»§¶ËµÄÇëÇóÍ·ÖеÄconnectionΪclose£¬Ôò±íʾ¿Í»§¶ËÐèÒª¹Øµô³¤Á¬½Ó£¬Èç¹ûΪkeep-alive£¬Ôò¿Í»§¶ËÐèÒª´ò¿ª³¤Á¬½Ó£¬Èç¹û¿Í»§¶ËµÄÇëÇóÖÐûÓÐconnectionÕâ¸öÍ·£¬ÄÇô¸ù¾ÝЭÒ飬Èç¹ûÊÇhttp1.0£¬ÔòĬÈÏΪclose£¬Èç¹ûÊÇhttp1.1£¬ÔòĬÈÏΪkeep-alive¡£Èç¹û½á¹ûΪkeepalive£¬ÄÇô£¬nginxÔÚÊä³öÍêÏìÓ¦Ìåºó£¬»áÉèÖõ±Ç°Á¬½ÓµÄkeepaliveÊôÐÔ£¬È»ºóµÈ´ý¿Í»§¶ËÏÂÒ»´ÎÇëÇó¡£

µ±È»£¬nginx²»¿ÉÄÜÒ»Ö±µÈ´ýÏÂÈ¥£¬Èç¹û¿Í»§¶ËÒ»Ö±²»·¢Êý¾Ý¹ýÀ´£¬Æñ²»ÊÇÒ»Ö±Õ¼ÓÃÕâ¸öÁ¬½Ó£¿ËùÒÔµ±nginxÉèÖÃÁËkeepaliveµÈ´ýÏÂÒ»´ÎµÄÇëÇóʱ£¬Í¬Ê±Ò²»áÉèÖÃÒ»¸ö×î´óµÈ´ýʱ¼ä£¬Õâ¸öʱ¼äÊÇͨ¹ýÑ¡Ïîkeepalive_timeoutÀ´ÅäÖõģ¬Èç¹ûÅäÖÃΪ0£¬Ôò±íʾ¹Øµôkeepalive£¬´Ëʱ£¬http°æ±¾ÎÞÂÛÊÇ1.1»¹ÊÇ1.0£¬¿Í»§¶ËµÄconnection²»¹ÜÊÇclose»¹ÊÇkeepalive£¬¶¼»áÇ¿ÖÆÎªclose¡£

Èç¹û·þÎñ¶Ë×îºóµÄ¾ö¶¨ÊÇkeepalive´ò¿ª£¬ÄÇôÔÚÏìÓ¦µÄhttpÍ·ÀïÃæ£¬Ò²»á°üº¬ÓÐconnectionÍ·Óò£¬ÆäÖµÊÇ¡±Keep-Alive¡±£¬·ñÔò¾ÍÊÇ¡±Close¡±¡£Èç¹ûconnectionֵΪclose£¬ÄÇôÔÚnginxÏìÓ¦ÍêÊý¾Ýºó£¬»áÖ÷¶¯¹ØµôÁ¬½Ó¡£ËùÒÔ£¬¶ÔÓÚÇëÇóÁ¿±È½Ï´óµÄnginxÀ´Ëµ£¬¹Øµôkeepalive×îºó»á²úÉú±È½Ï¶àµÄtime-wait״̬µÄsocket¡£Ò»°ãÀ´Ëµ£¬µ±¿Í»§¶ËµÄÒ»´Î·ÃÎÊ£¬ÐèÒª¶à´Î·ÃÎÊͬһ¸öserverʱ£¬´ò¿ªkeepaliveµÄÓÅÊÆ·Ç³£´ó£¬±ÈÈçͼƬ·þÎñÆ÷£¬Í¨³£Ò»¸öÍøÒ³»á°üº¬ºÜ¶à¸öͼƬ¡£´ò¿ªkeepaliveÒ²»á´óÁ¿¼õÉÙtime-waitµÄÊýÁ¿¡£

   
1479 ´Îä¯ÀÀ       28
????

HTTP????
nginx??????
SD-WAN???
5G?????
 
????

??????????
IPv6???????
??????????
???????
????

????????
????????
???????????????
??????????