agentzhDe_NginxJiao_Cheng_(2020^sÃ^sÃBOOKMOBI}?H$¬-˜8/BáK_ T@ ^f”nHw-~ÉQ’Fšö¥ ®ù ·É"À#$Èp&ÐT(Ú;*ä*,ìò.õ‚0þ2 D4Ô6e8%X:-³<5Ù>?Ú@HÐBRD[Fd§Hm·Jw¹L™N†ÍPŽR—²T¡pVªX´Z¾.\ÇG^Т`Ù#bá déßfòOhúªjl €nnp“rƒt gv#Gx#kz#—|8MOBIèýé7‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9<(?Pÿÿÿÿÿÿÿÿ;=<ÿÿÿÿÿÿÿÿÿÿÿÿ9EXTH@÷0agentzhçš„Nginx教程(2020.03.19版)dagentzheagentzh cnq,c6ee4c0c-76f3-4a73-965a-5d41eb312900p4calibre:c6ee4c0c-76f3-4a73-965a-5d41eb312900õ EBOKj(2020-03-19T19:10:19.487471+00:00Ì ÉÍ Î Ï ‚t ƒ agentzhçš„Nginx教程(2020.03.19版)agentzh çš„Îginx 教程(版本 2020.03.19)缘起‰7¨‹çš„è¿ž载计划ƒƒ3ƒƒƒƒƒ 9181ƒ å˜é‡æ¼«è°ˆï¼ˆä¸€ï¼‰ƒƒ4ƒƒƒƒˆi1263ƒƒƒºŒï¼‰ƒƒ5ƒƒƒƒƒ340‹xƒƒ†‰ï¼‰ƒƒ6ƒƒƒƒƒ4588†ƒƒ四)ƒƒ7ƒƒƒƒƒ56076ƒƒ‰”)ƒƒ8ƒƒƒƒƒ6ƒ4ƒƒ†…­ï¼‰ƒƒ9ƒƒƒƒ•19338ƒƒŒ!ƒï¼‰ƒƒ10ƒƒƒƒ•:709ƒƒ†«ï¼‰ƒƒ1¿ƒƒƒƒ›@735ƒé…置指令的执行顺åºï¼ˆä¸˜ÏƒƒŠžçƒƒƒƒ‰1515žåƒƒƒ™OƒƒŒŸgƒƒƒƒ‰2659=ƒƒƒ™ÏƒƒŒŸçƒƒƒƒ‰37532ƒƒƒƒŒšOƒƒŒ gƒƒƒƒ‰5078‡ƒƒŠŸšÏƒƒŠ çƒƒƒƒ‰6430݃ƒƒ›OƒƒŒ¡gƒƒƒƒ‰74657ƒƒƒŽ&›ÏƒƒŠ¡çƒƒƒƒ‰8425ªýƒƒƒœGƒƒŒ¢gƒƒƒƒ‰9428‡ƒƒ‡¹ï¼‰ƒƒ2¢ßƒƒƒµ 0483¢Ýƒƒƒå)ƒƒ2£Wƒƒƒ¸’885•7ƒƒƒ一)ƒ§/ul>缘起ŒYˆPŠé¢ç”¨ä¸­æ–‡å†™点东西,æ¯ä‡Ø¯‡ä¸œè¥¿†¼šæœ‰ä¸€个å°ä¸»é¢˜ï¼Œä½†æ¬¡åº‡¨组织上就ä¸éˆÈ¹ˆè®²ç©¶‹€‚º•ç«Ÿå¹¶ä¸æ˜¯ä¸€本完æ•´çš„图书,或许未æ¥æˆ‘会将之整ç†å‡ºä¹¦ä¹Ÿä¸ä¸€å®šã€‚ ŸŸŸ">a‹S¼–写的Žœ˜¯æŒ‰æ‰€è°“的“系列â€æ¥åˆ’分的%è”如首先连载ƒ¾Ÿ¾à‚+„ÈŠS‰¨€“基本上都å¯ä»¥ç²—ç•¥对应到未æ¥å‡ºçš„•­‡p¸­çš„一…« â€ï¼ˆ当然内部还会é‡æ–°Œ;€À容并分!‚à节â€æ¥ï¼‰ã€‚我é¢å‘‚è读者是å„个水平层Žð„_‘€户,åŒæ—¶ä¹ŸåŒ…括未使用过]¨Apacheã€LŒ±tpd ç­‰æœåŠ¡å™¨çš„è€ç”¨æˆ·ŽŽŽŽåªä¿è¯这些授쾋å­è‡³å°‘兼容到„d0.8.54ngx_openresty€¿€¿/‚ׂׂׂÐ教程里æåŠçš„模嗇8„à括足够新的Îginx 稳定版核心,都包å«åœ¨äº†è¿™ä¸ªè‡中。„_„_„_„Yˆ‘在这些教程中éµå¾ªçš„一‚ 原则是,尽é‡é€šè¿‡短å°ç²¾æ‚的实例æ¥ä½è¯æˆ‘陈述ç€ØŽŸç†å’Œ观点。我希望帮助读者å…»æˆä¸éšä¾¿å¬信别人现æˆçš„观点‚X‚넘而通过自己è¿è¡Œå®ž„k验è¯çš„好习惯。这ç§é£Žæ ¼æˆ–许也和我ˆpÑA æ–¹é¢çš„背景有关。事实上我在写作过‰Ë‚0ç»å¸¸æŒ‰æˆ‘设计的射på­çš„实际è¿è¡Œç»“æžœ† ‡ 断地对我的ç†è§£ä»¥‘ŒËᆅ容进à修正ã€'''!‚ 于有问题的代ç ç¤º„°šã们会有æ„在排版上让它们和其他åˆæ³•ã所有区别,å³åœ¨é—®ƒ1 –ٯ一行ƒ«å‰æ·»åŠ é—®å·å­—符,à(ñ?’),且 ‰ã” ¿‡w‡wºè    ? server {‚²
未ç»æˆ”ÑåŒæ„:À·ä¸è¦éz转载或者以å‘rš@å¼ä½¿ç”£7–h•À因为其中的æ‘Bå¥è¯ï¼žø¤äº†ç‰¹åˆ«å¼•ç”¨ “åå¥â€ï¼Œéƒ½æ˜¯æˆ‘ŸÓ–l¿ç•™æ‰€”è‚у利。€Ù¸å¸Œæœ›£“…£†©¦ä¸€å¤§§i› åœ¨äºŽ“x åŽçš„æ‹·è´ç‰ˆæœ¬æ˜¯æ­»ƒ–å°±ä¸èƒ½å†åŒæ­¥æ›´æ–°†£y€Œæˆ‘绠Л1Œ‰ç…§è¯»„ƒÚ馈,对已å‘表的è€文章蟃º†å¤§é¢积的修订。˜çç¯欢迎诫*¤šæå®è´µæ„è§,特别是建¥°性的批评æ„è§ã€‚ç±»似“太烂了ï¼â€è¿™æ ·æ— èŠä¸­ä¼¤çಇ±œ‹è¿˜æ˜¯算了々………ŠÊ‘tˆ‚‰ºéƒ½å·²”A”¾åœ¨ÇitHub 网站上进行玧制了¡Ÿƒƒ¿W¿W//github.com/agentzh/n¼)-tutorials¿ÿgggbNginxâMySQLçä4çççäPostgre‚‚5‚‚‚ 基于΂B的应用缓存‚O‚L6‚O‚O„W„R­çš„安全与访问控制‚w‚t7‚w‚w„¿„¿‚×ebÓervice‚O‚L8‚O‚O„¿‚驱动皂C2.0 ‡C‚_‚\9‚_‚_‚\测试„¤åŠå…¶åº‰rš„性能‚‚{20‚‚‡€ŸåŠ©‡¤¾åŒºçš„力釂K/ul>3.14…û¨3­é ‡å‡† €(‚Bª¤Œ‡ä»¤å¯¹Ã‹Z$a” ›è¡Œäº†èµ‹å€¼æ“作。特别地‡2æŠŠå­—ç¬ –o–o‚`µ‹ç»™äº†ªh‰÷‰÷‰÷èž8ˆ°ï¼ŒµG”à¾8‰é¢æœ‰¯Û…³ƒK„(å·ï¼Œè¿™æ˜¯è®°æ³•ä¸Šçš„è¦æ±‚。所有ç²þ‚ʇ³“引用时都须带上ƒ§> „x缀。迩œ示方法和¦%PHP±º›è¯­è¨€¬›¸ä¼¼çš„ˆŸˆŸˆŸˆ›虽然ƒÇ¡„å˜é‡å„:修饰会让正统的²JavŽÔ„±€‘C#‰¬¹²员ä¸èˆ’æœï¼Œä½†è¿™ç§†‡³•çš„好处也是显而易è§çš„Ÿ—Ÿ¥"直接抹°…µŒå…¥åˆ°‘~常é‡ä¸­ä»¥æž„造出新§Ç§Áž_ˆ÷ˆ÷ž_ž_žZ”:žžWQbŸ¨$a,¡Ÿ‡wŸ‡„„Œþ¿™é‡Œæˆ‘•À通过已有的“?›‹Ì©Mæ¥æž„造å˜é‡+b/±£ºŽæ˜¯è¿™两æ¡æŒá顺åºæ‰§è¡Œå®Œä¹‹åŽï¼Œƒ?‚³Wˆ°€Ê™9€Œƒo^则是w,‡À­.“Á¸技术在— 世界里被称为“嘆pæ’值›ˆvariableénterpolation),它让专门的字拼接è¿算符å˜å¾—ä¸å†é‚£ä¹ˆå¿…è¦ãžÐ‹ú½!Œr•(9¦¨é‡‡ç”¨此术语。’Ž‡Ž‡¤ŒÀ¤(£;´¸较完æ•´çš„é…置示例•‚‚•“Çrver {“w”ç$€Elisten 8080”÷‡€Ÿ‚ÿ‚oc‹: /tesŽ€„t {

这个例å­çœç•¥äº† ‚nginx.conf‚J é…置文件中最外围的‚httpW½®å—以劀òevents。使用curl „«ÈTTP 客户端在命令行上请求è¿Rù/test‚接å£ï¼Œæˆ‘们å¯ä»¥å¾—到ˆ°ˆˆˆ‚YŠµ$ „© '†é://localhost:8080ƒ’'‹×Œ·‚ ú7„„里我们使用第三方 ‚>¬Œ‡ä»¤å°†ŒJ–‰ŒCå˜é‡çš„值作为当å‰ã€Á“应体输出。ˆˆˆˆˆ[看到,…ÿ…ÿ…ÿ…ÿ…ÿ…ÿ…ÿ…ù„y‚数也支æŒâ€œå˜é‡æ’值―‰¸è¿‡ï¼Œ需è¦è¯´æ˜Žçš„是,并éžæ‰€æœ‰çš„é…çƒ都支挂¿‚¿‚¸º‹å®žä¸Š•±Š{„j‚¸å¦å…许“å˜éÏ,å–决于该†O®žçŽ°æ¨¡›+Š¯Š¯Š¯Š¨如果戊Ù想通过ŠßŠßŠßŠßŠßŠß“„c›´æŽ¥è¾“Žðå«æœ‰â€œç¾Žå…ƒç¬¦â€ï¼ˆ‘¢‘Š)的å­—符串ï‹(‚£ä¹ˆæœ‰没有办法把特殊的“““|Ê给转义掉呢?答案ŠT®šçš„(至少到目å‰æœ€æ–°çš„· 稳定版ƒ 1.0.10…%6幸è¿çšì£w»¥ç»•è¿‡¤ûé™åˆ¶ï¼Œæ¯”如éŠò‚Ž·Ž±‚‰Ú‘ÿ»¤ä¸“é—¨构造出å–值为ˆ> …ÿ‚“ƒ˜然åŽå†在ŽŽŽŽŽŽ> ¯ ¤ †«ƒˆXœX下é¢è¿²_:“¯“¯“¯«W©Rge¸ˆ$dollar¼G©wª§€Edefaul¼ "$¹÷‡¸×€ç«×€Ÿ¾½rve„''„listen °a„‡€Ÿ‚ÿ‚²ˆtio‚(²jƒÇ¯¯¿€3ŒÙˆThis €!aˆ¸Šsign³àŠœ‰‚¿‚¿‰W''€ç€ç†ÿ///­xµ‹è¯•ç»“£—à‘Pß··ß¼/¼/¼/¼/¼/„ÿ…ß ˆÿˆÿˆþdž¿†¿……¼¿‡Œç”¨åˆ°了标准模嗛7›7›7›3Ge¼·¼°—ð©£供的ŸÏ»¤‚‡‚‡‚‡‚‡«‚X">‚†¥ä¸ºå˜P¡Cˆ¡s赋予孫t šh§4Œè¿™æ ·æ¦£œ¨ä¸‹é¢·« C®>­¡œ°æ–¹ï¼Œ就直接引用æ½s­Eƒÿ­p„º€©‹Š0¢h其实‡Ÿ‡Ÿ‡Ÿ‡ŸŠŠŒ"®p常规çš„用法是根æ®客户端的ÉP …Ðå€å¯¹æŒ‡å®šçš„ª…进行赋值,èÂåªæ˜¯å€Ÿç”¨å®ƒä…ð¾¿â€œæ— æ¡ä»¶åœ°â€å¯¹æˆˆˆƒŒ*¸¯¸ª«€¼ã€‚™g”_”_½áœ¨â€œå˜²²上下斳P­ï¼Œè¿˜æœ‰ä¸€ç§¹ó情况,å³å½“劎aŒË之åŽ紧跟ç€å˜é‡åçš„æž„æˆå­—符时(æ¶â€h€Àæ¯ã€æ•°å­—以åŠä¸‹åˆ’线)Ym°±éœ€è¦’œ‰¹åˆ«çš„记法æ¥æ¶ˆé™¤æ­§ä¹‰ï¼Œ²ñ¦‚:ˆ¿ˆ¿ˆ¿¢®¯®¯Ÿ¡?¬—®¯®¯‡®¯€Ÿï®¯®¯®¯¯¯¿…fˆ$firÉ"hell¯!„W‚§€W°¿"${‚*}world‚‚‚¯/''€ç€çˆ_ŒGŒGŒG©Uœ¨ž÷ž÷ž÷žóE† ¦”†y">€1Ÿ ¨ß»¤çš„å‚“)€¼ä¸­å¼•œ‰§Š;›{•©—¶å€™ï¼Œ•0¦`–Î w“€€„orld 这个å•è¯ï¼Œæ‰€ä»¥å¦‚果直接写作 ‚©    $ curl 'http://localhost:8080/test'ƒÒ
指令(以åŠå‰é¢æ到的‚ï‚ï‚ï‚ëGeo‚Ìgeo">€(‚ςȉä¸ä»…有赋值ɊŸèƒ½ï¼Œ它还有创建””ŽãA‰¯ä½œç”¨Y³å½“作’ЂK对象çš„å˜é‡å°šä¸å­˜‘˜时,它会自动创建该å˜é‡。比如在上Ÿš中,妚i’+a›¯›¨ƒ…未创建,则ZŠÂaˆ„‡‚w‚u†ø户å˜é‡„¹ƒ³我们ä¸创建就直接˜ó†È‡¹€¼ï¼Œåˆ™ƒ 报错。例如–/‘¯‘¯–/”*? server {”/•g?€]listen —!;ŸŸ€ç€ç‚‚~™¨tio‚ˆ/bad„7¿¿¿þechš $foo„gÏÏŽ c??:€ÿ€ÿœWŠ¯Š¯Š¬此时–,æœåŠ¡å™¨ä¼šæ‹’ç»åŠ è½½é…ç½®:‚o‚o„ª[emerg] unknow‰H"‡p" variable…—…—…—ƒ/ƒ/…”˜¯çš„,“ƒ甚至都无法å¯åŠ¨æœ†Hï¼…Ÿ‚w‚w‚qŸ¶£çš„是¯Fžo–S’Œèµ‹å€¼æ“作å‘生在全然ä¸åŒçš„时间阶段。‚_‚_ºåªèƒ½å‚‹Ä‹‹c‚K候,或者说£-†ê¼›è€Œèµ‹„߈™åªä¼šƒ请求实际处ç†çš„æ—¶ø… žpæ„味ç€ä¸åˆ›å£ˆ€Œç›´æŽ¥Ì†‚¡¯¼è‡´å¯ Ñ¤±è´¥ï¼Œ‡Ø‚p也æ„å‘‚AŒ»Œt„ƒÚƒÁŒè€åœ°åˆ›ƒ`æ–°çš„ª'¢ƒ···°‡„и€æ—¦åˆ›¦¤…¶å˜é‡»@«B¯è§èŒƒå›´å°±æ˜¯整个‹×‹Ð¸’;p²˜跨越与Á虚拟主机的©|£Ñ¨ƒÜ—。我‡Ñ¥çœ‹ä¸€¬Þ½†—†—™ß™Ý¦×™Ÿ§ §¦¿¦¿‡šŸ€Ÿ‚‚¦_ /ƒ¿§§·¦GžÓ =Ÿ¨¦‘]"„O‚§¦'…o€Ÿ¿¿…o«Á‰'§§·ŠÆt«£ 32…'Ï_€W‡7‡7‡7‚‚LJ7''€ç€ç¨‘g‘g‘d°里我们在”¢ˆÅ ˆ¹”Û中用¿¿™k了å˜é‡¿ † "˜h于是在整个é—"文件中这个åÚ«ÁP›*¬³因此戄êšz……ƒ]…£Z引用迂פ0œ€¨担心„´ÉŠ¥é”™ã€‚š§‰G‰G‰@下é¢æ˜†Q命令衂¨Šç”¨„Šcurl„C工具访问这两个接å£çš„结果:ƒ—ƒ—ƒ—ž7Žú$ ƒ  'http://ˆlhost:iˆ)'÷ü“n]/‘?€ŸÇƒ¿ƒ¿ƒ¿ƒ½øƒ¿ÿƒ¿ƒ¼32ƒÏ?€Ÿ×ƒÏƒÏƒÏ‡‡‡‡ÿÿ‡‡/ƒ¿˜¿‹ï‹ï|»Žè¿™ä¸ª«³”»¥çœ‹åˆ°”ð˜o˜o› ä¸ºæ˜¯•Gš_š_¸k—#所以赻ϻ´·x’"‚Bÿ°¸;‚@执行。而请求k˜¦“»¹XƒI²“€»æ˜¯å¾—† 空的—•û€¼ï¼Œå› †H™‘ˆ·å˜é‡未赋值就输出的è¯i‚sš„便是‚¸字符串。—O‹g‹g‹g‹g‹g窥è§çš„å¦ä¸€ä¸ª“€€„ªé‡è¦ç‰¹æ€§æ˜¯,Nginx å˜é‡åçš„å¯è§èŒƒå›´虽然是整个é…置,但æ¯ä¸ªè¯·æ±‚都有所€0‚[‚@独立副本,或者说kå„å˜é‡用æ¥å­˜æ”¾å€¼„ ®¹å™¨çš„‚‚彼此互ä¸å¹²æ‰°ã€‚比如å‰é¢æˆ‘们脚了 /bar…于Κ新手æ¥è¯´ï¼Œæœ€å¸¸è§‚错误之一,就是将ԃԆ解æˆæŸç§åœ¨è¯·æ±‚之间全局共享的东西,或‘3“全å±€å˜é‡â€ã€‚而事实上,ƒ“‹”Ÿå‘½æœŸ„p‘–@ƒ½è·¨è¶ŠƒÛ边界çš„。ˆgˆgˆg">ƒw‡æ¼«è°ˆ¸二)
<ànt€8‚Ç‚Ç‚Ç关于‰W$¦ä¸€ä¸ª‹#Šð区是认为å˜éœð˜¾‡E‰‡YŽÚlocationû[å—绑定的。其实专@™á™‚看一个涉åŠâ‹à†…部跳转â€çš„例å­ï¼š’?‡‡‰Ù„    server {„²这里戓ù È•ÿ†Ø ª'中,使用第三方模–° ngx_ˆ €^‚Š›k指令,å‘起到†Ï†Ê´^ƒØ›'›%œ‰‰€è°““€ß€Ú«/œ¨å¤„熦‹²ù¿‡ç¨‹ä¸­‰QºŽæœåŠ¡¡@‚€©»Žä¸€ä¸ª„o¡.ƒ …H¤/.ƒ.¬ ¿™ä¸åŒƒX利用ÈTTP 状æ€ç ¹³01´$’Œ€ŒºC ‡ ¿›è¡Œçš„‡9¤–部跳‡?·dŽè€…是ç”±ƒ 客户端é…åˆè‚*˹ZŒè€Œä¸”å‰U€¨…€`°H以通过æµè§ˆå‰œ°å€æ †˜æ ·çš„ç•Œé¢ï¼Œçœ‹åˆ°è¯·‹ÕRL {ŽÈ«è了å˜åŒ–。内醇uBourneÓ¢A‡º±@¶À€ãash€¤‰ä¸­çš„€º’S‰š‘½ä»¤å¾ˆåƒï¼Œéƒ½æ˜¯â€œæœ‰åŽ»æ— 回â€ã€‚å¦ä¸€ä¸ªç›¸è¿‘­€‚¢C$¯­è¨€ä¸­ƒegot›€Øå¥ã€‚®Ÿˆ既然是内部臂y½“å‰æ­£”Αq‰Ò•ˆ还是原æ¥é‚£ä¸ªï¼Œåª€©Ê„“ˆ‹7‹1·1‰€ä»¥è¿˜‚~Ђ’€å¥—ºoºl¹J副本。对应到上例„¦‚果我£ø>‰½£ÿ—jªæŽ¥å£ïŒXƒ€¹ˆæ•´ä¸ª工作æµ程是è’%¸ø先在†¿¦Ÿ¦œ”K£ß£ß£ß£ÛRewrite£ôµ">€(¦£bå°†ƒJ$a‰Õˆ€¼èµ‹ä¸º字符串B¶Ò“üŒç„¶åŽé„w„w„w„w¨O¨O¨O¨L„¼¨‘_‘Zˆè¿›å…¥¨Ç¨Ç¨Ä¦;å†è¾“出†ç†ç†âŽ±¡J‚‘’Õ€ä’&³¤ ’期望å¾—到ˆÿæ£ „:¬Éµ‹è¯•è¯实了è¿Ð€ç‚¹ï¼š™ç™ç™ç˜‚ѹ•$ curl¾Klhost:8080‘ºg»G ½œ„ú]G»§»§„?„?„;但如林ݸ©V直接访问˜#Œ–—öžx会得到空的‹Œ÷Œò®?®ƒä¾èµ–±pŸ˜ƒ ¥å¯¹‚g‹â®éåˆå§‹åŒ«1‹'†ï†ï†é·)Šé¢è¿™ä¸ªä¾‹å­‡K®s¸I©j¤ì¥x…¶å¤„熺…À³ä½¿ç»历多个ä¸åŒç¥O¥O¿¼å—,它使用ç¹y”J¹0¥¥„副本ãºr里,戌š¹Ÿé¦–次涉åŠåˆ°äº†â€œåšO¹1¤¼¦‚念。‹ˆŒ°ƒPæ的昷É标准ž·http://–€„wiki.nginx.org/HttpRewriteModule">ngx_r€› 模å—çš„ ‚‡> é…置指令其实也å¯以å‘起“内部跳转â€ï¼Œä¾‹å¦‚上é¢é‚£ä¸ª€‘­ç”¨„Ç„Ç„Ç„Ç„Ç„Ç„Ç„Ç„Á„z改写æˆ下é¢è¿™æ ·çš„å½¢å¼ï¼š

    server {˜效果和使用–‡–‡–‡–ƒE†–l†a_exec">€^˘¯å®Œå…¨相åŒçš„。åŽé¢æˆ‘们还会专门介ç»è¿™ä¸ª„„„šššš š[ƒ¸更多用法,比如呟` ‰I301‰Z ˆ€Œ2€‹›ž ¡¤–部跳 £†`›ÿŠçŠçŠà从上éÙ¡–‡ã看到,N†¹ å˜é‡å€¼å®¹å™¨çš„生命期是与当å‰æ­£åœ¨å¤„ç†çš„请求绑定的,而与†*•†S无关々¯…¯…¯Š‰é¢æˆ‘…0接触到的都是通过ž˜">€(Œ×¤éšå¼åˆ›å»ºçš„ΈW。这些å˜é‡„s一般称为“玈ˆ·è‡ªå®š义å˜é‡â€ï¼Œæˆ–者更简å•ä¸€äº›ï¼ŒâµnƒH既然有“用悧‚§ŠÙ‡ªç„¶ä¹Ÿ就有ç”±…”核心å’Œå„个€µµºæ供皒 预定乂·…V说“内建å˜é€ôˆbuiltinöariables)。Ž'Ž'Ž'‹HŠ\‚‡最常è§çš„用途就是获å–关于请’x„å“应çš„å„ç§ä¿¡æ¯ã€‚¸+‡Ñßen/docs/€É€¸x_€I_core_mZ.html¿;€Þ¿O‰—…÷‡ƒ‡“‡“‡“ƒC‚@“l.24uri">$€0‚Ù‹@º“Žù¥èŽ·å–š“š“øURI‹ç»è¿‡è§£ç ï¼Œå¹¶ä¸”ä¸å«è¯·æ±¡À‚数)ï›r„ׄׄׄׄ×request_…€w…R 则用æ…,ŒœèŽŸå§‹çš„…A …H未ç»è§…O…H包å«è¯…O‘‹€£ˆ下é¢è¿¤g:’g’g’g’`¢a·§·¦t…°·¯³¿´Ÿ·o·j‡·zŒ©·ÇÇÇÁ‰‚€‚G‚G‚G¸Ÿ€ç¸Ÿ‡—‡—‡”‰里为了简å•èµ·è§ï¼Œè¿žªêserverªÛé…ç½®å—也çœç•¥äº†ï¼Œ ‘ªc‰€æœ‰ç¤º‹¨¤X²ŸÊ°:›‘å¬çš„ä¾ç„¶æ˜¯‚ú8080‚ë端å£ã€‚在这äÕ…‚.把”?”?”?”?”?™“º·Ñ‚‚‚‚–WŒO–W‚ž€¼è¾“出²¢£体中去。下é³M— ›*Œçš„请无¥æµ‹è¯•­é¸‹è¿™ä¸ªˆê“Ú¶´Ž¥å£ï¼š–7Ž§Ž§–7Ê$ curl '‡T–¹lhost:‹Éƒ'‘ï’Ï‚”U„OGG ˆ—‡‡‡€Ÿ‚…_…_…_…_‚?a=3&b=4…¿‚g…¿„?„?G…¿…¿†ƒ/=4熀Ÿ‚††††st/hello%20worldƒg†‚ׂׅ‚ ‚¯¯†÷†÷ï„„‡g‚W¢'“‡“‡“‡å¦ä¸€ä¸ªç‰¹åˆ«å¸¸ç”¨çš„¶·‡å…¶å®ž­Ò是å•ç‹¬ä¸€ä¸ª ³€Ø¡øæ— é™å¤šå˜ç§ç¡˜¸€ç¾¤å˜Så³åå­—以™Barg_™;开头çš„所有å›ã估且称之为 G G G G GƒIPARAMETER P€XXX¢Ëƒb群。一个›€€„¸ªä¾‹å­是 $arg_name„é    location /test {…š
然åŽåœ¨å‘½ä»¤è¡Œä¸Šä½¿用å„ç§å‚数组åˆåŽ»Ž3;Ž2ˆºŽ;接å£ï¼‹ƒ·ƒ·‹…Û$ curl 'http://‹™lhost:8080ƒ'†ÿ‡ß‚‹4Še‰'€Ÿ·„Ç„Ç„Ç„Çst?ƒé=Tom&ƒB=3…o‚¯…o…j//…‡…‚3'…€Ÿ¿……………hello%20world…ß=9…ß‚ÿ…ß…Úçà†/†*9'†/”ב'‘'‘#其实£?¡ä¸ä»…å¯ä»¥åŒ¹é…¢‡ •£¢也å¯ä»?t>NAME?:抑或昦«N¦‡Œç­‰ç­‰ï–Ÿ……–ŸŒWŒWŒWŒWŒQ„A=Marry‹·‰‹·‹²B??‹w—‹o€Ÿ·…G…G…G…F‘‘Jimm…G‚_…G…CB??…G…G…G‹7‹7‹7>Nginx 会在匎¡Ž+²¹¹‹å‰ï¼Œ自动把原始襒中的ål调整为全部å°å†™çš„²«²x‡„W„W”ù¦‚果你想对¶°å€¼ä¸­ç¶ †Á%XX“s© æ ·çš„ç¼–ç åºåˆ—进行¶Ó…Ø•k«û第三æ–¹ ngx_set_m€ €—€“ƒBŒˆ置指令:Š7Š7Š7™·»_»_»_‘7’O€E„7„3–¨”Y»·e¹¿‚7‚‚7‚7‚2•R¼ss‚G‚G€Ÿ‚ß‚¿¾‡ "™„ê¾WÇÇÇÁ™„ƒ××Ö}€ç…š¯Œ/Œ/Œ+现在我们å†çœ‹ä¸€ä¸‹效果.?‚‚Ž?¢¯¢¯¢¯¢¯´?²_´?´?†W‡7´?à ´7ww£‡´7'ˆç†×†×ˆå©ºæ ¼æžœ然被è§Q出æ¥äº†ï¼ˆç‚‚‚从这个例å­æ‹;Œæ—¶å¯Ÿx‹€到,è¿9œçœçœçœçœç•÷œç€—œæœ³¸™ƒƒ/ƒ/ƒ/ƒ+Rewriteƒ/‚‚_¤é‚£æ ·ïº‹¥æœ‰è‡ª«À创建έJå˜é‡çš„功能。åŽé¢ˆ+还会专门介ç»åˆ°„ׇׄׄÿ§w§w§w§q®7ŒïŒï®4ˆ_ƒƒƒCorˆE.24 ™PAR¾TER">¡X¯9ƒØŽ ç§ç±»åž‹çš„å˜é‡æ‹¥æœ‰æ— ç©·æ— å°½ç§å¯èƒ½çš„´x字,所以它䑹¶ä¸å¯¹应任何存放值的容器。而且这炉ƒažP‹ì核心中是ç»è¿‡ç‰¹åˆ«处ç†çš„,第ä³+¤±C˜¯ä¸èƒ½±‹µÓ充满é­”法的å†…å»ºå˜ ‹o‹o‹ošd±»ä¼¼‹‡‹‡‹‡‹‡‹‡‹‡‹‡‹…„W„R’˜‹P‰Ñ°‘,比½@ºhxå–ãookie Š+„O„O„O„O„Oû_COOKIE„H€„„eˆl¾¤ï¼Œç”¨ƒ£请求头的ƒ—ƒ—ƒ—ƒ—ƒ—A_HEAD‡Ê€rƒwƒw‘¹Šç”¨æ¥ƒ å“应夃§ƒ§ƒ§ƒ§ƒ§ƒ¡sent_ƒÏƒÉsent_htt›€€„p_XXX å˜é‡ç¾¤ã€‚这里就ä¸一一介ç»äº†ï¼Œæ„Ÿå…´趣的读者å¯ä»¥å‚考 €ß€Ø„ê模å—çš„官方文档。

需è¦æŒ‡å‡ºçš„是,许多内建å˜é‡éƒ½æ˜¯åª†€8‡)¯”如我们刚æ‰介ç»çš„‡‡wiki.‡?H€°C…ÐM†¢#.24uri">$€0‹S’Œ‚‚‚‚‚request_‚[€w‚š. 对åªè¯»å˜é‡è¿›è¡Œèµ‹值是应当ç»å¯¹é¿å…‡+因为会有æ„想ä¸åˆ°‹IŽæžœï¼ŒˆK:‹g‹g‹g‹`    ? location /bad {˜¨个有问题的éŠ@½®ä¼šè®©Îé 在å¯åŠ¨çš„时候报出šæ¡ä»¤äººåŒªå¤·æ‰€æ€çš„错误+„„‹†S[emerg] the dupli‹x€X"‘ variabl€ˆiŒ...‡¿‡¿‡¿ƒ¯ƒ¯ƒ«˜1žœä½ å°试改写å¦å¤–ä Àº›åªè¯»‘™š,比如—W—W—W—W—Warg_PARAMETER—`€¥/‚ì‹@æŸäº›‹Äƒø版本中甚至å¯èƒ½å¯¼致进程崩溃。‡Ÿ‡Ÿ‡Ÿ‹@fontóize="4€xb>Žìƒò漫谈(三)ŠxŠ ‘Š_‚Ç‚Ç‚À也有三²‰o是支æŒæ”¹å†™œä…¶ä¸­ä¸€“¨例å­æ˜¯ŠwŠwŠwŠwŠw‰ðsŠ+s¡S–;ƒËŠ0¡š–时返回当å‰请求çš„ÕRL‡¸‚数串(å³è¯·€è€Ò…˜hå·åŽé¢çš„部分,如‘¸‡x±*),而在赋¤¹˜ð±º直接修改å‚æƒZ0«ãæ¥çœ‹ä¸ˆ?™W‹W‹W™W™U¤G/t© ¤O˜_¡¤7¤1orig_‰Ù€`€9¢ßק×sœ`a=3&b=4"ï‚‡‚g¦Ï "„Yinal ‚Ù:„ïŽø‚ׂ?‚‚?„‰ìÇÇÇ€ ©?€ç¡‡‹ß‹ß©?里我们把原始的’_å…ˆä¿å­˜åœ¨ ‚醃2›d“‘¸然åŽé€šè¿‡æ”¹å†™˜G˜G˜G˜G˜G˜G˜Bže¥ä¿®æ”¹—Ã…?—–Œæœ€åŽæ†‚用ƒ×ƒ×ƒ×ƒÓE‹`ƒÔ‹¹">€1ƒ²指令分别输出‡ï‡ï å’ŒƒGƒGƒG‡‡‡‡‡çš„值šy› ¸‹æ¥æˆ‘†X8æ ·æ¥æµ‹è¯•è¿™ä¸ª„j™2„C å£ï¼š›··›‘Ú$ cur•P'…Üœlhost:8080ƒ'’ÿ“ß‚—_•tggd›G4o•Ç€Ÿ‚…g…g…g…gst?a=0‚ô1€Bc=2†‚§††„ô‚‚ÿÿ†Ÿ†Ÿ†Ÿo†ŸŒ¯Œ¯Œ¯>šà第一次测试䚂œì²¡æœ‰è®¾置任何—ç—剀以输•O•O7“#®ˆ便得到空。è¯z„–°€aºŒæ¬¡æµ‹„— è®ºæˆ‘„©˜¯å¦æä¾›„„|€f都会圡ۯ •×´Ñ被强行改写æˆrŠÇŠÃ.–çŠ?Š?Š8需è¦ç‰¹åˆ«æŒ‡å‡ºçš„是¶‰§j¡¹å’Œ‚_‚_‚_‚_‚_‚ _PARAMETER‚£_XXX‚º‹Ù ·ï¼Œä¹Ÿä¸å†ä½¿ç”¨å±žäºŽè‡ªå·±Ž­˜æ”¾å€¼€a®¹å™¨ã€‚¨¨¡l¯»å–„ττττχ'‡#‘„PN‘ Ž执行一å°æ®µä»£ç ï¼Œ从Î*核心中专门å…3­b÷‘…¸ä½ç½®åŽ»è¯»å–æ•°æ®ï¼›”1†M±÷†O†O†O†O†O†O†O†O†Hå¦ä¸€å°†g•¡¯¹ç›¸åŒ„û进行攄9‹‚‹¡…¶ä»–部°áœ¨éœ€è¦‡O‡O“Ù—¶å€™ï¼Œ˜;‰p那个佈‡õž‡ó„`‡ßhttp:/ž€„/wiki.nginx.org/HttpCoreModule#.24args">$€9 的修改会影å“到所有部分的功能。我们æ¥çœ‹ä¸€ä¸ªä¾‹å­ï¼š

    location /test {这里戌Á先把内建å˜é‡ ‚Iƒû‚rq值,å³åŽŸå§‹è¯·æ±‚çš„ÕRL å‚æ•°º—“ä¿å­˜åœ¨ç”¨æˆ·åƒˆ¼ƒ中,然åŽé€šè¿‡å¯¹å†…„§€1„r指令分别输出ˆ¯ˆ­å’ŒŒ_€¥ˆrŠûšØ因为寉g‰g„ׄ׉g‰g‰gžÿžÿšç›´æŽ¥å¯¼è‡´å½“‰—å‘生å˜åŒ–,因此内„DŽDŽDŽDŽDŽLJÈPARAMETER… _XXXŽƒ‡ªç„¶ä¹Ÿ… éšä¹‹åƒÙ£‰µ‹è¯•çš„结果è¯实了这一点£×™'™'£×›M$ curž€'…Ô¤Ylhost:8080¤z?a=3'œo‚$ ¯žñ3WWT“£žß…¿…¿…¿>ž««P¬ˆŒ3‘ ¯Ç—~˜¯—L„«, ®H以“ç“ä—ñˆçš„值˜õ但éšåôš”O”K‘ˆA°†…·“sˆå¼ºè¡Œä•Kw†/†(… 终†_¥†(‚ ’0动å˜ä¸ºäº†J‚.‘‹_‹_‹^ p¶ß¸ªé€šè¿‡„«ƒ¾†h﹃标准çš„ÈTTP 代ç†æ¨¡å—‰¿‰¿‰¿‰»Proxy‰Ã">ngx_p€‰î»†'†'†'—7·šrverº¿“ç”ç¼fiste¼P—ùµ‡€Ÿ‚ÿ¾¾ƒÇ¯¯¿¼ÿ¼þfoo=1&bar=2¹§‚O‚O‚/€2‰Â_pas‚H‹|127.0.0.1žé1/ƒ)‚—‚—‚'¼w''€ç€ç‰€ŸŒW''ƒŸŒWŒS1…?‡€Ÿ‚ÿŒWŒSŠ“ƒÇ¯€W€!¶™Œ É¥ÀŒšŒ‚‚ˆŸ''€ç€ç†G–––">¯里我们在œ Ž±œé…ç½®å—中定义了两¸虚拟主机。第一个€Çœºç›‘å¬ —™ 端å£ï¼Œå…¶ƒ2–"©D¹x£è‡ªå·±¨¨žÇžÇ¨¨¨¨¨¼g®§®§— æ¡ä»¶地修攩™g™b§\ºP­à†O†O£å†é€š†0†††¤Ç¤Ç¤Ç…è¦ë…Y‚G‚G‚G‚GˆL">€g‚£Œ‡ä»¤é…ŽÀŽb¡åå‘仪‘‰` €x本机çš„Ž1Ž上的¬æœåŠ¡ˆ­ž. 默认情况下,…ÿ…ÿ…ÿ…ÿˆ?ˆ?ˆ>”è转呃ëŽ;½˜远方„—Š¡çš„æ—¶候,会自动把当å‰也转å‘到远方。°o™÷™÷™ñ€Œæœ¬æœº‰?‰?‰?„¨正是由我们åšj ™ÁºŒä¸ªè™š™Æ¸øæ供的。我äœòooƒÚŒ!¤¥ Œo ¹ˆ©ç”¨ŒŒŒŒE¤À’ ¥">€1‘¯¤è¾“出åŠ7Š7Š5‹‘»¥æ£€æŸ¥˜ç˜ç£é€šè¿‡„„„————®žé™…转°¡™¥çš„„‚섵ŽWŽWŽWŽS‹#‚ ‚´®¿é—®ä¸€–¦ß™šæ‹Ÿä¸»机£€€„œºçš„ /testÉ    $ curl 'http://localhost:8080ƒ?blah=7'ƒB
我们看到,虽然请求自å·±æ供了ÕRL å‚数串ˆš…kƒBà但在€Ê†Ñtion ‰¯ ä¸­ï¼Œå‚ 被强行改写æˆäº†ê†×†×.‹¡ç€ç»ç”± €g$ƒÛˆå˜é‡çš„赋值æ“作,也æˆåŠŸå½±å“到了ƒƒƒ‹ß‹Ü">ngx_‹¢‹{¨¡å—çš„È为。š•••’ 读å–å…A时执行的这段特殊代ç ï¼Œåœ¨Î„“‘Ž€称为“å–处ç†ç¨‹åºâ€ï¼ˆgetèandler);耔”ƒƒƒƒˆ™è¢«ç§°ƒ,­˜å¤„熃/¼ˆsƒ/ƒ(Ži¸åŒçš„…Tˆ»一般会为它äœÀ”„9准备丼ƒL†ƒfŒä»Žè€Œè®©è¿™äº›Žï‹Š充满é­”法。‹ï‹ï‹ï‹é…¶å®žè¿™ç§æŠ€å·§åœ¨è®¡ç®—世界并ä¸é²œè§ã€‚比如在é¢å‘对象编程中,类的设计者䇛¸ä¼šæŠŠ€ó“±‘˜å˜é‡直接暴露给ç 用户,而是å¦è¡Œæ¥I¸¤ä¸ªæ–¹‡‹ÐmethodŽÒP†åˆ«ç”¨äºŽè¯¥æˆƒ7„˜¯»æ“作和写擘4Š9‚§•å¸¸å¸¸è—ŒM™¨â€ï¼ˆaccessoN‹é¢æ˜¯Ã++ 语言中的一个例孲WŒWŒW²W°#include <string>°/±·œus  namespacØstd€Ÿ‚'‚$cl©° Person {__\public:‚®onst„q†) œ€_…)()ƒÿÿ‚€3retur„¨mò†Ï×g€3}'‡ï€Ÿ¿Ÿ€!void…x…=…ÿ‹…ׂO‚O‚_€D…“ =ó…ßßo…ß'…߀Ÿ¿ŒirivateŒw‚§€3†EŠ?——„"€ï€ï€›–W–W–W®Šš©ªå嫸J’£¸S¨¹™qŸ`¡£·cŸ´0‘E› €²Œ½€³Þ公共斠«©¥ä½œä¸ºç§æœ‰æˆ N‚2‡ë„nŸ'Ÿ"©¿‡‡‡±Q ·è®¾è®¡®!¥½å¤„是显而易è§çš„。类的¨†å¯ä»¥åœƒHƒ¯ƒ¨ˆH´;ä»»æ„仳ôi®žçŽ°æ‰€需的业务逻辑以劂Y‰¯ä½œç”¨±#­3自动更新与当å‰æˆˆn„ œ¨ä¾èµ–关系çš„其他æ?,抑或是直­x修改æŸ个与å‚Ò°d›¸å…³è”¯A•°æ®åº“表中çš„对应å­—段。‰`€­xåŽä¸€ç§情况ï‡È¹Ÿè®¸â€œ‰7€æ‰€å¯¹‚²/†KŽ‹æ ¹å°±º †ª’²–者å³ä½¿å­˜åœ¨‚»顶多扮演ç€æ…*缓存çš„角色ï‹Ò€¨解被代ç†æ•°æ†zŽŠ¿é—®åŽ‹åŠ›ã€‚‘‘‘‘ˆ‰0¹—¹—ˆ¡‡'‡#ºø¿µç›¸å¯¹‡P„PNginx ‡S†“9”¯æŒç»‘定“å­ú¤„ç†ç¨‹åºâ€çš“ùã模å—在创建å‚Z时,唉选择是å¦ä¸ºåŠ³ˆ†é…å­˜放值çš„容器Šæ˜¯å¦“9·±æä¾›‡8»@ºþ†6‡?…G…D‰÷‰÷‰÷‰õ是所有的Έ—都拥有存放…O™¨ã€‚æ‹¥€Ù€¼å®¹å™¨€Ù†ãœ¨‚4核心中被称俢€a´¢å¼•çš„¿»indexed¿°ï¼›å之,则远未索忈non-߇g‡g‡g‡c¨kš€‘…0‚Ø二) …ðå·²ç»çŸ¥é“,åƒÑhref="http://wiki.n‡©.org/H€°CoreModule#.24arg_PARAMETER">$€XXXƒ§“具有æ— æ•°å˜ç§çš„嘊群,是“未çˆG¡É–这样¶”,…¶å®žæ˜¯它的“å–处ç‘G在起ä§2™³å®žæ—¶扫æ彤请求çš„ÕRL‘‚数串ï„Àå–出ü所指定£€€„®šçš„ÕRL å‚æ•°çš„值。很多新手都会对 $€XXX ƒa®žçŽ°æ–¹å¼äº§ç”Ÿè¯¯è§£ï¼Œä»¥ä¸ºÎ‚é ƒø事先解æžå¥½å½“å‰è¯·求的所有†O°ï¼Œå¹¶ä¸”把相关的††††††††å˜é‡çš‰‘‰… ®¾ç½®å¥½Š 然而事实并éžå¦‚æ­¤„à†»根本ä¸会事先就解‡†w°ä¸²ï¼Œè€Œæ˜¯åœ¨用户读å–æŸä¸ª†×†×†×†×†×†×†×†×†Ñ时,调用其“å–处ç†ç¨‹åºâ€ï¼Œå³æ—¶åŽ»扫慷…±ˆ1±»ä¼¼åœ°a†…建嘂ø…Ÿ…Ÿ…Ÿ…Ÿ…Ÿcookie_COOKIE…˜€„…µ也是通过它的“喅Ÿ…Ÿ…Ÿ…™C‚j‹ŠÌ¼«è°ˆï¼ˆ四)ƒ³ˆøå¯ä»¥é€‰æ‹©å°†å…¶å€¼å®¹器用作缓存ﰿ™æ ·åœ¨ )¬¡è¯»å–—Ž‰é€™ï¼Œå°±åªéœ€è¦调用ℷ„·计算一次。我们下é¢å°±æ¥çœ‹ä¸€ä¸ªè¿™æ ·ƒ例å­ï¼š ˆ§ˆ§ˆ§Šè    map –Ys€8foo {Ž’˜ð里首次用到了标准ªwªwªwªsMapªk">ngx_™h©Â模å—皸ÿ‚'‚'‚'¬Œø">‚%é…置指令,柼必è¦åœ¨æ­¤ä»‹ç»ä¸€ä¸‹ª!‡ˆú‡ù¦É‹±æ–‡ä¸­除了“地图â€ä¹‹å¤–‚À¯œ‰â€œæ˜ å°„â€çš„æ„æ€ã¢À¯”方说Q¸­å­¦æ•°€0‰ 讲的“函数â€å°±æ˜¯„pç§â€œæ˜‚Œ‚@»@ΩҠ‹ »ˆßˆßˆßˆßˆßŠøˆª©R«ñ«IºŽå®šä¹‰两个ƒd­5‹é—´çš„æ„Š³À系,或者说是函数€Û…x回到上é¢è¿™ä¸ªä¾‹å­ŒFƒ˜†††††††…‹º†ç”¨æˆ·¾à˜™Ž+与ƒGƒGƒG¾¯¾¯Ÿ±¾`€9ƒz内建åˆoˆo‡•特别地,用æ2ˆPˆã记法„úy =æ(x)…³`‘ˆÔ—©†!ƒû”RÂ自å˜é‡¶ *x ¸é‘‡×ªˆ™æ˜¯â€œå› å˜é‡®y­峯ª…q€¼æ˜¯ç”±‰Ç‰Ç‰Ç‰Ç‰Ç‰Ç‰Ã‚t¥å†³å®š€x‘¶按照书写顺åºå¯ä»¥ˆW»¬å°†„'„'„'„'„'„'ä‡Ú†Åš¥‡Ï‰sŽë¸Šã€‚¾ÿ§§§§§ 现在戅*†æ¥çœ‹…_…_…_––––‰çš„映å°„规则:„„„„x†Q®E‚˜µ¾†ñ¹¯®×¯·€Edefaul·ˆ€½Ÿ··¶¸¸€€!1Çdz'€ç³'³'‡‡³#Š±æ‹¬å·ª第一行的Ž"…äšd©ú£xœx殊的匹é…æ¡ä»¶ï¼Œå³当其ä»–æ¡ä»¶éƒ½ä¸åŒ¹±‹è—¶å€™ï¼Œ¥»#æ‰åŒ¹é…。当è€Úé»˜è®¤æ ƒ4—¶ï¼Œå°±把“四ϓ…D”T”°€Ú0€Â. ž@‡w‡sºŒè¡Œçš„²£‡™#如果†¯ƒ>¡×精确匄ñ—­º€û†K字符串,则æ…ï‚·…ï…ï…î1…숂’¤è¡Œåˆèµ·æ¥ï¼Œž}±å¾—到如下完整的昗:当¦€„½“ $€9 的值等于 debug明白了‡‡‡‡{Map‡tmap">€(‡B指令çš„å«ä¹‰ï… †æ¥çœ‹„blocation /test„Ì在那里,我们先把当剆ÿˆ§ˆ¤ä¿å­˜åœ¨å¦ä¸€ä¸ªç”¨æˆ·#Ëorig_ö中,然åŽå†å¼ºè¡ŒæŠŠ‡Ÿ‡Ÿ‡Ÿ€¼æ”¹å†™‹Õ/†Ñœ€åŽæˆ‘‡†ç”¨ƒ¯ƒ¯ƒ¯ƒ«Echoƒ¬e€X">€1‹_¤åˆ†åˆ«è¾“出‡‡å’ŒŠ‘¼ã€‚ˆ从逻辑上看,似乎ŒÀ†<‰û‡¢†o†o†oŠŠŠŠŽ ‰ç™ 之åŽï¼Œæ ¹æ®å…ˆå‰çš„ƒŸƒŸƒŸ•G•G•G˜ å°„规š›¿“‘ø此时皚rº”当自动调整为字符串œ¯>, 而ä¸è®Œt‚¯ŽŸå…ˆçš„‘1˜¯æ€Žæ ·€xŒH”x°测试结果并éžå¦‚æ­¤:WWWPƒY    $ curl 'ˆ´›¡lhost:8080›Ê'„¢
第一行输出指示–7–7ߦ¸这正是我们期望的‰˜•˜é¢è¿™ä¸ªè¯·æ±‚并没有æä¾›ÕRLP‚数串ï–ຎ是’§’§’§–?–?–?–;ŸAˆçš„å–­Æ空,å†æ ¹æ®æ§5–H定义çš„映射蔧‘ÿ”¥§X‰£次被读å–时篥•K±M‰Mˆå³åŒ¹é…默认x«ˆˆÐ›Tfaul¬k æ¡ä»¶ï¼‰ã€‚“¿ŽŽŽ•°„yºŒè¡Œè¾“Ž˜¾ç¤ºï¼Œ¬© ÷ ÷Š¿Š¿Š¿Š¿Š¿Š¼¯ÇJ›ï¡o¡o¡iŠ»-†Úä»ç„¶æ˜‰€ð’d…脶ä¸ç¬¦åˆæ˜ å°Œ‡因为当†g†g†g†g†g†g†c§'…¾Ž(…§…§£æ¿ç¹£…x究竟是为什么呢?¿¿¿¸其实原因很简å•ï¼Œ •s¥ß“ç“ç“á“ͬ®‰oˆ™è®¡ç®—p† •H缓存ä½了。刚æ‰æˆ‘˜(说过,NŠ 模å—å¯ä»¥ä¸ºå…Xˆ›å»ºçš„„;选择使用值容器,作为其“å–处ç†ç¨‹åºâ€è®„™ªë‚X„ƒ„P›øŽ¯Ž¯Ž¯²gŽ¢">ngx_²f…šš¸„…#—´çš„映ˆ™ƒÒ足够昂贵,需è¦è‡ª²€将因å–ü…W…P‰»¸‹æ¥ï¼Œ• ·åœ¨å½“¡È¦»ˆÉ‡bŠ0‡x中如æžœå†æ¬¡èJ¨;ƒ6‹n¡‰‹R直接è¿”回缓åb‰A„:ƒÙ¶²‚ ·ð‹È该å˜é‡!‹‡‹‡å†è¡Œè†b£”·”·”·”°–1º†è¿›ä¸€步验è¯这一点,我‘€„9¦¨åœ¨è¯·‡ø‡€…ë±èªP®·®±›G›E:„?„?„?º_º_º_º_º_t?‚꺸ºº¹yžggºº…ï…ï…ê‰看到,现在ºº±Žæˆäº†¢ßº¹§T  _ [ /´ C–qœš_š_š_©©©š‘„÷¤dŽ½N按照昣¿€Ø”g”gŸä–ì²¾¿æ˜¯‡¯ª€ŒåŽç»­•Ñ†²‡×‰—¼æ—¶ï¼Œå„Ѐ»æ˜¯å¾—‹P§™ª‚Ç>­9›Ðš?š:论‰'‰'‰'‰'‰'‰'¸„Žæ¥å˜Ž¯ò à›_‘?‘?‘>ƒ÷ƒ÷ƒ÷§oƒë§@">§nŒ‡ä»¤å…¶²³Ú€ä¸ªæ¯”较特殊ˆ例å­ï¼’M®ƒå¯ä»¥€`¡à户å˜é‡注册⟟‰]”用户åú“ ·±å®šä¹‰ŠÃçç的计粳y½“然,此规则在这里被陂¡£ð¸Žå¦ä¸€©a¦õ映«€€„射关系。åŒæ—¶ï¼Œä¹Ÿ并éžæ‰€æœ‰ä½¿ç”¨äº†â€œå–处ç†ç¨‹åºâ€çš„å˜é‡éƒ½ä¼šç¼“存结果,例如我们å‰é¢åœ¨ (三) 中已ç»看到¡href="http://wiki.nginx.org/H€°CoreModule#.24arg_PARAMETER">$€XXX‚ê†øä¸ä¼šä½†á值容器进行ç†"ˆ

类似„ç„ç„ç„ãMap„Û">ngx_map„J模å—,标准的‚o‚o‚o‚kGeo‚ox_geo‚j等模å—也一样使用؇@ƒ†û机制〇/‡/‡/‡)上é¢çš„例å­ä¸­ï¼Œæˆ‘Ž°还应当注æ„å_††ˆˆ|#ˆP">ˆ~Œ‡ä»¤æ˜¯‘2tt>server‘ ªÜ¼«è°ˆï¼ˆ五)‹p‹‘‹W‚ǂǹ °Â»Jaæilepos=0000021263>‚¢¥aŠ:¦²²´¦容器çš„生命期是与©»‘定的˜+€Ø‚p«¢¹œ‰æ„é¿开了“请求â™Úæ­£å¼å®šä¹‰ã€‚大家应à«直默认这里的“请û¹ùƒHŒ‡å®¢æˆ·端å‘èµ·çš„ÈTTP—`Q‚¹›ïž¬–界里有两ç§类型皃µã„)©±«åšâ€œä¸»è¯·æ±‚§Cmainòequest¯³’å¦ä¸€ç§则å«åʡϼˆsub¿£æå…ˆæ¥ä»‹ç»ä¸€ä¸‹å®ƒä»¬®ÿ{³x谓“丅²,˜¯ç”±ˆ›‰^从ˆl外部å‰Ü‰®„¤’:¤øµy€‰€æœ‰ä¾‹†ˆŒ»ñ¶‰åŠåˆ°ƒçƒæŒ…括””””¹)¸¤ä¸ªä½¿´À Ç Ç Ç ÃEcho ¬e€X_exec">€^‚Òå’Œ‚_‚_‚_££r€s">€L‚R“P令å‘起“内部跳转°G­ã€‚www¨9€Œâ€œå­‰~‘hDŒ³˜É½H¤„ç†çš„C–ƒë®“‹级è”诎 ƒƒ‚y–观上很僙7±‚,但™0现上å´å’Œ‘¤议乃至网络通信䃨‚¹å„¿å…³系都没有。它®€„是Îginx 内部çš„一ç§æŠ½è±¡è°ƒ用,目的是为了方便用户把“主请求â€çš„任务分解为多个较å°粒度çš„“内ƒ¨ÎƒH并å‘或串行地访问‚ location下é¢å°±æ¥çœ‹äŠ 使用了“å­è„÷„例å­ï¼š‚ׂׂׂЕ    •E /mai€8{•’
¤¸里在¤×… Š¥—Ø–¸¥过第三方 ngx_†I€ªb‚ÉŒ‡ä»¤åˆ†别å‘起到†Ê¹†{å’Œ€“Š€“¬Ñ¸¤ä¸ªæŽ¥¬P„€ÀGET类型皨\¬€‚ç”±†'†'†'†'†'…¯†'†'…Ãw¥÷°¨¶æ‰§è¡Œæ˜¯æŒ‰ç…§é…置书写的顺åºä¸²µ!¤„ç†çš„ɳåªæœ‰£ˆˆ‡ë¬Cj³y¯•ä¹‹åŽ¦R¤ÚŽ¥ç€å¤„‰Ïç‚。这䊅§£Õ输出会按执行顺åº拼接èµ·æ¥ï¼Œä½œä¸ºƒ“ߌŽ最终辂a¦7–·–·¦7˜Ý$ curl ' ‹ylhost:8080ƒz'™ÿšß‚‰]€÷€÷œÂ€÷›ß›ß…/…/…+我们看到,â‰ç‰á›(å¼çš„通信是在åŒä¸€¹ù™šæ‹Ÿä¸»机内部进行炴#¹„核心在实现âƒ?»?»;²€‘8½«²8若干个à 函数,完全ä¸æ¶‰åŠ任何网络或者ÕNIX 套接å­—(socke»i†S‘€‡Ô”±æ­¤å¯…`ˆ1‡ºâ€œå­„ç„à—ƒ•ˆçŽ‡æ˜¯æžé«˜çš„。/‹‹‹回到å…ˆå‰å¯¹ˆ|å˜é‡å€¼å®¹å™¨çš„生命期的讨论,慎°åœ¨ä¾æ—§å¯ä»¥è¯´ï¼Œå®ƒä»¬çš„æ„è与当å‰请求相关蔅{æ¯ä¸ªè¯€Ù都有所有å˜é„‡„‚‹¬ç«‹å‰¯本,åªä¸è¿‡å‚ï‚æ—¢å¯ä»¥æ˜¯â€œH¡Ošp¹Ÿå¯ä»¥€óŠ§¥ª p便是父å­è¯·æ±‚之间ƒyŒå嘄°“`般也丠Y†互干扰。让æ‰2ž°û”ãå°å®žéªŒè¯æ˜Žä€©‹è¿™ä¸ªè¯´æ³•ï¼šïïïž¹·¹³i¹¿›Ÿœ€EsetŸàv»1©¹ïŸ€Ÿ‚7‚»î­„ h‚W¿¿¿¿j¿¿€Ÿ‚W‚7¿÷ "†:†ƒ"‚W¿}}€çƒ7€ŸŠ×†×ŠÏggŠÏŠÎˆw——†'†#p†··†€ç†€Ÿ†‹4†gg††Œ×——††p†··†€ç†°Ÿ—·—·¥™œ¨è¿™ä¸ª例å­ä¸­ï¼Œæˆ‘们分别¹/‚š¾—ƒIå’Œ½G½C‚™‰ä¸ª€Â‰€ãé…ç½®å—ä¸­ä¸ºå³   ­—的嘠8ƒ‡¹ƒ„s设置了ä¸åŒçˆ¦@¹¶äºˆä»¥½{¡H特别圲†l†?¿g¥å£ä¸­ï¼Œ³€€„æ•…æ„在调用过 /foo‚q    $ curl 'http://localhost:8080ƒª'ƒ²
显然,OOOOOKp处ç†è¿‡ç¨‹ä¸­å¯¹å˜é‡7‚£„自所åšçš„修改都ä¸æ¯«æ²¡有影å“到“主请求ƒ0Žo‚b. 于是è¿™æˆåŠŸå°è¯äº†Ç’;»¥åŠå„…π݃Ð拥有ä¸åŒçš„å…·…·’³容器副本。‘wŠ¿Š¿Š¸‚¡¹¸çš„是Šè一些Îginx 模å—å‘èµ·çš„â„¿Š‚´ä¼šè‡ª动共享其“父请求 …f„Öƒ 比如第三方æƒ2 €ù€×st€1…»…¸´¥§Š¿¸W€Œæˆ‘们ŒÖ…WŒÎˆ™æ•…æ„把‚GŒÿºÄ­`写æˆ"‚=. 访问¿‚÷»oœå¦‚下ï¡'’’¡'»?»?»?»?»?•Ç–§¸ý…e/–ï„w„w„w>‰ë看到Y#Š‡"·p‰·‰·¬Ù·.¶¶µ´ö‰ŸŠT¸Ðµxß—?—?—?”ç—?—?•·—>³”ß²j¡®å®žæ˜¯与其″_´y´—x套¶·³õ¸—Š_Š_Š[‰@½ 上é¢è¿™ä¸ªä¾‹å±ÉŒç›¸ä¿¡æœ‰è¯»è€…·ø’‘h¾bºä»€ä¹ˆâ€˜å­è¯·„º™–o—˜{没有出现在最终的€ó¥H呢?â€答案很简啄8那就是因为  ±›ê½¿½ç•¥â€œ„÷½€º”体,œ0åªæ£€æŸWWR状æ€ç 。当ç€}„x„J2XX‡^时候4‚………„烗而让Ž\继续处ç†å½“å‰çš„请X§Y¦åˆ™å®ƒˆ¸‚xç«‹å³ä¸­æ–­å½“å‰ï¼ˆä¸»)请求的执行,返回相应的出错页。ŒÁšÃ™"‚ š÷Žœ…¿”CŠ•°W™©÷©÷©÷©÷©÷ˆù½œäº†ä¸€些输出,所以éšå¼地返回了指示正常…¨Œ‹00ŒŒ×˜7˜7˜7˜2¦‚…÷ŸŸŸŽÏŸŸŸŸš°样父孉Äïïí8—(Q™½ç„¶å¯‡ØЂ±‚之间Ž¹•°æ®åŒå‘传递å˜å¾—æžä¸ºå®¹易,但是对于足够å¤æ‚皺䒩´ä¹Ÿç»Š`导致ä¸å°‘难䰰ƒè¯•çš„诡异âug. œƒÈ户时常ä¸çŸ¥é““父š…XŸä¸ª‡w¥^ƒá…¶å®žå·²ƒùœ¨å®ƒçš„‹“‚J”被æ„外修改了。诸Ž此类的因共享而导†h–¡†€¥½çš„“副作用â€ï¼Œè®©åŒ…括/––––»–‚@ÿÿÿûLua÷x_luaì@劂‚‚‚SRCache‚?x_src€™“ºŠ†…的许多第³€€„¬ä¸‰æ–¹æ¨¡å—都选择了ç¦ç”¨çˆ¶å­è¯·求间çš„å˜é‡å…±äº«ã€‚

Nginx ‚;漫谈(六)å‰é¢åœ¨ †¨ŠØ†ªa> ƒáˆ‘们已ç»çŸ¥é“,许多内建†;Œ ä¸æ˜¯ç®€å•çš„↙˜æ”¾å€¼çŒ®¹å™¨â€†Q®ƒä»¬ä¸€般会通过注册“存å–处ç†ç¨‹åºâ€æ¥è¡¨现得与众ä¸åŒï¼Œè€Œ‚‹å³ä½¿æœ‰å­˜æ”¾åƒÇ¨ï¼Œä¹Ÿåªæ˜¯ç”¨于缓存“存僃|È计算结果。æˆB之å‰è®¨è®ºè¿‡çš„ŠAhref="http://wiki.nA.org/H€°CoreModule#.24args">$€9‹*’¤­£æ˜¯é€š‚¸†xŠ „ψG返回当å‰è¯·æ±‚çš„ÕRL‚P‚数串。因为7±‚也å¯以是–‡Œ£所以圔_€Û读喇O‡O‡O‡O‡O‡O‡J–†·†·会很自然地‡‰â€œå­˜×žY‡7Œ³ˆ¨看这æ ·çš„一个例å­:˜§˜§˜§Ÿitt>    location /mai€8{Ž8里在 ¡Œ2 接å£ä¸«˜’Hˆç”¨”Ÿ”Ÿ”Ÿ”›E…蔜†A">€1›Â指令输出当åšwž¯‚Ï‚Ï—g—g—gž¯®é•p€¼ï¼ŒæŽ¥ç€å†ç”…·‚ï‚ï…·…·ÿn…û€~†G¤å‘èµ·å™]‰ë˜‰â. Š´€¼å¾—注æ„的是,我ä©è°›„Ï„Ï„Ï„Ï„Ï„Ï€„Ë语å¥ä¸­é™¤äº†é¦â第一个å‚数指定“Ÿ/Ÿ*¦€I «q¤–,还æä¾›äº†ç¬¬äºŒä‚ €ð®‰¦°‚R该“孂o¨ï¡¼½Á³‰ ›/2‰B·À¢©œ€åŽæˆ‘ˆ¹®šä¹‰äº†Š”o£ï¼Œåœ¨é‡Œé¢è¾“’HP†ú‹ŠoŠoŠo’’’’‘ë„€Ž—˜„(µ如下G››§3$ curl '…4Ž lhost:8080ƒz?c=3'žwŸW‚$§¿ È`__\¢€8‹ç—¡_¡_†W†W†S显然,当‹‡‹‡‹‡‹‡‹‡‹‡‹„”¨åœ¨â€œ主请汑ñ‹·‹³–p时,è¾y!°±æ˜¯â€œ¿“¯“¯¼Œ‚Qˆý;而当用在╟ƒ¯“fƒ§ƒ¦ˆ™æ˜¯â€œ·¸ßƒ—‹$’i¿™ç§è¡Œ为正符åˆæˆ‘们的直觉。’7‹ç‹ç‹à与‹Ÿ‹Ÿ‹Ÿ‹Ÿ‹Ÿ‹Ÿ‹œ±»ä¼¼ï¼Œ内建婩‚¿‚¿‚¿‚¿‚¿uri‚°€0ŽGŠŸˆëŠ&其“å–处ç†ç¨‹åºâ€也会正确返回当剂G‚B解æžè¿‡çš„¥!:‰O‰O‰O›»÷»ó™³»ÿ—߻ϻÿ»ø‹‡(»ù‡‘»÷ç·ç¬®¿£¿¿½¯€çœW€Ÿ†‚Άwgg„—†r‚†o†oß„·€ç„·¡‹ß‹ß‹Û©ÏžªÂ©›š÷‚‚÷©o©o©o©on©O…g©OŽ„‡gg©T\ MWˆ…ÿ…ÿ…ÿ>Ÿpä¾ç„¶æ˜¯æˆ‘们所期望ˆ8ŸG‚‚ŸD½†ä¸å¹¸€‚(š¹¶éžæ‰€有的å†ß都作用于当å‰è¯·æ±‚ƒHå°‘æ•°å†oåªä½œç”i©ÿ›2ƒ0比如ç”±æ ‡å‡†æ¨¡å— €ß€Ø æ供的内建å˜é‡ $€€‰ƒY.

ƒïƒïƒïƒïƒïƒïƒgƒïƒï> 在读å–时,总是会得到“主请求â€çš„€c方法,比如 GET‘Ῑ个例å­é‡Œï¼ŒùŒÒëå’Œò†€“接å£éƒ½ä¼šåˆ†åˆ«è¾“出—————‡'—€—ž€¼ã€‚北”2…à„Ã…_„̇Œåˆ©ç”¨„‡„‡„‡„ƒE‹à„„ÏŽ">€€x¢“Œ‡ä»¤å‘起一个到ˆç„£çš„š—€¹œ8‹œ>š^现在刅{Pcurl‹Ä‘½ä»¤è¡Œ工具æ‚ȃ׃և÷ƒß÷€Áƒ³77’¥$ „a --data hell•8'ŠdˆÑlhost:8080„:'”?•‚|Ï–ò„öww ˜_oo——†Ÿ†Ÿ†™–ø€‘”‹?‹?程åºçš‰³‡k€Ó选项,指定ˆ*¨¬½œä¸ºæˆ‘Ž9ª½体数æ®ï¼ŒåŒæ—¶‚¿‚¿‚¸™Ø自动让å‘é€ç‚'¿ç”¨Ž/Ž/­´‘ñ¬结果è¯明了æ‡3…ˆå‰çš„预言ï¼ø˜G˜G˜GœÇœÇœ?œÇœÇ³Â¶¢å³ä½¿åœ…ƒ—‡—‡—™/‰Û¸­ä½¿ç”¨‰1µ:Ÿ+ä¾ç„¶æ˜¯â€œä¸»èÿ—W¢¶7¶4‰o€H¼‡··±有的读者å¯èƒ½è§‰å¾—¢Ö‘»¶è8‹0论有些è‰çŽ‡ï…¸› ä¸ºä¸Š©Ð…ˆ‹©œ¨â€œä¸»…¾‚¼Ó(并辩))Œ‡Œ‡Œ‡Œ‡Œ‡‹ÿŒ‡€Œ‡‡ï¼Œç„¶åŽæ‰å‘“å­è¿ÿ„,所以这些ˆ'ˆ ®¤ä¸ºè¿™…hä¸èƒ½æŽ’除…‡…‡…‡…‡…‡„ÿ…‡€…„‹1›å…¥å­è—˹‹å‰å°±å·²ç»æŠŠç¬¬ä¸€æ¬¡è¯»åˆ°‘3给缓å­˜ä½ï¼Œä»Žè€Œå½±å“到åŽç»­å­è‚£¸­çš„输‹Ø™{™ð†é¿‡ï¼Œè¿™æ ·çš„顾虑是多余的&¤‰é¢åœ¨ˆifilepos=0000056076>五)†â— ¹Ÿç‰¹åˆ«æ到迃…ÃŒ¾èµ–çš„³†Ë容器,是与当å‰è¯·†8绑定的¹‡pç”±Œ¯Œ¯Œ¯¶ïŒ«">ngx_¶™¶S¨¡å—呲€‚¨‘7•Ãƒ½ç¦ç”¨¢ 父å­è¯é—´çš„åŸÚ…±äº«ï¼Œ’ƒˆà˜{‡è£¯……‘¯‘¯‘¯‘¯€‘¯†…建嘣Þ真的佢y…€Š>¬û‹‹Œê‹å®žä¸Šå®ƒä¹Ÿæ²¡žˆx9€’ ˜3’V¥¯¼ƒˆ=’££££ áº†è¿›ä¸€步消除这部分读者¢Ù–‘虑,“+„!¦¨ç¨å¾®修改丿h‹åˆšæ‰é‚£ä¸ªä¾‹„P…¹°†¨Ç…接å£è¾—iŒŒŒŒŒ‹Œ€£/•z¶Ð`推迟到“å­è’执行完毕之åŽï¼š‰¯‰¯‰¯‰¨†q¿ñ€!location ‡ {¿{¿é/€)‡m€E—_×á;¿¿Ÿ¾ "ƒC‡k: ‡ÿˆƒ‚W‚W‚}€ç€æ€Ÿ†ï…b†çgg…/…*‚…'…'…'‚O‚O…'€ç…&Œ¿Œ¿Œ¿>让我们é‡æ–°æµ‹è¯•ä¸€”ÈŽ·ÿÿŽ·„%$ curl --data hell†¸'http://»€€„localhost:8080/main'
å¯ä»¥çœ‹åˆ°ï¼Œå†æ¬¡ä»¥ ‚‚Î 方法请求€Ú†Š€äŽ¥å£çš„结果与原先那个例å­å®Œå…¨ä¸€è‡´ï¼Œé™¤äº†父å­è¯‚©ø输出顺åºé¢ å€’了过æ¥ï¼ˆå› ä¸ºæˆ‘们在本‚Ð中交æ¢äº†„¿„¿£ä¸­é‚£两æ¡è¾ƒ …置指令的å…ˆåŽæ¬¡åºï¼‰ã€‚‰È‰§‰§‰§由此å¯è§ï¼Œæ„£¹¶ä¸èƒ½通过标准的 $€€‰ å˜é‡å–得“åŠ=â€çš„诀a£†ˆ‰ÀŠQ¾¾åˆ°æˆ‘…h最åˆçš„目的ï†-需è¦æ±‚助于第三方模嗆_†_†_†[Echo†[">ngx_e€€…’æä¾›çš„å†…å»ºå† ‚—‚—‚—‚—ˆï‚_ˆ‰€·‰?ƒ¨:ŽoŽoŽoŽh‘±šÅ¡tiošà’B {š¿œ/l€Eƒá "œ§œ¢„Ÿ„Ÿ";‚‚‚_‚~_„O/ È¿¿}}€çŸÏ€Ÿ‡‚χgg„—‡ ¥‡‡‡‚w‚w…O€ç¥›X时的è¾ù终于是我们想è¦çš„—‚w‚w„$ curl --data hell‡X'”l®®†7‡¬·¬·ww¯lGEgg‰†—†—‰ˆB®ª¯ž0ˆ†åˆ«è¾“‰À‰它们å„自ä¸åŒçš„请¡fø¯¿„ å’Œªº„ý.‹„w„w¨á±»ä¼¼žÇžÇžÇ§¯žÇ’W§¯€žt´ø¡çƒ'ƒ'ƒ'ƒ'ƒ'‚uriƒ€q¥ ´éˆ¬ä¹Ÿè¿”回的是“主èªå未ç»è§£æžè¿‡ç®øURL©ù¯•ç«Ÿâ€œ¬W€éƒ½æ˜¯µh΄± …ð部å‘èµ·çš„,屪存在所谓的“未解ƒ(€z原始å½¢å¼ã€‚Œ/Œ/Œ/¾©¦‚果真€Hå‰é¢é‚£éƒ¨åˆ†è¯»è€…所担心的:Š¿的值缓存在共享å€Ü’÷±‚之间†`’Ø作用,这无疑是ç¾难性çš„。我ä“ø„‚ˆ©Žfilepos=00000560760Ÿ”)Œ¬­å·²ç»ç—§¤mdounin.ru/hg/³‰€É_auth¤ï /´ƒ€×st´Ã¶ÚŒ®Ž‹˜¯ä¸Žå…¶€À‡à€Æˆ»‘˜套å˜é‡ˆé»Z‹é¢æ˜¯ä¸€ä¸ªè¿™æ ·çš„å¯æ€•ä¾‹å­ï¼šŽŽŽ¥?¢Äp¥`•8€0tag­¯¡_¢¿€Edefault€0¬ï·€ÿ€3·¼€ 1ÇÇ€ÿĦr€‡€!2ÏÏ°w€ç§w€Ÿ©kerver‡×''·iste†(­¡„‡€Ÿ‚ÿ¹7¹3ˆ‹ƒÇ¯€W€!“s‹ø¾÷÷·»o»jƒ»p»Y€8ºß‚'‚'Š¯'‡w€Ÿ¿¯‡wŽ=‡o§w€W…"Â…w…w‚‚…w''€ç€ç†W™Ç™Ç™Ç">›ˆ里我们使用久è¿äº†­i¡ÿ±Ÿ±Ÿ±šMap±”›À">€(¡;Œ‡ä»¤æ¥把内廴7‚Ÿ‚Ÿ‚Ÿ´7´4³ó³µ«{映射到用户å‚܇ˆŠy¼c上。当ƒŸƒŸƒŸƒŸƒŸƒŸƒŸ为ƒ —ƒ时,则赋予„€ò  1„„„„„„„å–值ƒû‘؃÷ƒ÷ƒ÷ƒ÷2…¶ä»–情况都赋J02. 接ç€ï¼³:‡/ƒ:Ž¥å£ä¸­先用†_²—²—²—ž·²—²—²—a> 模嗻€€„çš„ auth_request‚±    $ curl 'http://localhost:8080ƒê'ƒò
咦?戈ä¸æ˜¯åˆ†æ˜ŽæŠŠˆ‹[这个值映射å1€ó上的么?为ä‰实际辉€ð‚ðÿû‚Z€Ø结果€ò†c Š—†††…¶å®žé“ç†å¾ˆç®€å•ï¼Œå› ä¸ºæˆ‘™•¤’¯Ë’x“å­è¯”‰ ÿ†¬­é¦–先被读喂Ð于是在那里计算出了值†‘¨ˆå› ä¸º $€0€(ƒ"ŒS规则,‰‰zº”当喇ƒÛ‰ï¼Œä»Žæ­¤å°±è¢«‹?ç¼å®¹å™¨ç»™ç¼“å­˜ä½äº†ã€ž‰¢_¢_Œú¢)ðŒÿŒúåˆæ˜¯ä¸Žâ€œçˆ¶è€Æ…±äº«ä¸€套å˜é‡的,ä[½“Έ!„执行æµ回到â‚O‚I•[†7‘o‚‘—ᗶ,‚s‡˜£l¿”回缓†ó–‰_ ‡œ¿™æ ·çš„ 确实太æ„外ä"—Ÿ—Ÿ—Ÿ—˜‹ˆœc例å­æˆ—!ª(次看到,父å‰Íé—´çš„å—š‰R™ƒÀœ¨ä¸æ˜¯‰ÈžÑ¥½ä¸»æ„„ „„„¦@fontóize="4€xb>ˆœƒ*漫谈(七)¤˜¤@‘¤‚Ç‚Çžq¯ aæilepos=000€9181ši…8‚r•pœÈ‡»æ到过,„uåªæœ‰ä¸€ç§ç±»åž‹ï¼Œé‚£ÐÁ­—符串‘Q½†æ˜¯å˜à也有å¯èƒ½åŽ‹æ ¹å°±ä¸Žð…€Ø‰ 义的倴É没有值的å˜é‚两ç§ç‰¹æ®Šçš„值:一€¨ƒ`“Ђ¡ˆæ³•â€‡invalidš³å¦ä¸€ç§\ƒ!‰¾åˆ°â€Xnotæouni‘ŸŠÇŠÇ‘œ¸¾ä¾‹è¯´æ¥ï¼Œå½˜–”¨æˆ·å˜¹Ffoo—¼ˆ›å»ºäº†å´æœªè¢«èµ‹å€¼æ˜gŸO便是 υr›è€Œå¦‚果当剔³¬©URL€‚数串中并没‹Ž¸Š„ŠXXX´•0z†!ˆ™§§§ªÇªÇarg_PARAMETER«€ƒ «1†…建嘑þ††‹÷€ã€‚‹‹‹‹x无论昈gˆcÀ›0­‘¿˜æ˜¯â€œ‚×€ò罢,过P‘á,š´‰€æ‹¥æœ‰¡ù’ª’’Œå’Œç©ºå–oˆ""¸‚(‚­£–Ù®Œå…¨ä¸åŒçš„,比如ÊavaScript 语言中也有专门的ŒB“hefinedô’Œ€ºnull——„ì¯!Lua‚ß‚ß‚ßni‚ : 它们æ—¢ä¸ç­‰åŒäºŽç©º‡x¹Ÿä¸ç­‰€ó€ð‚b0¸­æ›´ä¸æ˜¯å¸ƒå°”åµÔfalse". 其实ÓQL…„¥NULL­Ô…˜¯ç±»ä¼¼€ðœ³东西ã€ggga虽然å‰é¢åœ¨¦ÿ¦ÿ¦ÿ¦ÿ¦û®‡”±—w—w—w—sRewrit—se„€(¿ Œ‡ä»¤åˆ›—(¥NžÀåˆå§‹åŒ–就用在“嘀ñ’值 Ÿ²效果筌·Œ·ª*ªè‹™› ä¸º…………………Ž‚@ˆ…¿„Ê自动注册了䶅º–处ç†ç¨‹åºâ€™°†â€œä¸œ>¸w€¼è½¬æ¢ƒ0†g¸²ã€‚为‚Ð验è¯è¿–Ѐ点,æ»ué‡æ–°çœ‹ä¸€ä¸‹ŽÇŽÇŽÇŽÇ讨论过的那ä¾5°Ø’_’_’_»±”x    location ºÐo {•j/foo€1‚     $ curl '…llocalhost:8080ƒA'ƒJ
从输出上看,未刊ۆÀ‹ç‡‚å˜é‡ç¡®å®žå’Œç©ºå­—符串的效果等åŒã€‚但细心çš„读者åŠR应该就已ç»æ³¨æ„到ƒðp于上é¢è¿™ä¸ªè¯·æ±‚,NŽ ‚X错误日志文件(一般文件åå«åš…êerror.log†)中多出一行类似下é¢è¿™æ ·çš„警告:ŽŠŠŽŒ‚[warn] 5765#0: *1 using€8ninitialized "Š˜" variable, ...Ž7Ž7Ž7„'„'„#‰R†a…»”0è°è¾“出的呢?答案• ™™™™ Rewrite™$seƒ €(™¤ä¸º×˜S³¨å†Œçš„“å–处ç†ç¨‹åºâ€ã€‚à™ï™ïŸ9“B„·„·„·¿¿¿„«” 际执衄I“Q€™ï¼Œå®ƒ会对宔Yå‚æ•°„bŒ1 = †1]"¢÷¡Œâ€œå˜—Xæ’值â€计算㖰ºŽæ˜¯ï¼Œ‚C—Іˆ‡™VƒÀ被读å–,而ΖB€È首先检查其值容器里的å–值,ç¢Ò…Ùœ‹åˆ°äº†„è¨Éˆæ³•â€™C特殊候…˜–‰å†³å®š继续调用…g…g的“åçç‚‹····²开始è¿行,它呇ìž/ž+‰“å°å‡ºŸÃé‚£æ¡è­–Z¶ˆæ¯ï¼Œ然åŽè¿”回一䇈£ç²ä½œä¸º……Š)ˆz并从此缓存峄WS‹óŽh‡ˆŸ¿›Ÿ›Ÿ˜x¦Ï¦ÊŽx¦>刚刚æè¿°çš„è¦;¿‡ç¨‹å…¶©É°±æ˜¯é‚£些支æŒ值缓存的内建å˜é‡Šé工作原ç†ï¼Œåªä¸è¿‡™™™ž?ž?ž?™—œ¨è¿™é‡Œ借用了这套机制楎«° 正确到׎d…KŸŠ¾—一æ›ñ™$ªæœ‰â€œä•••‹•™9§¦å‘‚¬•3“““š{‚6 没找到â€å´ä¸ä¼šã€‚ŽoŽoŽo¸1³…¯ï‘Šä¸€èˆ¬ŽÉŒ‡ç¤ºå‡º我们皇Ýé…置中存在å…z³è拼写锗º‘Š‘或是 €«Ž¹‹ˆä½¿ç”¨‹¸尚未刊ÿŠÇ› ä¸ºå€¼‘ƒzˆ…™U€˜Ã¹‹8生命期中也äˆz›d¤šæ¬¡ã€‚¬¨šÐ‚X’’’’’~">ngx_r€›’›¨¡å—专é—¨æ供了一桂÷‚÷‚÷‚÷•o¹¹x_¹=_» ">€ï€ï€ì„RŒË—¯ç”¨äºŽç¦æ­¢è¿‰Ÿ£ó‘‘‘‘ ž‰æ到–±†ß†ß†ß†ÛCor†Å.24arg_PARAMETER">$€XXX…Òœ‰ŽÕRLšàµV «²¦hš`·™Ñ¨ª˜O˜H‰¾ä¸åˆ°™;但é—憾的是å¨ä¢°”Ÿé…ç½®语言(我们估且这么称周øƒï¼‰ä¸­æ˜¯ä¸èƒ½很方便地把寒Œç©ºå­—¬»区分弥的,比如:‹Ÿ‹Ÿ‹Ÿ‹˜‡©    location /test {ˆb
ªC‰ë输出³+ƒ½¹§®»©pŒæ—¶æ•…±¹Åa¸æä¾›'#‚>:‰÷„w„w‰÷†š$ curl '•Šylhost:8080Šš'‡¿ˆŸ‚Š]'ˆßˆß„o„o„k©Äœ‹åˆ°ï¼Œˆó•‡•‡••!•ˆæžœå’Œ’g¸²æ˜¯ç›¸‰ ¨¶²R€å›žæ˜¯–¤±}‹Aæ’值â€引擎自动把ƒŸƒ›»™å¿½ç•¥¥€ w†‡†‡†ƒ½Ñ¹ˆæˆ‘们究竟应当如何æ•æ‰‚Òƒ7·³ç§ç‰¹æ®‡¹³A¸ªå½±å‘¢?æ¢å¥è¯è¯´ï™@‚ê‚¿‚¸›ˆ¯…Ñ›'¥å‘¢ï¼Ÿæ˜¾ç„¶ï¼Œ下é¢è¿»q’ö€À’¿’¿”òŠ0½p„ëºû  其值庄YŒ)ƒÿ²ï¼š‰o‰o‰o”W”W”W//loÀ€„calhost:8080/test?name='

但我们å´æ— æ³•å°†ä¹‹å’Œå‰é¢å®Œå…¨ä¸æä¾› ‚Ùƒ±‚ò å‚æ•°çš„情况给区分开。„ƒ÷ƒ÷ƒ÷幸è¿çš„是,通过第三方æ¨¡å— ngx_lua‚†ä¯ä»¥è½»æ¾åœ°åœ¨Ìua 代ç ä¸­åšåˆ°è¿™ä¸€ç‚¹…Ð请看下é¢è¿™ä¸ªä¾‹å­:†¯†¯†¯†¨‰location ŽŠ {OŽol€Econtent_by†Q §w€W€!if¨gx.var.arg_Y ==€°il then‚w‚w‚€W€W‚’say("“„missing")‚g‚gÇ€W€ els‘«?€Wƒßƒß—X",‡‡€˜"]„w‚ÿ‚ÿ‚Ÿ„sndww€2';//€ì}€ç›§›§‘‘‘ ’­å’Œå‰“À€—ŠŸèƒ½ä¸Šéžå¸¸æŽ¥è¿‘,除了我–‰–ƒ’ªœS@å£ä¸­ä½¿ç”¨äº†™Ï™Ï™Ï™Ï™Ï™Í ›ÓœÀ‚'‚'‚'‚'‚"#•Ï‚Q">€‡‚Öé…置指令,嵌入了ˆå°æ®µæˆ‡ 自己çš„Oæ¥å¯¹Îƒé£È˜é‡ˆ*$5ˆK¨特殊值进行判断。‰¸‹ç­ä¸­ï¼Œ当‚?‚?‚8‚为“没找到â€ï¼ˆæˆ–者“ä¸åˆæ³•â€Á‰æ—¶ï¼ŒŒÂfooŒ¿Œ¸¼šè¾“出©þ:íš#;£ã…`结果:£/’'’'£/”J$¡˜uržð',£±²_‘*¢'•o²/ž¯„ŒO–·„—„—„—>因为这是我们第一次接触到’’’’”Ÿ”Ÿ”š®™‰€ä»¥éœ€è¦å…ˆç®€å•ä»‹ç»ä¸€ä¸‹³ÊƒGƒGƒGƒGƒGƒGƒ@¸(“Ò语言解释器ï탋uajit‚ê€\html">‚(JIT‚Òå³æ—¶ç¼–译器)嵌入ˆÀq–Ã核心且Ñ从而åµê®©ç”¨æˆ·ŸÙ_Z直接è¿è¡Œ…·€ç¼–写ç˜x¨‹åºã€‚¸wŠ€‰æ‹©åœ¨‚t–bŒçš„请求处ç†阶段æ’入我䎠œŸœ˜¹Q•Ðº›€§æ—¢å¯ä»¥ç›´æŽ¥内è”圃E  –‡ä»¶ä¸­‡9¹Ÿå¯ä»¥Ž@独放置在外部™’.Œòš‚ºç æ–‡øŒwƒñ字节砀î‰é‡Œï¼Œç„¶åŽåœ¨„„¿à¼•ç”¨è¿™†0€«ˆ!·¯å¾„。œG—·—·—²žåˆ°ä¸Šé¢è¿™ä¸ª¢ã•I­^ˆï„˜ƒ‹¦?¦8都是通过¡· ç¸ªç”±“¯–·–·–·–·–·–²æ供皎¤Û¹¯”如引„Ǫÿ>$VARIABLEŒ §*就在†Ï†Ê†™ä½œ…/…/…/…/±“¾Mƒ%…²€—ƒ²™Ùƒx‘™H®A­˜…G°?®>–€ºç‰¹æ®Šå€¼â€œæ²¡®®®®¼ŒŒ'„H‚¿‚¹‡¶¸–界中±C…ŽÃilZ‰1³œ‡€é‡Œçš„“空 0›£于2€¸– 符串)。我ä’‚²+å“应体内容çš„时候ƒ‘ˆ™ä½¿ç”¨¢‘ŒWŒWŒWŒWŒVsayŒ €H‹Â“Ûšû‡½æ•°ï¼Œx‡Z‚ï‚ï‚ï‚ï”g”g”gš„,功能上等价于‚ÿ‚ÿ‚ÿ‚ûEchoƒx_e€€ƒ—çš„‚7‚7‚7‚7ˆ‚ ">‚>¡LŒ‡ä»¤ã€‚ _ _ _ X现在,如果æê‡<Žß²å–值ç„ñ‘q’ׂ数,Ž D—°’Œåˆšæ‰‘X相åŒäº†ï¼š„o„o„o„h‚á¿$ curl 'µmocalhost:8080/test?„I='¿ï¿î‚5 : []'&€›„Ÿ„Ÿ„Ÿ>ˆè’€ç§æƒ…况下,ž?ž?›‡> šù‰Š便是穊Oð‚€³xˆà€ØŸ/Ÿ,•Q€ÞŸG€Ú因此圚ր Ÿ¯Ÿ¯ŒÜ°±è¿”回G„&ˆ""h‚™]« o‚¡"完全区分开ä¦r

è¿™ç§åŒºåˆ†åœ¨æœ‰äº›åº”用场景下éžå¸¸é‡è¦,比如有的÷ebóervice 接å£ä¼šæ ¹æ® name$€XXX此时,™‰úÏŠ ä»ç„¶è¯»å‡ºâ€œæ‰¾ä¸åˆ°â€è¿™ä¸ªç‰¹æ®Šå‘ê€就明显有些è¿å常识。此外,gggggggg…Yšãšú•ˆ„多个åŒåòš—LJó…¨åªä¼šè¿”回最先出现”Àç÷™·‡Ë€Œé»˜é»˜忽略掉其他实例:‘ŒWŒW‘‘‘‘‘‘ =Tom&€jJi€o=Bob‘ÿ·‘ÿ‘ú[‚]?‘ï‘ï…Ÿ…Ÿ©´¦è§£å†³IšçŒå¯ä»¥ç›´æŽ¥åœ¨Ìua 代ç ä¸­ä½¿ç”¨ÿÿÿû¸ó">ngx_luab模å—æ¦ê¡¯‚W‚W‚W‚T#‚H.req.get_uri_’(s‚ú€·€´’ǽ数。ˆ_ˆ_ˆ_ðfontóize="4€xb>N„”Ì漫谈(八)‹8Šà‘‹‚Ç‚Ç©*Ž‡‡‡™W™W™W™W™U类似,我们åŒøƒfilepos=0000021263>…p二)ºši到过—©†…建嘆è……………cookie_COOKIE…€„žo£Â´Cœ¨å为›÷”ùÁ³„Ð存在时返回¤Ž¥y²¡æ‰¾åˆ°¥xœ7‹‡‹‡œ7™›©tion ›Š {™Oš‡l€EcŽ°ent_by•‰ž§§‡€W€ ifœÀ”Xvar.ˆ¤user ==€Èi €then‚‚‚/€W€W‚ªsay("‚³ ‚¹±ï")‚§‚§‚€W€ els±?€W„„„[",‡¯‡¯r€°"]„σWƒW‚÷„Ëndww€2';//€ì}€ç¨W¨W‘¿‘¿‘»利用•"­É±‘½ä»¤è¡Œ工具皥`€À--•Ô­:valu»„选项å©é指定‚?;˜h当å‰è¯·aæºå¸¦çš˜À通过添加相应的‚bC‚Cû头)。下é¢æ˜¯è‹¥å¹²次测试结果ï™çˆ/ˆ/™ç¶¶‡u‹=ag˜èzh¶×¶×¶Ö™ŸŒ7šÿ‚o‘ñ‚„¶Ÿ€Ÿ‚7„÷„÷‚›0„¿„¿„¿‚‚„¿„¿[„‡g€Ÿÿ„‡¿‡ƒÿƒÿƒÿ‚‚ƒÿž¿ž¸„'–oŽGŽGŽC°Ó看到,•t‚ƒ”-«´•`åŠå–值为空字符串这两ç§情况被很好地区分开了ï¯0½“®}ƒ?ƒ?®ë„X¾@ 代ç ä¸­çš„™¡ï¡í— °rƒ期望çš„Ì‚¢i%€¼ã€‚–߈ŸˆŸŸ¹8á里访问未创建的οZ 户å˜é‡时,巶t¾—到„„X而ä¸ä¼šåƒå…ˆå‰çš„例å­é‚£æ ·ç›´æŽ¥è®©ƒtæ‹’ç»åŠ è½½é…置:†G†G†G¶ÿ¶ÿ¶ÿ‘““W¶ÿ¶ÿ§§§°°$bla ›x¯ïr.€©¯‡‚‚®//®€ç—¯

这里å‡è®¾æˆ‘们并没有在当å‰çš„ nginx.conf€‡€请求µŠ–‘µ„Ž¥å£çš„结果昽¨™G‚_‚_™G„ƒ$—¸ur•8'§¬‰Álhost:8080ƒY˜?…Ÿþ‡Þ]7†Ï†Ï„w„w„s¢[¬K® y里é¢è¯¨ ªŒ–çš„¾|ªû¾ˆ—¶å¾—到¤k£÷£òˆÇ„W„W„Qœ€åŽå€¼‚(¬I的是ª9™½ç„¶å‰³)å¤æŒ‡出„w¯iªæœ‰å­—ƒ›¥ä§æ•°æ®类型O9€Ø¿›¾x阻止僆h´´´´ArrayVar´ ">œ¨_a€¡_œØ´:‚Ø样的第三方漚让…o…h也能存放数组类型µÙ€¼ã€‚下‡i°±æ˜¯è¿™‚«†ˆ­á­*“_ŠŸŠŸ“_œ—œ–tes›PœŸ‘Ÿšç€3†ëspliˆ","“˜arg_name¨to=€x›Ÿ‚_‚/‚_y_map‚H[»_it]‚›‚'‚'‚'‚'²joi†0Èæ„[res‚/‚/€Ÿ‚Ç‚§¢O ‚wttË€€„>     }
这个例å­ä¸­ä½¿ç”¨äº† ngx_a€¡_var 模å—çš„ „‘€ãsplit„â Ç_map€² å’Œ€¿_join€Ã…Z‰æ¡é…置指令,其å«ä¹‰å¾ˆæŽ¥è¿‘Ðerl 语言中的内建函数‚ê„7„0€‰ƒÿƒüƒÎ(当然,其他脚本ƒ¹Ÿæœ‰ç±»似的等价物)。我们æ¥çœ‹çœ‹è®¿é—®‚ú/tes„ …¨å£çš„结果:࿿¿‚å$ curl '\localhost:8080ƒJ?names=Tom,Jim,Bob'‘—‘–‚•[@]€8X€9p]w““…O…O…Kˆ ‡Ø到,体’ï’ï’ï’ï’ï’ï’ï’ëå¯ä»¥å¾ˆæ–¹ä¾¿åœ°å¤„熑p样具有ä¸å®šä¸ªæ•°çš„组æˆå…ƒç´ çš„输入数æ®ï¼Œä¾‹å¦‚此例中的‚Š ƒURL å‚数值就是由ä¸å®šƒ.逗å·åˆ†éš”çš„å字所ƒëØ€过,è¿™ç§ç±»åž‹çš„å¤æ‚任务通过‰‰‰‰{Lua‰Wx_lua‰#¥åšé€š常会æ›´çµæ´»è€Œä¸”æ›´容易维护。“ÏŽ‡Ž‡¡‡³æ­¤ï¼Œ˜系列教程对΄‘ˆÐ˜é‡çš„介ç»ç»ˆ于å¯ä»¥å‘Šä¸€æ®µè½äº†™在这个过程中接触‘ 8许多标准的和第三ˆŒéƒ³kŠs些模å—让我䃾—以很è½»æ¾åœ°æž„造出许多‘(趣的å°例å­ïP»Žè€Œå¯à深入探究‡O‡Kå„ç§è¡Š˜ºå’Œç‰¹æ€§ã€‚在åŽç»­çš„教程中,我„ 还会朥¹„ºä¼šä¸Žè†‘€“交é“ãŒßŒßŒßŒÚ‘kå‰é¢è®¨è®ºè¿‡çŒ@¼—多例†³ˆ”º”当已ç»æ„Ÿå—到†Ï†È…ð€„«ƒª~–(扮演çš„é‡è¦è§’色:它是获å–숉ä¿¡æ¯ï¼ˆåŒ…括åƒð‰è¯·æ±‚…)€ô‰çš„主è¦é€”径Š€载体,åŒæ—¶ä«ˆ˜¯å„个‰3之间传递数æ®çš„主‚(媒介之Ѐ。在北Œ—ˆ£Œˆp™P¥{ˆw;身影,所以现在很好地ç†è§£å®ƒä¯€˜¯éžå¸¸ˆûàŽŽŽŽ‚p下一个系列ç…5‡é³ Afilepos=0000100735>/¸­Á‰§è¡Œé¡ºåºç³»åˆ— ‚‡°†æ·±å…¥–°‘€o‚G‚G‚AšŠè¯·æ±‚—»…P«s阶段,因为喚‚”¯ˆ户都æžä¸æ¸…楚他们书写皕$ƒç»¤ä¹‹é—´›p竟是按照何ç§æ—¶é—´„£…‚Ѓ‡‚为什么这些指令实际执›ˆôš“@ƒô–‡ä»¶é‡Œ„±„ú;大相径庭。ŽoŽoŽo½fontóize="4€xb?ŠÿŠÿƒ˜Ø蘻ºÀ‚ ºÿƒ?ƒ?‘¡¤§å¤šæ•°¨=–°æ‰‹éƒ½–`频ç¹é‡åˆ°è¿™æ ·ä¸€ä¸ª困惑,那就æšhœ`Œä¸€ä¸ª·jlocation·ƒ…£›I½ò¬˜¢X«ß—çš„é…†æ ¬o‡w‡w‘¯èƒ½ä¼š跟它们的书勧‹§¹‘ºŽæ˜¯è®¸ƒùººé€‰æ‹©„p“试错法â€ï¼Œç„¶åŽ“#„ÏŽÒ‡‘—¶å¸¸è¢«改得一片狼藉。这œœ ²¨åœ¨å¸®åŠ©è¯»è€…é€æ­¥åœŸä‡kˆ/»¤èƒŒåŽ‡Î•Ã“På…ˆåŽé¡“úšH¥¥ç§˜ã€‚¡x£¤„h¥çœ‹è¿™Ž¶™™ººå›°æƒ‘Š9¯|š‚§‚§‚§•Q    ? Ý /test {*从这个例å­ç œ¬æ„æ¥È¬&期望çš„输出是一行œ232œ‘€·>56€²«f‚K第一次用±Ahref="http://wiki.ni.org/H€°EˆModule#ˆY">€1±––„²›ƒÒ$a„„¸•值以åŽï¼Œåˆç´§æŽ¥ç€¡C„?„?„?„;Rewrite„TŽ8">€(„G°m¿®æ”¹äº†„Gt>. Ÿ8而ä¸å¹¸çš„是ï°0º‹å®žå¹¶¼¦‚此:˜7‡‡˜7Â$ curl '…̘¡lhost:8080˜Â'Ï‘Ç‚€ï€ï€ï€ï’Ÿ………Lœ‹åˆ°ï¼Œ语΀„å¥ set $a 56显然#è™é‡Œå¹¶æ²¡æœ‰‚œ‚€‚S›è¦ç†è§£è¿™é‡Œå‘生çš„事情,就首先需è¦知铂<处ç†æ¯一个用户请求时,都是按照若干个ä¸åŒé˜¶æ®µï¼ˆphase)ä¾æ¬¡å¤„ç†çš„。‡7‡7‡7‡0†nƒ£ã‚Ë共有 11‰øªä¹‹å¤šï¼Œæˆ‘们†h介ç»å…¶ä¸­ 3!比较常è§çš„。按照它们扎Q†¨€ØøåŽé¡ºåº,ä¾æ¬¡æ˜¯zrewrite{„[ Ñaccess€Ï®µä»¥åŠºcontent€÷ˆÚƒ9¢æˆ‘们还有机会è§åˆ°å…¶ä»–更多çš„处ç†éä‰ã€‚ŠŠŠ‘1‰€æœ‰Žl模å—æ供的é…置指令一般åªä¼šæ³¨å†Œå¹¶è¿è¡Œåœ¨å…¶ä¸­çš„æŸä¸€Š`„_‡ñ‚比如上例中“é „³› ˜¯åœ¨‹Ï‹ÏƒÙ…ƒx˜A€Œƒ¯ƒ¯ƒ¯ƒ«Ežpƒ”žÉ"žúƒ§ƒ¡ˆ;ƒ½Ïƒ¿ƒº‡À (þå·²ç»çŸ™ñš±‰¸•ä¸ªè¯·•Ðþ¡`程中,†·†·‚ø总是圄„’»£ú•“ƒY› æ­¤å±ž于‰W‚§™‡ƒ¹Ÿæ€»æ˜¯— æ¡ä»¶地在ƒ¯ƒ¯‚‚„'ˆQƒØ…£ŸÈ¦L‚Alocation‚L‚” ‡û‘'‘'‘'††>…Ú‚‚‚†ÇŠçŒå³ä½¿æœ¨é…ç½®文件中有æ„把ƒ×ƒ×ƒ×†_†_†_ƒØ²³写在‚_‚_‚_†/†/†/‚U“q¢Ò¡'¡'¡'¡#回到刚æ‰é‚£äªp¾‹å­ï¼Œçççà!    †h $a 32;‚
ngx_€ž¦#½¯ä»¶åŒ…aˆ™åŒæ ·”¸›¸å‘它皓g“g“f“H递“O‰“O“O¡—‡‡‡º”:ž‹‚Ï‚Ï®™‚‚šÓ“s好调试版的•ä«`•°É¿˜éœ€è¦‡ žˆœ¨é…ç½®›Ã中通过标准的 €^ é…置指令为错误日志使用 debu€€P €ã级别(这åŒæ—¶ä¹Ÿæ˜¯最低çš„日志ç<‰ï¼š

ƒI    …. €(s/€‚.€‚„b;„j
…€里é‡è¦的是 ‰+‰ŠO˜¯è¿™ä¸ªæ ·å­çš—€ˆä¸ºäº†æ–¹ä¾¿å‘ˆŽ ¤Ñž›¯¹‰ß‰ß¦ñŸs‚»作了一些简å•çš„ç¼–辑,略去了æ¯ä¸€è¡Œ„¡Œé¦–æ—¶间戳P¿†Ç†Ç‹‹[ªR]•ø363#0: *1 ‹kŠíŠÂ€Ð"32"Šg˜‚_‚_‚_‚_‚X8œ8a‚7‚7‚7‚7‚7‚7„ "56„‚_‚_‚_‚_‚_„„‚7‚7‚7‚7‚3”w”q„ˆ¢?„¯‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚‚˜‡˜‡‘Ç‘Ç¿W®Ìç¨å¾®è§£é‡Šä¸€äµú•È调试ä¿¡æ¯çš„具体å«义。 €( ³LŒ‡ä»¤åœ¨™ì¿è¡Œæ—¶»á‰“å°å‡º两行以›Êƒió’œ起始çš„调试ä…z¸¡¾è©¬¬ä¸€è¡Œ€ÃŸx…Ç…Ç…Ç…Ç…Ç…Ç…À语å¥ä¸­è¢«èµ‹äºˆçš„值¡€Œç¬¬äºŒƒx则是ƒgƒgƒgƒgƒgƒgƒgƒeƒ0±ßå˜é‡å。于潑Šé¢é¦–先过滤§¥çš„¢?¢?”?”?”?›_·¢?”–—‚_‚_‚_··‚7–O…×…×–O­ñ‘ 就对应我们例å­ä¸­µ‰“bŠsˆ_‚‚ˆ_†„ä 32;………‚‡‚‡… €ŒæŽ¥ä¸‹ŒX…n•g¯„—‚‚„—Š—Š—Š—Š—ŒïªŸ…·Œï‚_‚_‚_ŒïŒï‚7‡ç…×…×»·ˆ™å¯¹åº”ŒŒ··‡‡ŒŒ56Œ„7„7‚‡‚‡‚„此外,凡在š š¹½bå“应体数æ®æ—¶ï¼Œéƒ½¤ 8用Œ’H所谓“输出è›3™¨â€ï¼ˆ­#æ­¾Œæˆ‘们一直在使用皜ˆ Ï Ï Ï ÉEcho ´e€X">€1 Â©³自然也ä¸ä¾‹å¤–。而ƒp旦调甅ß„“输兯…«Œä¾¿ä¼šäº§ç”Ÿç±»似下é¢è¿™æ ·çª¿ª»š÷‹w‹w÷“““¶—¶—¶—777ƒÇƒÇ“a½“然,¶Ûçš„ <Ó€€„tt>"/test?"€( 语å¥ç¡®å®žéƒ½æ…(œ¨é‚£ä¸¤‚ï‚ï‚ï‚îEcho‚Ôe€X">€1‚ç¥ä¹‹å‰æ‰§è¡Œçš„。

ngx_ƒV模å—辊)指示å“应体末尾的结æŸæ ‡è®°ã€‚正是为ŽpË“特殊皇€† æ‰ä¼šå¤šå‡ºä¸€æ¬¡å¯¹Î… “输凂‡æ»¤å™¨â€çš„è°ƒ‘xƒh包括‡‡‡‡Proxy‡'x_p€‰‡*™à内的许多模å—在输ƒØ‡•°æ®æµ时都具有此ç§è¡Œä¸º™/™/™/™,Ž°åœ¨æˆ‘们就万ê†ä¸ºå‰é¢é‚£ä¸˜ü„ “ƒˆÙ¨¡ä¸€æ ·¤1“ù56•„8„Ÿåˆ°æƒŠ讶了。我们根本没…aœºä¼šåœ¨第二æ”?‰Ï‰Ï¤?¤?¤?”G¡[Œ€‚w‚w‚w“W–¯–¯‚h‡jŽ¡¹¸è¿çš„’8ɻ然å¯以借助一些å°æŠ€å·§«à达到最åˆçš„目的:ŒŒŒ†PŠ1    location ²" {Šò
™¨š ›‰— ¾¿ç¬¦åˆ—ã±€题示例的åˆè¡·äº†ï¼šŽ‡‚ׂ׎‡„ú$ curl '”| lhost:8080*'††ÿ‚32€ï€ï€ì›Ü€ï‡ï………>¨p里通过引入新的用户å˜é‡žò}‚²³Ù¡À”¹å†™€ó€Ã ›óåŠæ—¶ä¿存了Š#始值。而对于多桯¯¯   ± Œ‡ä»¤è€Œ言,它们之间的执¥Ø顺åºæ˜¯ç”±ƒƒƒƒƒ~­kr€›´§—æ¥ä¿è¯ä¸Žä¹¦ˆ¸ƒ;相一臃ù¢iŒç†ï¼ŒƒÏƒÏƒÏ¤ïƒ·¸?¸=‡ªèº«ä¹Ÿª0ƒã‡xŠñŠOƒƒƒƒ§÷ƒŠB‰Ï‰Ï。—Ç’¯’¯²¹»†å¿ƒçš„读者应当å‘现,我³yœ¨…!filepos=000€9181>»k“Û漫谈系列„Ò”Ùœb中已ç»广泛使用了–ˆ¸¬cƒi¥ç»•è¿‡因处ç†é˜¶æ®µè“À¼•èµ·çš„‡s‡/ºä¸Šçš„é™åˆ¶ã€‡‡‡‡Šœ‹åˆ°è¿™š`ƒ©œ‰çš„读‡é¯èƒ½ä¼š¢H¡ “那么我在䅻º@¡é™Œç”ŸƒÁ…置指Œ#šˆ–a¦‚何知é“它究竟è¿è¡Œåœ¨å“ª´A¸ªå¤„熇#呢?â€ç­”æ¡ˆæ¶ šæŸ¥çœ‹è¯¥æŒ‡ä»¤‡ù–‡æ¡£ï¼ˆ(¶àƒ`高级å¼€å‘人员也寷 直接柂)”C¿ùC æºç ï¼‰ã€‚在许多模 ƒ˜‚éˆr专门标记其釟ŒH€è¿è¡Œç–h…·ä½“阶†x‚ÐÀˆ@–ç–ç–ç–ç–ç–ç–儯¸­æœ‰è¿™Œ Y¡Œï¼š®×«êphase:®øonten¤H¬W¬W¬W‚Ÿ‚Ÿ¬T„´X说,当å‰é…çˆõžª²ƒ§ƒ8‰>‰ 果你佒ùš«ŒŒ¢°å·§æ²¡‡È‚¨š€‚«‚—ƒø§¥è”ç³»è‘ÈŽµ作者请求补充。丛pြ得一æ的易ðŒå¹¶éžæ‰€æœ‰çš„†Ï»¤éƒ½ä¸ŽæŸä¸ªå¤–7ªå…³è”(Ø¢ …ˆå‰åœ¨¢?¢?¢?¢?ˆï¼ˆä¸€ï¼‰BÉ到过‰’¯’¯’¯’ªGe’¥ge’˜€(’—¤ä»¥åŠåœ¨ Nginx å˜é‡æ¼«è°ˆï¼ˆå››ï¼‰ 中介ç»过的 €(‚R指令。这些ä¸ä¸Žå¤„ç†é˜¶æ®µç›¸å…³è”çš„é…置指令基本上都是“声明性的â€ï¼ˆdeclarative…Ð,å³ä¸直接产生æŸç§åŠ¨ä½œæˆ–者膘¨‹ã€‚ˆ+‚h€Ø€ÀÉgorÓysoev 在公开场åˆæ›¾ä¸æ­¢一次地强调,‚3…Ô–‡ä»¶æ‰€使用çš„语言本质上†O†O†HŒè€Œéžâ€œè¿‡ç¨‹€ß¼ˆprocedural‡…°

loc0onngx_ƒ¾†‰¨¡å—中ƒ˜几乎全部指令,都„£‡•…¯…®…Œ…括„‰filež®2126ž¯ž¯ŽÏž¯ž¯†¿†¿†¿†¿&„¤"„@¸è¿‡ï¼Œ值得一æ的是,当 ƒ™ ‡mserverŽïŽïŽé则会迈ü‚È个我们尚未æåŠçš„æ›´æ—©çš„处ç†é‰½ƒ'-ŠÇŠÆ…à ———š8‹—‹—‹—‹—‹—‹—‹—‹—‹—‹—‹‘SetMisc’Ox_˜°_m€ ’W—çš„‚o‚o‚o‚o‚n›_unescape_uri›‚€—€Ž¤åŒæ ·ä¹Ÿè¿è¡Œ”¿‰ÿ‰ÿ特别地,„DŽDŽDŽLJ/‡/‡/‡,„c还å¯ä»¥å’Œ‚ÿ‚ÿ‚ÿ•·œoœo•”‚Ææ··åˆåœ’™èµ·ä¾æ¬¡æ‰§è¡Œã€‚我们æ¥çœ‹è¿™æ ·çš„ä“ê例å­ï¼š‘Ç‘Ç‘Ç‘Á‰@    ¦- /test {Š:访问这个接å£å¯ä»¥£à到:Œï‚‚Œï„:$ curl '’Äqlhost:8080’'…_†?‚Œò Œê!G†Ÿ†Ÿ„„º¯»¬çœ‹åˆ°š_—g—gš_š_ŸŸŸŸ> 语å¥å‰åŽçš„ƒGƒGƒGš§°W½w‚v¼Œ‰ä¹¦å†™­À‚¸顺åºä¸€å‰ä¸€åŽåœ°æ‰§šø了。ˆ‡ˆ‡ƒ为了进一步确认这€x点,戉‰³Ð妨å†æ£€æŸ¥ä¸€ä¸‹Î¬ê„@“调试日志â€ï¼ˆå¦‚果你还ä¸æ¸…楚如何å¼€å¯â€·³‚Xè¯ï¼Œå“B‚考¼g°Ó100735>°A¸€ï¼‰°E£©­¥éª¤ï¼‰”ç‡ß‡ß”ç’ågrep -E”ìœècrip(value|copy|Œp)' t/·Iroot–gs/error.€X”§”§”§„O„O›<¿‡æ»¤å‡º¨Qˆˆ§—ä¿¡æ¯å‰¨¸‹æ‰€ç¤º†×‚‚†×†Õ[debug] 11167#0: *1šh‡7‡0‡*€Ð¨¨†œo‚¿‚¿‚¿‚¿‚¹ªÔ‚?‚?‚?‚?‚?‚?„öŒX€pXter)…v ”…oƒ7ƒ7ƒ7ƒ7ƒ7…o$b‚?‚?‚?‚?‚?‚?‚9‘Q„á!„‚W‚W‚W‚W‚W„$½x‚?’·’·//)›!¤´çš„两 ’R‘ß··‘ß…7…7…7…7‘ߑߌw…·‡ï‚¿‚¿‚¿‡ï‘ß‚?‡ï†?†?†?‡è°±å¯¹åº”¯„©X…置语ªHˆ7ÿÿˆ7½?$a‡‡»—
<Ö€„tt>

而接下æ¥çš„两行ط··<‚Р   [debug] 11167#0: *1 http script value (pos€pfilter)P"hello world"…“br…°€)†)ƒ7ƒ7ƒ7ƒ7ƒ2se€($b‚?‚>ˆg†·†·†´则对应é…置语奈g··ˆg…2„_unescape_uri„q€ a;„Ÿ„Ÿ„Ÿ‚ï‚ï‚ë我们看到第一行信æ¯ä¸Ž €( 指令略有区别,多了 …"zæsŒó 这个标记,而且最åŽæ˜¾ç¤ºå‡ºÕRI 解ç æ“作确实如我†€期望çš„那样工作了ƒù³ƒãÊ%20×> 在这里被æˆåŠŸè§£ç 为¯o÷Ÿ.ÿ‹‹˜ …ò—Û调试俋çççß•••• copy—±!—_‚W‚W‚W‚W—_$c‚?’Ç’Ç…×…×—_—Z‡å€æ¡’’’’’’’x™ƒ:‰Çƒ÷ƒ÷‰Ç™†Iˆ¨$b!"™O††‚Ÿ‚Ÿ™M³¨æ„,因为è¿™æ¡æŒ‡ä»¤åœ¨ä¸º‘ ‰Œ å˜é‡èµ‹å€¼æ—¶ä½¿ç”¨äº†“å˜é‡æ’值â€åŠŸèƒ½‚À所以笜$‘G¯æ˜¯ä»¥ƒ ‰Éó"ãh™¤µ·å§‹çš„…Žé¢åˆ™°拼接到最终å–值的字符串常釖㑤–—ˆ_ˆ_ˆZŠŠè¿™äº›…'¯è”ç³»„H¯Aœ‹ï¼Œæˆ‘œXä¸éš¾å‘现,èʨ ü„x®žé™…执‡À顺åºæ˜¯ï¼š„W„W„WGG$a¯žÖ——§ªªª§§’‡’‡W’‡…ß…ß…ß>§:Žå®ƒä»¬åœ¨é…ç½®文件中的书写顺åº完全一致。ˆÇ‚ï‚﮶‚¸›‘ªøe«@=0000079338>N›™•,漫谈(七)›R„åˆè¯†äº†ç¬¬ä¸‰æ–¹æ¨¡å—ž'ž'ž'ž#Luaž">ngx_lua‚±”ᮃæä¾›‡‚O‚O‚O‚O N_by‚Y ‚€d…j’o»¤ä¹Ÿå’Œ‚ß‚ß‚ß‚ÛSetMisc…Gx_‚Ám€ µã‡r…@‚̦ ·ï¼Œå¯œ`ƒ/ƒ/ƒ/¦o¦oƒ-r€›ƒ'ƒ'æ··åˆä½¡a2ƒƒƒ‰‰‰‰¼<支æŒé€šè¿‡ä¸€å°æ®µç”¨户Ìua 代ç æ¥è®¡ç®—出一个结果,然åŽèµ‹ç»™æŒ‡定的Β_。和…DžDžLjϯ7¯7…v相似"w‚w‚wˆ7‚Wˆ7ˆ7‚Ç‘有自动创建ä¸å­˜åœ¨†w†s¤É¬ê›—›—›—›“下é¢æˆ›Â°±æ¥çœ‹Š ††††††††¸Ž‚—‚—‚—‹‹‹‡“w‡Ù例å­ï¼«¯‡_‡_«¯¨klocation /tes¨È{¨‡©×lª­T32©ÿO¬Â56O®§‰«­$±8‡Ë接ç€åˆ‡É‚(º´’值•9ŠŠå˜é‡„Ot>〄G„Ç‚õ„Á‚8拼接æˆ一个å­—符串å½¢å¼çš„ç­‰å¼ï‡Øµ‹äºˆå˜ƒF’Õ…vœ€åŽå†???>E•D•a">echo 指令输出 $equation这个例å­å€¼å¾—注愂œ°æ–¹æ˜¯:首先,我们在Ìua 代ç ä¸­æ˜¯é€šè¿‡ €—€“于是这验è¯äº†’—’—’—’—¦ûset_by’¡">€g“®确实也å¯ä»¥åŸ1ƒƒƒƒ Rewriteƒ/‚ò‚º…`Ø™‚G‚G‚G‚G‚E—ûr€›˜—æä¾›çŽX…’æ··åˆåœ¨ä¸€èµ·å·¥ä½œã€‚ŠgŠg‘Ҙ有ä¸å°‘第三²éƒ˜’¦‚…©filepos=0000091709>–‡æ¼«è°ˆ—@八)…J¢h介ç»è¿‡çš„‡ß‡ß‡ß‡ÛArrayVar‡çx_a€¡_­°‚«ŒxŠåŽé¢å³å°†æŽ¥è§¦åˆ°çÈ”¨äºŽåŠ 解密用户会è¯ï¼ˆsess¼`…„„„„~EncryptedSÓ„¿x_e€å_‚¼„ù¡›²(‘σ?ƒ?ƒ?—的指Y— ç¼æ··‰GGGG>标准„w„w„w„w„w„w„w„s应用是如此广泛,¼ë¦@够和它的é…置指令…Û使用çš„第三擵‚‰¹¸è¿çš„†È事实上,上é¢æ到€ð§©º›ç¬¬ä¸‰þ‹à采用了特殊ç‰ÈŠ€æœ¯ï¼Œ‘x„€¨ ­Q·±çš„酄ήX注入â€到了‰‡‰‡‰‡‰‡‰‡‰‡‰‡÷»¤åºåˆ—˜Ø™a„Z‘q€ŸåŠ©äº†ÍarcusÃlyne 编写皉‚k„·„±s„¸github.com/simpl/„1devel_kið€€x•K²Áµ8¸1¯è¯´ï¼Œ更多常规的在µ$™zº†Ä­Y阶段注册和è³rª…Ÿ…œº1²¡é‚£ä¹ˆŽû‡p„Ž#º!ƒ²k‹ø‰†虽然也è¿è¡Œå„ „W„W„P‘ ½†å…¶é…ŽžœŽ'Ž'Ž'Ž'Ž'Ž'¨…ˆä»¥åŠåŒä¸€é˜¶ƒ°内的其他模å9‰éƒ½æ˜¯åˆ†å¼€ç‹¬立执行的。在è¿è¡Œ时,ä¸åŒæ¨¡å‘:…÷»¤é›†ä¹‹é—´çš„å…ˆåŽé¡ºåºä¸€èˆ¬ƒàµbšçš„(严格楎ƒ>由模庨载顺åº决定çšà‰á‹0°a¯ ¤–的情况)。比如‹ÚA‹«ŠÒ€HB€{两个樜$GGD‘O»¤ï¼ŒäºŽ¾i¦ä¹ˆæ˜¯ƒ™ß„所有掓…¨éƒ¨æ‰§q®Œå†æ‰§€`„oÏ„那些æƒeƒ3”aŒð过楗ÉŠŠÿ>—yƒgƒgŒï¼Œå†åŽ»è¿è¡Œ…_Ÿ¤ã€‚除éžæ¨¡å—€Á–‡æ¡£ä¸­†˜Žç¡®çš„交待,å¦åˆ™çµK‚ªØŸâä¾èµ–于此ç§ä}û‘vƒ¨°°°">ngx_rew€™ 模å—çš„指令æ··åˆä½¿用。ä¸妨æ¥çœ‹å‡ ä¸ª这样çš„例å­ã€‚

第三æ–¹æ¨¡å— €Ç€Çrs†’ŒVå¯ä»¥åœ¨ ž€` 阶段改写指定的请†{(或者在请怪ŽI­˜åœ¨æ—¶自动创建)。这桀»æ˜¯è¿行在ƒ÷ƒ÷ƒñ…Aœ«å°¾ï¼Œ该指令的文档中有‚¸么一行标记:‘‘‘‘xƒ‰    phase: „  tail„:
ŽË… †§teô‚•‹Ú„æ€å°±ˆ7‡×‡×‡Ð—烧ƒ§ƒ£既然迊w‚§‚§‚§Šp那么也就总是会迂ž/‚5ž7ŒB之åŽï¼Œå³ä½¿æˆ‘们在˜ì–‡ä»¶ä¸­把它写在å‰é¢ï¼Œä¾‹如:†ç†ç†çOJ? location /test {ON‡€L ˜@ $valudog;¿¿¿€]š'š'rs "X-Species‘À‚»"‚Ÿ‚Ÿ‚Ÿ„W„W †h¿¿¾€ç€ç‚Ÿ€]echo„§„£¢_x_s€“„ï‚W‚W }€ÿ——ŒÿŒÿŒû›ñ¸ªä¾‹å­¨8到的¦G¦G¦G¦CC¦.24…rHEADER">…ãXXX¥b内建å˜é‡åœ¨è¯»å–æ—¶•‚”回当嫕“€ªX为–‚›¬¥×¼Œæˆ‘们—Baæilepos=0000021263>N…Q ƒ›漫谈(二)„š–±›¾ç»ç®€å•æè¿©ƒã€‚需è¦æ³¨æ„™Q˜¯ï¼Œˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ‡ˆ…ˆU匹é…识Ĉœ«»¯¹è¯·æ±‚€À„0²ñ­—进行归一化,å³å°†åå­—9¤§å†™å­—æ¯è½¬æ¢ä¸ºå°å€­™Œæ—¶æŠŠé—´éš”符(‹a-‹R‰替æ¢ä¸ºä¸‹åˆ’线(_Œ‰€ä»¥å˜†Yr•Ÿ•š£¤‰å¾—以æˆåŠŸåŒ‡¡Š‡Š‡Š‡¹G¹G¹Gžg¹G€Ç€Ç‹b语å¥ä¸­è®¾ç½®ç’?´“ ›•…j.¦o™w™w­I­¤ä¾‹ä¹¦Š˜ªF顺åºä¼šè¯¯å¯¼æ”ê认为ƒ*§JˆtŽ¥å£è¾“出的„'‰”€¼æ˜¯§h‹ÌŒç„¶è€Œå®žé™…çš„结果å´å¹¶éžå¦‚此:†?†?†?¬§¡ê$¦(url 'Œd­lhost:8080…ê'¢÷£ï‚¥¯¨rW¤G¤G„Ÿ„ŸŠÔ˜¾ç„¶ï¼Œ³K‘‘‘‘‘‘W‘€Ç€Ç‘¸_Žçš„‹’P ¯ ㆔’T‹a…ˆæ‰§è¡Œ了。‹g†Ï†Ï†È上é¢è¿«?è¯æ˜Žäº†å³ä½¿è½­œØžÐ8•%„ç†é˜¶æ®µï¼Œåˆ†属ä¸åŒæ¨¡å—çš„é…ç½®†%Ÿå¯èƒ½ä¼šåˆ†å¼€独立迃ž 除éžåƒŠïŠïŠïŠëSetMiscŠË">ngžÀŠm€ ‰Â等模å—那样针对‚Ï‚Ï‚Ï‚ËRewrit”‚Ër€›Œƒ‚ª¬供特殊支æŒï¼‰ã€‚梌0è¯è¯´ï¼‰ª•ä¸ªè¯·‰—‰’³°部,一般也会以ΰâƒ;¨ù‚½è¿›ä¸€步地划分出傈‚“oook第三方模嗈‡ˆ‡ˆ‡ˆƒLuaˆgx_luaˆCˆ¼g‚'‚'‚'‚$#Š\_by‚Q">€‡‚Ö‘§‘£’Œƒƒƒ›o›o›oš¯›o€Ç€Ç»Ä€æ ·è¿è—Š›jî›1‹SªÑœ«å°¾ã€‚ªsæ¥éªŒè¯一下ï§'Œ_Œ_§'¥$? ¦±tion ¦’ {¥W¦§‡€]†H© a 1;€]‹—‹‘ "Ž°.var.€`= €w +‚¨"‚·‚·‚·„?„=56——–€ç€ç‚w€]echo‚y‚_     ? }这里我们在 €‡€ 语å¥å†…è”çš„Ìua 代ç ä¸­å¯¹Î‚á å˜é‡ …Á$È…ù进行了自增计算。从该例的指令书写顺åºä¸Šçœ‹ï¼Œæ†š或许会期望输出是ƒR56ƒRhå¯æ˜¯å› ä¸ºˆˆˆˆˆ‡Ÿˆˆ ƒðŠÐ所有çš„ƒƒƒƒR‚3ƒ$seH€(Š¥ä¹‹åŽæ‰§è¡Œï¼Œ‚è以结果是†ó7†ôšP///y’m$ curl '„ülocalhost:8080/test'“w“v‚ƒ¼€ï”_„7„7„7>显然,‰‰‰ŒŒ‹—ŒŒ ‘;‹à’‰¸ºä¸åŒ于我们å‰é¢å—ëfilepos=0000115150ŠˆäºŒï¼‰Žs¸­ä»‹ç»过的…g…g…g…gŽV…F€g…'¤ã€‚w‰G‰G‰A’:读者å¯èƒ½è¦é—®ï¼Œæ—¢Š„§„§„§„£HeadersMor“5m€X_„©input_h ">€Ç€Çrs…¢å’ŒƒgƒgƒgˆgŒçgˆGˆD都è¿è¡Œåœ¨–rT Û阶段çš„末尾,那么它们之间的先åŽé¡º Àåˆæ˜¯æ€Žæ ·çš„呢?答案是:ä¸ä¸€å®šã€‚我Áº”当é¿å…写出ä¾èµ–åƒ3ºŒè€…é—´ƒ‚ é…置『ŽŽŽ§£‘ò†ß†ß®µæ˜¯ä¸€个比较早的请求处ç†é˜¶æ®µï¼Œè¿™ä¸ªé˜¶æ®µ„&¨¼¸€èˆ¬ç”¨æ¥å¯¹å½“å‰è¯·æ±‚进行å„ç§ä¿®æ”¹ï¼ˆæ¯”如对ÕRIŽâURL¬Ð‚数进行改写˜P«–者创建并åˆ始化一系列åŽç»­å¤„…~•k需è¦çš„¯ß¯Ø‰¸… 也ä¸èƒ½é˜»æ­¢äˆPº›ç”¨æˆ·‰§‰¤åšä¸€ç³ƒáæ›´å¤æ‚的事情,比‡™Àå–请求体,æ†R访问æ•°æ®åº“等远方æœåŠ¡ï¼ø•ç«Ÿæœ‰—Ÿ—Ÿ—Ÿ—Ÿ—Ÿ——Ÿ—Ÿ·P™æ ·çš„æ‰8®h嵌入ä»»æ„å¤æ†b¹ÿ。“G“G“G“@‰w‰w‰t² †¹œ‰ä¸€ä¸ªåå«‚accesŸy“ÏŽWµã€‚©g©b056076–ÔŽ›漫谈Ið”)©÷©÷第三方模嗊׊Ômdounin.ru/hg/ngx_€É_auth_requ´`_m‹B/">€ù€×s¹{Š·°±è¿è¡Œˆ­‡/ˆ¥”!€ï€ï€ê뛂«¤šæ˜¯æ‰§€Ø’ Ž§åˆ¶æ€§质的任务,æ“ê检查甖YŠÉ›ƒé™ï¼Œ€÷€ò¸æºÉP 地å€æ˜¯å¦åˆæ³•ï¼Œè¯¸‚‘­¤ç±»ã€‚oooh例如,标准拗‹—–g–gpAˆb–{‹4ˆô­y供的‚W‚W‚W‚W‚U#allow">€:²w‚/‚/‚/‚/‚,deny">€1‚Œçš:ŠX¿1Œš哪些Šw›3Œˆ¨€û£¸€Ã°ˆŠŠŠŠˆ‘A    location /he† {‘ê
´Óšrˆ£šs接å£è¢«é…置为åªå…许从本机(Fä¿ç•™çš¹{‰v‚‚¢ÈŽ&而从其他O€û都会被拒(è¿”回‚‚403ŸD”™è¯¯é¡µ‚ šŠ”g”g”g”g˜ß˜ß˜Ù›自己çš„多æ¡é•¤ä¹‹é—´æ¢Œ‰é¡ºåº¢Sh†p直到é‡åˆ°ç¬¬ä¸€æ¡æ»¡足æ¡ä»¶çš„指ä¦Ú•É†æ‰§è¡Œ»ËœŸ††††œŸœŸœŸ‚/‚/‚/‚/œŸœ›…ªÙ¥hžœé¦–å…ˆ匹é…皆 ˆƒ?ƒ?ƒ?ƒ?…g…g…bž!ˆ™ä¼šç»§‡øˆ_»­å…¶ä»–Œ{ƒ§¿³·³åˆ°åŽ‰“·'®µï¼›è€Œ…·…ˆæ»¡è¶³‚…‡…‡…‡…‡…‡ˆ¿ˆ»…d«‹å³ä¸­止当å‰整个軒„Ž†á¹¶ç«‹å³返回 „›ž 403我们æ¥å®žæµ‹ä¸€ä¸‹ã€‚Œ«‡†óã接å£åˆ¥å¾—到ƒƒƒƒ…‘    $ curl 'http://localhost:8080/he'†ê
€›„„„>ŽHŽ¦ä¸€å°Ž‡*€–(å‡è®¾è¿è¡Œ’t‘i€úŒûŽå192.168.1.10”»)æ供的接å£æ—¶åˆ™‰·…/…/‰·‰·‰·‰µƒwƒp‰×‰×ˆŸ‰Ö<html>???;head9€atitle€i“¨ Forbid–H€Ù/€æ€rµ‚ï‚ï‚ï;body bgcolor="white"ÇÇÇÂcenterƒuh1„§„§„1€Ê€Z—‚ß‚ß‚ß;h‚¾Ÿnq‚?‚?‚?‚?‚;/†ÙGGGCŒ?G––ççá值得一æ的是, ngx_a€’ ¨k还支æŒ所谓çš„“CIDR 记法â€æ¥è¡¨ç¤ºä¸€ä¸ª网段,例如˜{69.20­79.4/24¥{—ðË路由å‰缀是Ÿœ0šˆæˆ–者说å­ç½‘掩ç æ˜“255.€!€!•‰çš„网段。›/ŠOŠOŠI› ä¸º‰×‰×‰×‰×‰×‰×‰×²?¡ƒ在µ›D­‚²dŒè€Œ€ï€ï€èåˆå¤„于rewr™®µä¹‹åŽ‚ ºãŠ(ºÈ®#è§åˆ°çš„所有那些在‚_‚_‚Y…K€µY½®æŒ‡ä»¤‚Ð都总是在ˆïˆïˆïˆïˆí#½"½Sˆòå’Œ‚/‚/‚/‚/‚.¹Y"¹Š‚‡¡‰æ‰§è¡Œ‰ó无论å®ƒä»¬åœ¨é† –‡ä»¶ä¸­†˜书写顺åºæ˜¯æ€Žæ ·çš„¸‰Ë•‰¸ºäº†é¿å…阅读é…置时的混乱,戊é应该怈Á让指令的书åƒM‡X„›¿É®žé™…执… €óä¿æŒä¸€è‡´ã€‚”ï”ï”ï°fontóize="4€xb>´o„ƒºï¼ˆå››˜0¢ˆ¢0‚ ¢oƒ?ƒ?ƒ8ŒçŒçŒçŒãLua—ßx_lua—Ç—æä¾›äŠH„Ϥ‚·‚·‚·‚·‘¤â_by‚Ù‘à€ƒSŒ(用于圚¯™Å请求处ç†é˜¶æ®µæ’å…¥户Ìua 代ç ã€‚è¿™æ¡æ?ŒäºŽ‚—œW‚0¿R«å°¾ï¼Œå› æ­¤æ€»˜¯†÷†÷†÷–‡˜¯˜¯˜¯‚/‚/‚/‚/˜¯˜®†a–š†{ Ã†«™!™½ç„¶å®ƒ•ÙŒå±ž‡?‡?©C”™ˆ¬æˆ‘们通过„ç„ç„çÿÿÿÿ‘N‰Ÿ‚—‚—‡w‡w«/«-‡“³£€æŸ¥è¿‡客户端ÉPƒH°å€ä¹‹å©å†é€šè¿‡7¶À™‡˜系列更为å¤æ‚的请’h验è¯æ“作,比如实 Èƒ©¯¢æ•°æ®库或者其他åŽç«¯æœ务,以验è¯å½“å‰ç”¨…Aƒº«ä»½æˆ–æƒé™ã€µG''!ŒÛ»À看一个简å•ç£ø»¨­ï¼Œåˆ©ƒ‹?‹?‹?ÏÏÏÏŸ¥å®žçŽ°‚Ç‚Ç‚Çÿÿÿ¡g¹!?ŒÀ滤功能:ˆ7ˆ7ˆ7¨‰•¨    location /heš° {–ª

<€h     €Eecho "hell€@world";这里在Ìua 代ç ä¸­é€šè¿‡å¼•ç”¨Îginx 标准çš„内建å˜é‡ $€wr æ¥èŽ·å–字符串形弃¹®¢æˆ·ç«¯ÉP 地å€ï¼Œç„¶åŽç…0†8 ‡áif‡ê 语å¥åˆ¤æ–­æ˜¯å¦ä¸ºæœ¬机地å‚å³æ˜¯å¦ç­‰äºŽ‚127.0.0.1‚:. 如果是本机å戙直接利用„'°return„G¥è¿”回¸让Š¬继续执行åŽç»­çš„请求处ç†é˜¶æ®µï¼ˆåŒ…括‹‡‹‡‹‡‹ƒE‘à‹„’9">€1ŠóŒ‡ä»¤æ‰€‚á…ngx_lua„{¨¡å—æ供的‰ò函数‚¯‚¯‚¯‚¯‡3‚ .exi–p€U‚ú–8¸当å‰çš„整个èŠç†æµç¨‹ï’(Ž"Œûˆª403ˆŒ”™è¯¯é¡µ给客戔 。šèšÇšÇšÇšÀƒp例å­åœ¨åŠŸèƒ½ä¸Šå®Œå…¨“Y»·äºŽå…ˆ„ð›ù‡filepos=0000126594>È三)†•介ç»è¿‡çš„é‚£äƒ ½¿ç”¨‰—‰—‰—‰“AccessŒWx_a€’Œo—的例å­ï¼š‡'‡'‡'‡ ‰Q¤ location /¥¬{¤Ÿ¥§€2aPw ›~§§w€3denyÒoo€Ÿ‚çªßªßªßÇǪ߀çªßˆÿˆÿˆÿ虽然è¿H¤ä¸ªä¾‹ågg相åŒï¼Œä½†åœ¨æ€§èƒ½ä¸Š还是有区别的,毕ç«Ÿooooook˜¯ç”¨çº¯Ã 实现çš„专门化的¯¥ª—‡‡o‡o‡k下é¢æˆ‘们ä¸å¦¨æ¥å®ž际测é‡一下èˆwˆqœ¹‡‚差别。因为æ‚C–Ó„[就是为了追求性能ªy€Œé‡åŒ–‚~比较VÉ工程上具有很大的‡¨…æ„义,所以æƒÊ顺便仛Y…Ãé‡è¦çš„测é‡æŠ€æœ¯ã€‚由于无论是ŒÏŒÏŒÏŒÏŒÏŒÏŒÊ«‚?‚?‚?§ÿ‚'ª¦‡ˆ进行¹7验è¯æ–¹é¢çš„æ‰都éžå¸¸ä¹‹é«˜ïˆ ‹ å‡å°‘浇a¨Œð ˆâ希望能对©b…õ²Šé”¨æ—¶è¿›„Pªó‚k‰˜ƒšåˆ°è¿™‹点,传统的åšæ³•ä¸€般会涉åŠåˆ°ä¿®æ”¹”Õºç ï¼Œ自己æ’入专门的计ƒø代ç å’Œç»Ÿè®¡è¾“出代Ë抑或是é‡æ–°ç¼–译‚ôˆHå¯ç”¨åƒ‡*GNUçprof¾„¿™æ ·ä¸“ƒ{Š›监测工具。™Ÿ™Ÿ™Ÿ™˜幸è¿çš„是,åŸà–°ä¸€ç‚¹œSolaris,ÍacÏSØ,„ºŠÆreeBSD ²0系统上存在ä•iªå«åš…Âdtrace…«ŠÙ„êƒi¯ä»¥å¯¹ä»»æ„çš’¶ð¨‹åºè¿›À微观怈†æžï¼ˆ„€ðŽ8€­™ùœ ˜0须对甂_†ùZ‚£Ž#‹À者对ç”W Œo¯‘。因ƒHˆ 10.5ŒóŽå°±è‡ªå¸¦äº†‡g‡c–¢`–¹ä¾¿èµ·è§ï¼Œä¸¥I‹iˆ‘çš„‚ÙBookÁir 笔记朦Šæ¼”示䥵里的浘’»ð¨‹ã€‚首先.é†/­­æ‰“开䫑½ä»¤è¡Œ终端*Ÿä¸€ä¸ª文件目录下醈›å»ºä¸€á为ˆ*¡*-œ£-time.dö‚+‚ѹ¶ç¼–辑内容妜¨‹ï¼š†‡†‡†‡¿—¸Â#!/usr/bin/env¼À‹ú - c¹¹€Ÿ» pid$1::¦)§q_handler:entryÇÇÄ{€ç€ç¿G¿clapsed = 0¿/¿/€ç…§€Ÿ…§…§_core®<_phase…÷‚‚…÷€ç€ç…öbeŽh…âŽIstamp†'¿†'€ç†'€Ÿ†'†'†'†&return‚‚‚/…>‹/__‡‡€ç€ç‡ww +‡Ÿmp’ˆ\‡ï‚'÷‰§‰£‡‰g€ç‰g€Ÿ‰g‰gp_finalize_requ…8‰_‚‚‰Z†î>뀀„ 0/

ä¿å­˜å¥½æ­¤æ–‡ä»¶åŽï¼Œå†èµ‹äºˆå®ƒå¯æ‰§è¡Œæƒé™ï¼š‚à‚¿‚¿‚¿„ „å$ chmo†0+x ./nginx-access-time.d…÷…÷…÷ƒ?ƒ?ƒ;这个 ‰‚, †+中的代ç æ˜¯ç”¨*dtraceK工具自己æ供的2D 语言æ¥ç¼–写çš„(注æ„,这里的Ÿ并ä¸åŒäºŽ×alterÂr† 作为å¦ä¸€ç§â€œæ›´å¥½‚AC++â€è€Œè®¾è®¡çš„‚ß‚Ý)。由于本系列教程并ä¸打算介ç»å¦‚何编写‡ÿ‡ü‚ÿ‚û„šæœ¬ï¼Œ…¸æ—¶ç†è§£è¿™ä¸ªè€Ú需è¦ä¸少有关ΎI 内部æºç å®žçŽ°çš„细节,所以这里我们‚±•å¼€ä»‹…(†x大家åªéœ€è¦çŸ¥é“è¿™ƒæ‚ˆ功能是:统计指定†9„Cwork‹H进程在处ç†æ¯ä¸ªè¯·求时,平å‡èŠ±è´¹åœ¨ˆ*”kˆS阶段上的时间。—”W”W”P‡¸‚h‘h演示一下这ä”ü‹?†ƒè¿è¡Œæ–¹æ³•ã€‚è‡w¬æŽ¥å—䂪命令行å‚æ•°–@ɇÓ›‘视的ˆˆƒˆJ·ï¼ˆpid‘×”¨“支æŒå¤šç™¶ƒ测试æ—‘èµ·çš„ÈTTP”ˆŠ¡ àŒÀ‚¸其中ä»»æ„一ä‡À‚·‚°æœåŠ¡ã€‚为了ç¡®ä¿æ‰€’`ƒ‚ƒ都为固定的‚'†jŽš…’!¦¨åœ¨Šâ¢Š.confŽ…置文 K‰{’øå¯ç”¨ä¸„¦Ÿ¦Ÿ¦›ë_pro‘Áes 1¬÷¦'¦'‚Ç‚Ç‚Äé‡å¯Œ‰2器之å¬J¯ä»¥åˆ©¦%p•DÛ得到当剆§‡„G„G‡­žp†¨ax|grep ‹€dƒ+€l-v €Q‡ï‡ï‡ïƒ¯ƒ¯ƒ«™¡ˆ‘机器››Œø次典型输出是…ï‚G‚G…ï…ê10975€[??€1Sºº8:34.28†¤:†…‡ˆŽk†W†W†W„„†T˜第一列的数值便是‡(–qƒ¢??=Œƒ‰† ƒª¨é¦‚果你Syˆ²¯a­¢ä¸€è¡Œ‘9ˆ™é€šå¸¸›ø味ç€ä½ çš„系统中匞 £»€ðŸ°˜1“·“²®例,或者当咸¯D€âš$º†å¤šä¸ª†g†©O‰G‰G‰C¦ð¨Ð©H使用刚刚得å†â‚‡ˆœ—áŠòoot 身份æ²x†1Ÿç-®-time.d«W¶‰—Ï„—„—‘ç—Îsudo ./‚ׂ֒ä‘‘‘ƒOƒO‘Ž[‘‡æ­£å¸¸ïÊ会看到这样䎢3†‚¿‚¿††¿–°script '†O†Od' matche†˜4—Úbe—׆¿†¿„„„…°…†—X说,戱᎑·÷Œ¤å·²æˆåŠŸå‘目标进程动æ€æ¤入了 4 ¹í†³‚#“探é’ˆâ€ï¼ˆ…ڶ䴧接瀺oƒh°±æŒ‚èµ·‚„¸表明‚¯‚¬工具正在对脂2”¡½™Œç»­ç›‘»è—‡ˆ÷ˆ÷ˆó然åŽæˆˆyå†æ‰“å¼´´!新终端,在那里使¯UcurlƒÝÉŠp…K›à© ¹‹½,…Ú„³£ÙŽ¥å£„ç„ç„ç‘×—Õƒ‘http://localhost:8080/hello'‘'‘&‚ ªzlœ?’_€Ÿ×ƒßƒßƒßƒß‚‚ƒßƒß?ƒß–7ˆgˆg¤Âœ€åŽæˆ‘A›žåˆ°åŽŸ先那个一直在è¿è¡Œ–¯–­«YŽe按下"Ctrl-CK组åˆé”®ä¸­æ­¢”/”,°R‚ñ’¸而该脖Ø€€å‡ºæ—¶¡X™±ƒR’Y°å‡ºæœ€€‘»Ÿè®¡ç»“£ ‚­a£€³Â„­¤æ—¶æ˜¯™’ˆå­çš„ï¼£'ˆ÷ˆ÷‘W©'©'¢ß©'©'Œ?w¥'¥'‚O¥'¥'¥'‚¿‚¿‚¼^‹;€ï€ï¿÷€319219w‘O‘Oèeigh뀀„t="1em"÷idth="0pt">最åŽä¸€è¡Œè¾“出 19219‡ãšKœ‰ÑDžœ¬ç»Ÿè®¡ØˆXœF值将更加接近“真实值â€Y‡·ƒßƒßƒØ”øƒÀ‰y‹¹æžœç³»ƒ`ŠŽò€æ¬¡å…¸åž‹çš„测Œ结果如下:ƒƒƒŠ·Š²‡ 组 €̀W€W18146ŠŠŽœœx‚‡‚€V35011‚W‚WšOšJÏ€W€W„þ5887‚¯‡‡ˆ¯ˆ¯µ,ŠŠå‰ä¸¤ƒxŠÐŠ¤­*å‡åŽ»â€žÿžþWš 得到ŒƒgƒgŒŒŒ†w€W€W225¹“‡‰·ŒŒ߀W‰H9124‚G‰O‰O…ï…ï”ô¡[œ‹åˆ°ï¼Œ®®®±±‡—­’…0比‚?‚?‚?°?°?°?°?°>¶¡¿«äº†å¤§约一个数é‡çº§ï¼Œè¿™¬y˜¯æˆ‘们所预期的。ä¸è¿‡å…¶ç»å¯¹æ—¶é—´å·®æ€žå°çš„©±¯¹äºŽæˆ‘¡ IntelÃore2Duo 1.86ÇHz¡»)CPU ®`言,也åªæœ‰åŒºåŒºå几微秒,或者说是 ªk”ˆ之一秒的é‡çº§ã€‚“Ÿ··±½“然,¢@é¢ä½¿ç”»ç‹¯‹¯‹¯‹¯‹7‹¯‹¯„ˆ®Á­è¿˜å¯‘0通过æ¢ç”¨ƒoƒoƒoƒk‰Ñƒt.24binary_remote_addr">$€¯€­ƒâ内建å˜é‡è¿›è¡Œä¼˜åŒ–1› ä¸ºƒÿƒÿƒÿƒÿƒÿƒWƒÿƒÿƒÿƒù读出çš„是二进制形å¼çš„ÉP 地å€ï¼Œè€Œ„g„g„g„g„gƒ‡„)€w‡ìˆ™è¿”回³È长一些的字符串形„S„3‘ˆP短的圀‘æ„味ç€ç”¨Ìua¿ØŠ!‚较时通常å¯ä»¥æ›´å¿«“÷“÷“÷“ô¸¸¾—注愉+ŒÁ¦‚果按ˆyfilepos=¾‘¾À735>(一)‡"中介ç»çš„方法为Ή¡ å¼€å¯äº†â€œè°ƒè¯•æ—¥å¿—­ è¯ï¼Œä¸—Á½¯½ªžË会显è‘—增加w‚u自身çš„开销æœÐ¾ˆå¤§çš„ˆ8ˆ7ˆ7ˆ7¯¸fontóize="4€xb>…ûé…置指令的执行顺åºï¼ˆäº”)­(¬Ð‚ ­ƒ?ƒ?ƒ8‚«¤c˜ent¤阶段是所有请求处ç†é˜¶æ®µä¸­æœ€ä¸ºé‡è¦ž‘©Úˆ¦è¿è¡Œåœ¨è¿™ä¸ªé²¤Q†'¤ä¸€èˆ¬éƒ½è‚©è´Ÿ’²Ÿæˆâ€œå8®¹â€ï¼ˆ„Ô†è并输出ÈTT™X“应的¥0命。正因为其é‡è¦性,迄/„/„+ªè¼‚常丰富,例如å‰é¢æˆ‘们ªA– œ¨ç¤ºä¾‹‡è广泛佨ñŠOOOIEchoLe€X">€1•š„K‰Ùœ¨—'—#021263d¥»漫谈%x—¶接触到的„‡„‡„‡„‡„‡o_exec„«€Z„ׄф¿„¼34041„¿„¿œi‰ï¼‰„¿„¿„¿http://wiki.nginx.org/H€°ProxyModule#p€a_pass">€g 指令,N‚¡ å˜é‡æ¼«è°ˆï¼ˆäº”)ú中介ç»过的 ‚0href="h„Ï„Ï„ÊEcho„Äe€X_location">€€x„÷„ñ以劂ù…/…(79338…/…/…(¸ƒï¼‰…/…/…/…/…/…+Lua…$content_by_lua">€‡€…7…1都è¿è¡Œåœ¨è¿™ä¸ªé˜¶æ®µ。

–“•q­ä¸­å„— …置指–ð—9‰§è¡Œé¡ºåºä¾¿æ˜¯å®ƒä»¬çš„书写€Û›X测试结果完全符åˆ预期8w„‡„‡˜w†«$‰Èurl '§L˜ùlhost:8080™'‡Ïˆ¯‰ô6'ˆïˆï„o„o„kå³ä½¿æ”¹å˜å®ƒä‡Ÿ‡œŸI¹Ÿä¸ä¼šå½±å“到执行鈥其中D­Ç­Ç­Ç­ÁR›C­ä0">€(­7¤æ¥è‡ª‚_‚_‚_‚_‚^">–x_§þ‚y¨¡å—,¥›­(©«5¬å›è€ŒƒŸƒŸƒŸ³·…Ó¡‡³³€‡³·†‡†‡‚ï‚ï‚ï†gx‚?†G†G†G†G­Šœ«å°¾ï¼›接下æ¥ï¼ŒƒïƒïƒïƒëA¡j†ì£">€1†O†O‚g‚g‚g‚g†g_´%†††{µ7Œ·›å†ä¸‹æ†/ƒÏƒÏƒÏŠ#§çŒò€Œï†¡åŒæ ·æ†×ƒƒƒ†§†§†§†§º‚¨我们çš„è€æœ‹å‹„_„_„_„[Eª‡lªa">€1†ß¤åˆ™æ¥è†Ç‚o‚o‚o‚m†Ë‚g†×†Ñ在†Ò¯|†ß®µã€‚§ç££¬g¬b展示了通过åŒP—¶ä½¿ç”¨多个处ç†é˜¶æ‰Â­Ÿ”Z实现å¤Q…+ååŒå·¥ä½œçš„效果。… ƒÃƒ0程中,N‡ù §°é‡åˆ™ç»常扮æ¼”ç€åœ¨ƒK间乃至模å—é€x¼ é€’(å°ä»½ï¼‰æ•°æ®çø§’色。ƒyº›é…ç½®³'©¯ª´强烈地å—到请求处‡·š„影哊çŠçŠçŠå›ä¸€æ­¥åœ°ï¼Œåœ¨¡?¡=å’Œ”ϔ̈â¤ä¸ªé˜¶æ›±Œå¤šä¸ªæ‡’‹Ï’«¯ä»¥åŒfÙ­¬å¦‚上ŽÈŠð˜“Ÿ“Ÿ“Ÿ­÷°O°O–…i‚G‚G‚GœŸ¬Ÿ¬Ÿ€‡OŸµ‹8ˆÿª7ˆ°wƒßƒß§G§G©§©§†'‚O‚O‚O†'¥Ç¥Ç€‚Çžé†/Žœo€‚但ä¸幸的是,这通常ä¸适用亥Kž‚“Ÿ“Ÿ“Ÿ“šç»å¤§å¤šæ•°Îš’œ\œ¨å‘‚ß‚ß‚Ù注册酒¿’p¨Aœ¬è´¨ä¸Š…x‚½“å‰çš„‚Blocation‚LêƒP“€‚{所谓çš„“内容处熟›ˆâ€ï¼ˆ„dèandlerà‡0æ¯ä¸€ä¸©@ƒ?ƒ<åªèƒ½æœ‰ä¸€ä¸ªâ‚߂߂ڌ因此ï€H…°›Ülocati󀀄on
中åŒæ—¶ä½¿ç”¨å¤šä¸ªæ¨¡å—çš„ < contentƒ阶段指令时,åªæœ‰其中一个模å—能æˆ功注册“内容处ç†程åºâ€。考虑下é¢这个有问题的例å­:

…i    ? location /test {†
‰x里, …_‡I ‡‚7‚7‚7‚7‚2#‚ ">‚?²å’Œ‚?‚?‚?‚;Lua„gx‰Á„_„_‚'‚'‚'‚&#Œ‚Q"•¥€„„÷¤åŒå¤„–Ç–Ç–ÁŠH于是喯–¯–«–z‡0è¿è¡Œè¿•‰‚Š“‚“† —§—§—¡–oŽ×Ž×–o‘$“url’ȈdƒQlhost:8080–ú'’“‚”2““„O„O„K实际过i结果表明,写在åŽÈŸŸŸŸŸŸŸŸå而胜出了,而ƒgƒgƒg•W•W•W‚Έ™å®Œå…¨没有过¤€具体哪一个攳会胜出是ä¸ç¡®å®šçš„‘á¥X¦‚把上€`‘àˆ·…W…W…W…W…W…R语å¥å’‡‚?‚?ŠïŠïŠoŠïŠï‚Õ交æ¢é¡ºåºï¼Œåˆ™è¾“出就会å˜æˆ–ꨂ‘Š9³„‡„‡„‡†¿Ÿ/£Ÿ4Š;‹ˆ所以我们应当é¿å…’êŒä¸€ä¸ª››œáµ·Gž÷ž÷µ·ƒ€›ï—§—§—¡°†ä¸Šä¾‹Ž‡g‡g‡g‹ç‹ç‹ç€‡–Ϻ›¿æ¢ä¸ºƒƒƒŠg‘‘–n°±å¯ä»¥”„¿äº†ï¼š‡O‡O‡O£7¡2¹‡¹‡¡Ÿ¢Ÿ·¾¹o¹o|¤‚=¸‡€ç¥o†‡†‡†„测试绥:¯æ˜Žäº†­€ç‚¹ï¼šˆ—‚‚ˆ—«Ç«Ç«Ç«Ç«Ç…_†>™§¬Ç‡_‡_…O…O¿Þ˜æ¡’?’?’?’?’?’?”¦˜¯æ²¡é—®题的,因为它们åŒ属ƒGƒGƒGƒGŸßŸßŸÜ®+且‚g‚g‚g‚g‚g‚g¢=§„定和µP现了宅i之间çš„执行é§"®ù€¼å¾—一æ的是,并éžæ‰€æœ‰¯ˆš都支æŒ在åŒä¤¤¤|被使甌Š¬¡ï¼Œä¾‹œˆ‡7‡7‡7¢¢¡¢¢ Ÿrªèƒ½ä½¿ç”¨ä¸€æ¬¡ƒxªS下é¢è¿—¸ªä¾‹å­æ˜¯é”™è¯¯Ž¢˜7’ï’ï˜7•3? ß ß•·–·‡€]…×…Ñš@ø.say("˜Ú")' 7‚O‚O‚O‚O‚O‚Jš"‚O‚O‚O‚I¢—€ÿ›?ˆWˆW›?Š0é…置在Ω å¯åŠ¨æ—¶å°±ä¼šæŠ¥é”™ï¼šŠÏ‚‚ŠÏ„º[emerg] "†ÿ’ directive is€xupliŒ€x...†_†_†_ƒçƒç¨ì­£ç¡®çš„写法庻Q—ú…Ççç…DZOww„—‹çŽ‡Ž_") Ž§Ž§‚ǂDZ€çˆ7†W†W†W¾à³åœ¨œ—œ—œ—œ—œ—…œ— 内è”çš„Ìua 代ç ä¸­è°ƒç”¨ä¸¤æ¬¡ƒ§ƒ§ƒ§ƒ§ƒ£ˆt§š€Iƒ3‡½æ•°ï¼Œ©ò是在当剤—¤—¸­ä½¿ç”¨„href="ht󀀄tp://wiki.nginx.org/HttpLuaModule#content_by_lua">€‡€ 指令。

类似地, ngx_p€‰ƒ«¨¡å—çš„‚G‚G‚G‚G‚D#‚_pass">€g†O¤å’Œ‚§‚§‚§‚£Echo‚œe€X">€1‚?¤ä¹Ÿä¸èƒ½åŒæ—¶用在一个 location€™///>À”x例å­è¡¨é¢ä¸Šæ˜¯æƒ³åœ¨˜7˜7˜7š×返回çš„内容å‰åŽï¼Œ通过ƒƒƒ›Oƒx_›G ‚7‚7‚7‚7Ÿ´ˆ†åˆ«è¾“出字符串›Ú•ï"›û¡ €É’–€Â†¨但其实åªæœ‰å…¶ä¸­ä¸€‹(ˆt xŠÉž—ž—®µè¿è¡ŒžÀ测试结果表明,在‡­ä¸­æ˜¯‡ß‡ß‡ß''''ƒœå‡ºï¼Œ而‚‚‚Šg‚‡Œ—Œ—‚7‚7‚7‚7Œ—Œ—Œ•根本没有è¿è¡Œï¼š¥Ç–Ÿ–Ÿ¥Ç˜Ú$ curl '„4lhost¢¦Q'™çšß‚œœœŠ§›‡›‡„ï„¦å®žçŽ°ŽO­å¸Œæœ›达到çš„效果€è¦æ”¹±ØŠ‡Š‡Š‡Š‡Œ·Œ·Œ´æ供皌ç‚g‚g‚gŒçho_˜_bodyC€—d’S¹·‚Ï‚Ï‚Ï‚Ï‚:š‚Ç€‚¼‰J¤æ¡é…置指令G‹_‹_GŽE¬¿µïŽ¯¬Ž¬­‡7dy¶7²‚‚¶¶¶¶¶‚O‚O‚?„TˆÇ¶_„Gÿÿ°·€ç€Ÿ‰/µçµçgg„׵ϙG™GµÏ‚/‚/…€çš7ŽßŽßŽÜ¨÷¨õ‘2€æ¬¡æˆ‘们æˆåŠŸ了:‘O‚w‚w‘O¡¡¡¡¡…¿†ž‘''¢¯‰o‰o¢¯§¦…‰—‰—‡'‡'‡#™ï»¤77777˜??€—Ÿÿ‚Ï‚Ï‚Ï‚Ï‚Ï–·ŸÿŸÿ‚¸之所以å¯ä»¥å’Œå…¶ä»–µÄ°²ºººŒªy‡ªð起工佪ٹÈ因为它们è¿è‚CN…q ¸“输出过滤器â€ä¸­¼èå‰é¢æˆ“Qƒâaæilepos=0000100735>(一)†C¸­åˆ†æž‰/‰/‰/‰/‰/¸Ï¸Í产生皅*°ƒè¯•æ—¥å¿—â€æ—¶å·²ç»çŸ¥é“,†“…@†{å“应体数æ®æ—¶éƒ½ä¼š‚@³8‡·‡·,所以…ç…ç…ç…ç´/´/´-‰æœ‰æœºƒ˜„ ƒ‡ƒ‡‹1对ƒoƒoƒoƒkP«ƒwx_«šƒ—产生çš„å“应‡¸ƒ}›è¡Œä¿®æ”¹ï¼ˆå³„h首尾添加新簆…容)±€¼å¾—一º@’¹˜¯ï¼Œâ€œ††并ä¸å±žäºŽïïï¿óé‚£ 11€˜ªè¯·æ±‚处ç†é˜¶–p°毕竟许多阶段都富ð通过è¾77¥è°ƒç”¨…‡¿‡æ»¤å™¨󀀄¨â€ï¼‰ï¼Œä½†è¿™并ä¸å¦¨ç¢ €—€“ å’Œ‚Ï‚Ï‚Ï‚Ï‚Ïo_after‚Ç€‚¼指令在文档中标记下é¢è¿™ä¸€è¡Œï¼š

    phase: output filƒ¸„>çš„æ„æ€是,当å‰é…置指令è¿è¡Œåœ¨â€œè¾“出过滤器â€è‚Aªç‰¹æ®Šçš„阶段。„„„†Ðfontóize="4€xb>N‹© ƒ×»¤çš„执ƒè顺åºï¼ˆå…­ï¼‰‡X‡‚ ‡?ƒ?ƒ?ƒ8†a¢æˆ‘们†y‰Àepos=0000150784>‚Ð五)Ž‰到, ‰8‡ ŠÙlocation‹A使用€âc„xent€Ûˆ;†3时,通常情况下就‹€对应çš„·ê模å—注册该ƒ§ƒ§¸­çš„“内容处ç†ç¨‹åºâ€ã€‚那么当一个‚‚†øœªä½¿ç”¨任何†††Œ†ˆI³æ²¡æœ‰…'†Œâ€œå†…„G„E‡›‚·‚·‚°会å‘生什么事情呢?è°åˆæ¥æ‹…负起生æˆå†…容和输出å“应“q‡æ‹…å‘¢à答案尊Áˆ)º›æŠŠå½“请求çš„ÕRI 映射到文件系统的é™æ€èµ„æºæœåŠ¡æ¨¡å—Š¨‚9­˜åœ¨â€œ‡‡‡Œ˜aº›é™æ€‚G‚E¦ƒ‡ð†¸作用ï¼›å之ïà…%‚Óæƒå°±ä¼šè‡ªåŠ¨è½åˆ°è¿™†¹‚r上。¢˜˜˜’ßQˆ¬ä¼šåœ¨oŒ¿Œ¹安排三个这样的陆g†g—(除éžä½ çš„•ü§™ž„造时显å¼ç¦用了è¡9‚Ù…õ–9•或者多个,倓¯ç”¨äº†àç§ç±»åž‹çš„其他模嗘ˆ0按照它们在‡‡–|¦c¢}Œä¾æ¬¡æ˜¯°?°?°?°;Index°C">ngx_i€‰¯“„l²‚G‚G‚DAutoÚ‚gx_a€­‚‡‚以劆Š1stž@c†£”î²»—É¥é€ä¸€介ç»ä¸Šð‹è¿™ä¸‰ä‹Í‘§‘§‘§‘£†/†/†/ˆo†ˆoº·‚‚‚ˆ?‚7ˆ?ˆ?…˜都åªä¼šä½œç”¨äºŽé‚£äº›žj‰ˆò/ˆ«结尾çš„请求ï‹å¦‚请求RGET /¨€s››Ù€Œå¯¹äºŽœù‚‡‚‡‚†则会直接忽略,北£hÕ移交ç»™”W”W”TŒØ—üŒÅ„8OOˆ4ƒØ刚好相å,ç„?¥é‚£äº›ˆ—†††÷÷÷·Ÿ»è¦ç”¨äºŽåœ¨æ–‡«g›®å½•ä¸­¦ã查找指定的首页文€‡1±»ä¼¼†’ƒ.html†Û“J€Çtm€»¥îö:‡¯‡¯‡¯‡¨‚I    ¹… / {‚²
ˆ»•½“用户˜¯‘m地å€æ—‹É®œ´/¨åœ¨ßßßÛCoreÓ#ˆÁ">€1Òé…置挎ؤ指定的文件×Ñ‹ä¾æ¬¡å¯»æ‰¾''ߟä两个斂±½Ù¦‚æžœo‚'¾Ãˆ¹ˆ™ç›´æŽ¥å‘起‿Q部跳转â€åˆ°‰c‚Gƒ§ƒˆ°çš„地å€ï¼›è€Œƒ×ƒ×ƒ×»¶ä¸å­˜ƒï»§ç»­æ£€˜€¯†ç µ8å¦å­˜åœ¨ã€‚如果存在¤4 ·å‘èµ·…ç…ç…炯§ñ›å¦‚æžœƒ—€ï…E»ç„¶ä¸ƒgˆ™æ”¾å¼ƒ§—§g§g§g§g´'•w•w•w我们å‰é¢å·²ç»åœ¨“ñfilepos=0000021263>•T˜é‡æ¼«谈(二)“º£Pæ到Tז–– Echo– e€X_exec">€^§+–*·_‚‚‚ŽRewrit˜®€s˜À€K‚‡¤å¯ä»¥åŽ/Ž/Ž(±!¿™ç§è·³€œÆ修改当å‰è¯·æ±‚çš„°aY¹¶ä¸”釕匹é…与之对应的º§Ä:H‚†é‡æ–°执行r…Æ€` ™access€—W´+­‰å¤„熛•ñ› ä¸ºæ˜¯“内部跳ö€„·³è½¬â€,所以有别于ÈTTP å议中定义的基于 302 å’Œ€@1 å“应çš„“外部跳转‚Äœ€ç»ˆç”¨户的æµ览器ç‚`œ°å€æ 也ä¸ä¼šå‘生å˜åŒ–,ä¾ç„¶æ˜¯åŽŸæ¥çš„ÕRI ä½ç½®ã€‚而 ngx_i€‰ 模å—一旦找到了‚§‚§‚§‚§‚¤#‚z">‚·指令中列举燸–‡ä»¶ä¹‹åŽï¼Œå°±ä¼šå‘起这样‰ü†…部跳‰þ仿佛甉ùˆH直接请求的这个文‚èŽ对应皉<†° ·ã€‚

为了进一步确认ˆ7ˆ7ˆ7ˆ7Š×Š×ŠÖ在找到文件时的“‡O‡J行为,我们ä¸å¦¨è®¾计下é¢è¿™ä¸ªå°ä¾‹å­:†¯†¯†¯†¨    location / {此时æˆa‘œ¬æœºçš„ ‚‹®‚Z 目录下创建一个空白的’ˆŸ›“c›9¹¶ç¡®ä¿该文仓ñæƒé™è®¾ç½®å¯¹äºŽè¿è¡ŒÎ–Ù÷orker ˜h程的å¸户å¯è¯»ã€‚然ž…Û¤˜œS„ª‹æ ¹ä½ç½®ï¼ˆ†J„r):•wˆŸˆŸ•wŠÂ$ cur'›Ôùlhost:8080/'‹ÇŒ§äË32ŒßŒß„G„G„C›H里å‘生了什么?为€c输出ä¸是‹÷‹÷‹ô‰Ñ†…容(å³ç©ºç™½ï¼‰ï¼Ÿé¦–先对‹Ø°Æ¯始请汥€‚@GET ŠŒŒÛ匹é…出 ˜¥4 Œp处ç†å®ƒï¼Œç„¶åŽRcontent;阶段皑ا§§§§§§•¯•¯q²w‰/‰-®ÉºŽæ˜¯ç«‹ˆð°K–Û¨‚“Ÿ‚¤’â©ÿ©ÿ。“ŽÏŽÏŽÈ‚ÀŽãˆá›¸ä¿¡å¤§家都主á¿Ø问题。接下æ¥æœ‰è¶£ƒ¨事情åÄï¼åœ¨é‡新为…—…—>š ´ó°ä½ç½®åúçàŒœ…置嗠¨„ðŽé‚¯ „„`¼˜å…ˆçº§è¦é«˜äº;§‹%因为€ïƒ–ƒaŒ‰ç…§¹Jå‰ç¼€æ¥åŒ¹é…æ—¶éµå¾ªºè°“的“最长å­ä¸²åŒ¹8语义​ñ¾#ƒ‘œ¨è¿›å…¥ƒ¯†7†7‡Ÿ之åŽï¼›˜ˆé‡æ–°å¼€å§‹æ‰§¤¡‚1rewriteË ¡access€š€以劗g—e等阶段。最终输出Ra = ¡D 自然也就在情ç†ä¹‹中了〒ÿ’ÿ’ÿ®š¨“Ž¥ç€ç ”究上é½Ì½³‚@如果歰ŠŠ™ç™á‰/¢W»¶åˆ é™¤‰†è®¿é—®³ŽTˆä¼šå‘”Á¥ •T‘¢ï¼Ÿç­”案是è¿”回Ê403Æorbidde}‡ºé”™é¡µ…§N‚’¡g¡g¡g¡g¡g¡g¡d ›PŸ‚w‚w‚w‚w‚r#‚J"¢#‚ƒŒ‡ä»¤æŒ‡定的斷ƒˆåœ¨è¿™é®°±æ˜¯£×Š¯¬ŒæŽ¥ç€æŠŠå¤„熸˜¢Hç»™’©©|•0续模å—,而倒„€ª‘ð¢`无法夂¹ã®£§–»<åªå¥½æ”¾å¼ƒï¼Œè²³º†é”™è¯¯ŒX½û且在¤€ã日志中留下了类似ƒr€è¡Œä¿¡æ¯ï¼š•¯•¯•¯»¯¹Ê[error] 28789#0: *1 directory ŠR of "•¦"€Às f’»Ç»Ç»Ç„_„_š£bŒƒžé“¯ò¾¿æ˜¯ç”Ÿæˆâ€œç›®å½•ç´¢å¼•â€çš„æ„æ€ï¼Œå…¸åž‹ç¹¹å¼å°±æͳ网页,上é¢åˆ—举出œo¶OƒC‹8‚‰€æœ‰æ–‡œ©’Œå­ç›®€ð¨€Œè¿è¡Œ¸‚–÷–÷–÷–÷™g™g™d¨»½7‚w‚w‚vAuto‚ ‚—x_a€­‚·—å°±å¯ä»¥ç”¨äºŽ§°动生æˆ这样ç¯bŠïŠë‰‚ª§#¸°ŠŠä¸Šä¾‹修改上¸‹ï¼š“77““Š°í / {‘Ç‘ÆM€Erooth ;ŸŸ€2•œ '¯
û€€„     €Eautoindex on;此时ä»然ä¿æŒæ–‡ä»¶系统中的 ‚y/var/www/„‚.htmlƒ ƒä¸å­˜åœ¨ã€‚我们å†è®¿é—®ûkä½ç½®æ—¶ï¼Œå°±ä¼šå¾—到一张漂亮的网页:†(†††‚áˆ-$ curl 'http://localhost:8080/'‰/Šä<†¡>‹G??8ead9€atitle€iI4f /€É/€Ö€r¥‚ß‚ß‚ß;body bgcolor="white"ÇÇÇ„›1„'„'/€» r€Upr„¶a href="../ƒ2€@ÂaƒŸƒŸƒŸƒšîcgi-bin‚€m‚?08-Mar-2010 19:36‚C-ƒ'ƒ'ƒ'ƒ'errorƒ€[ƒ™oƒGƒGƒGƒGƒGƒGƒDhtdocsƒK€dƒWƒ65-Apƒ503:55ƒ7ƒ7ƒ7ƒ7ƒ4iconƒ,€[ƒ'†g†w†wƒGƒGƒGƒE/Ç;/’áŽÇ÷÷ó˜7G¢—¢—œ—œ—œ‘生æˆçš„ÈTML æºç æ˜¾ç¤ºï¼Œæˆ‘本机¢Ç¢Ä¡ 目录下还有’­,€š3€>t€”以劀ʋ‚ë这几个å­ç›®å½•ã€‚在你的糧œå°è¯•ä¸Šé¢çš„例å­ï¼Œ输出很å¯èƒ½ä¼šä¸å¤ª¥è样。¥wˆçˆçˆà值得一æ的是,当„ «×„;ª‚‰/«ï«ïªS优先è¿行的 ngx_‚ÒN‹I é…置挆(¤çš„执行顺庇0七)¯ø¯ ‚ ¯ßƒ?ƒ?ƒ8„˜看一丅ׅׅ֊jç£ç›˜æ–Š «3˜ˆ‘们使›žð‘ ˆ[…c”)®µï¼šŸŸ„o„o‡¡ƒˆ¶Íloc„(on / {¶×¸»Ç€2rooth«½¸oŸ]}€ç¹O¹O……¤¤Œæ—¶åœ¨¸¯g¸¸创建两个文件,一€~å«åš·«±?‚)“á•’ð ƒ°bthisésíyèomeŒ›å¦ä¸€ä‚ï‚îhello‚ï‚ï‚ï‚îb÷orldj. ‡³注æ„迎Ȇ‡”ƒé™è®¾X‚Èç¡®ä¿å®ƒä»¬éƒ½å¯¹è¿è¡ŒÎ•ú‚Àker¾¸›ç¨‹çš„ç¹Úå¸æˆ·å¯è¯»ã€‚‘OŒGŒGŒ@¬Œ)¥é€šè¿‡ÈTTP å议请求一下这两…n所对庞9ÕRI”ŸƒWƒW”Ÿ‘½$ curl '¨•!lhost:8080¿Wl'““ï‚4é €!my Žo”w€Ÿ‚„7„7„7„0g„7‚7‚52 ??„ˆçˆçˆç>Ÿ»¡ø到,å…ˆå‰åˆ›å»ºçš„é‚£‹ë¡·«¿¹è¢«åˆ†åˆ«è¾“出了。Œwƒ—ƒ—ƒä¸å¦¨æ¥åˆ†æžä5里å‘生的事情:†I¢5 œÜ中没有使用è”Ú’X—Òc©ˆentS阶段çš„模å—æ«ŠùºŽæ˜¯ä¹Ÿå°±þ€„±æ²¡æœ‰æ¨¡å—注册这个 locationngx_i€‰ å’Œ‚‚‚‚Autoª‚7x_a€­‚R… „ØåŽçœ‹åˆ°å½“å‰è¯·æ±‚çš„ÕRI‰HˆQ/º.htmlˆs„:€Éhello€ÏŠÉ¹¶ä¸ä»¥ Œd»“尾,于是直接弃æƒï¼Œå°†Œ~转给了最åŽè‰Ç‚@†1st c‚»‹.€ï€ï‘, ¹æ®‰§‰§‰§‰£Core‰{#root">€1‰[Œ‡ä»¤æŒ‡定的“文档根目录’šˆdocum‘ˆòÈ),分别将芲Š™ˆ»ŠŠŠ€Ï 映射为文件系统路径‹var/www‚—‚— ‚×^œ¨ç¡®è®¤š"¤ä¸ªæ–‡ä»¶å­˜åœ¨‹ðŒä®ƒä»¬çš„šd†¢作为å“应体输出,øš|®¾ç½®„CšK-Typeƒâ Çt-Length…»‘È劺Last-Œified’D­‰å“应头。

…V… ­¡ ÿÿý”Ÿæˆçš„ˆé…¶å«ä¹‰˜I­£åœ¨è¾“”ð­‰­Bš\š„æè¿°符是æ•°å­—ƒ2…Ëh‹°¨¨€‚ʷ体的æòÞç¼–å·ä¼šç»å¸¸å‘生å˜化,这里åªæƒˆ‘机器‚(‡ð典型辄ñƒa€¼å¾—一æ的昌àŒèƒ½ç”Ÿæˆè¿™ä¸€ˆ°ï¯çš„还¸™ ‡å‡†æ¨¡ˆ€§w§w§w§sGzipSŠR±x_g€°‹–°­‘½†å®ƒé»˜š„®à˜³‹|Žé¢ä¼š专门付“È•ä­“ŸŸ˜¾`æ„上é•Kªä¾‹å­äš¸½¿ç”¨çš„†¿†¿†¿®/®/®/¾…置指®XŒ€起到了声明⮧®§A½œç”¨ï¼Œ¶»ˆˆhå¼€å¯äº†”§”§´¯€ï€ï´¬€»æ˜¯å¤„¸x‚k状æ€ï¼‹y€Ù¦è½®å¾—¼¹®ƒè¿è¡Œå°±è¦çœ‹ƒºc©ë‚»阶段先于它蹵那些樃ª‚º‡H»Ã‡†…8©#进一步确认è“j点,æ¢q¢/¸ªç©ºç™½„:loc†ðon­±(®šä¹‰ï¼š§§§¢¯¢ª‚= / {¡Ï¡ÎM}€ç¢¯¢¯ƒwƒwƒs因为没有é…ç´á’‡’‡’‡’‡’‡’‡’Sˆù‰€ä»¥åœ¨访问迭·­ƒ­c™ ¸Í¡ç®—出一个缺çœçš„—”该缺çœ值是å–所谓›†[å‰ç¼€â€²øˆÈfigureð†èixµ路径下的²³)/››(ƒsZ¾ä¸€ä¸ªä›ê—¹‡è®¾â€œƒGƒB¬/foo/bar‚k‰ˆ™ç¼ºçœ†—†—†‘®wï„.‘·ŽGŽGŒ–™¹ˆâ€œé…„—„’由什么æ¥å†³å®šçš„å‘¢?默认情况下,就„AŒë安装旰ª…mŠ`或者说D构造时传递给†J./‹®½Ü„šæœ¬çš„€ú--ŒSd€‰é¡¹çš„Œ³Ž°¯ñ¦‚æžœ„„ˆ¥‰cusr/™1l/•ô†dˆ™â€œé…ˆ‹OïïvŒæ—¶é»˜ˆè‚G‚GxÏȨø过,我们也å¯ä»¥åœ¨§—Ȇ܋—¶å€™ï¼Œ通过‰/‰.命令衉q临时指定自己的“‡Ÿ‡šŠ“Ša•º„KƒïŽ ز…ƒ#†â“§“§“§¥W€ ‡Ê -p¥Xhome/ag¬8zh/testˆc¤÷¤÷ƒƒƒ>Ž对于该æœåŠ¡å™¨å®žä¾‹9…¶â€œé…‡oŒÇŒÁ„O„O而默讎ÿŽÿŽÿ‚?‚?‚:. „„¸ä»…会›sƒOƒOƒO„i¿˜å†³å®š瀌Œ¼¼–‡ä»¶ä¸­许多相对路å™如何解释ƒ€€…‡Šä¸ºç»对路径,åŽé¢æˆ‘们还会看到许多需è¦引用到“é…ç½®å‰ç¼€â€çš„例å­ã€‚

获å–当å‰â€œæ–‡æ¡£æ ¹目录 q„Ë有一个éžå¸¸ç®€ä¾¿çš„方法,那就是请求k肯定ä¸存在ç‡ä»¶æ‰€å¯¹åº”çš„资æºå,例如:…ׅׅׅР   $ curl 'http://localhost:8080/blah-€).txt'š™ø很自然地得到 ‚1ˆÀ‚B 错误页。此时å†çœ‹Î†ñ€ü日志斕ñ)º”该会œã类似下é¢è¿™ä¸€è¡Œé”™É¶ˆæ¯ï¼š–Ÿ……–Ÿˆ[error] 9364#0: *1 open() "/home/ag‹¨zh/test‰z—W—Q" failed (2‚No such€¸€°‚pr directory)‹?‹?‹?…·…·¢¿™æ¡é”™‡f  ‹ ngx_static‹C模å—打å°å‡ºæ¥çš„,因为它并ä¸èƒ½åœ¨æ–‡‹P系统çš„对应è¤Z上找到å为ƒb‡Ï‡Èƒ{£nŽ¸ƒ…_¯¯ä¿¡æ¯中包å«æœ‰…§…§ 试图打开的愳š„ç»å¯¹­¦¦€以从è¿èªè·¯å¾„ä¸éš¾çœ‹‡h‡9«2à«O«O是„ Ž×Ž×ŽÑ„z.’'ŒwŒwŒp—`±(åˆå­¦è€…会想当然地把—ß—ßç†è§£ä¸ºæŸä¸ªªtionC®†A…¶å®žä¸Š—eªä¾‹å­è¡¨æ˜Žï¼Œå³ä½¿‚7‚6‚0æˆåŠŸåŒ¹é…,也是å¯Ø返回…7…7‰èŽn决定ç€ggc‚¨抽象皋©³K‹cå¦å­˜åœ†‰而éžæŸ‡á具体çš„…ÿ…þ¿œ¨ã€‚ŒgŒgŒgŒaŒ5¹Š¯çš„一º™c‚p¿˜è®°é…¾ƒ‚coª(n–阶段çš„模å—指令,…x他们自己其实并ä¸期望使用‚‚‚Š¼ºçœè¿¥‚èé™æ€èµˆÙæœåŠ¡ï¼¼?‡'‡'‡'¥§¥¢‰u /aut£8{¢§¯l€Eaccess_by_lua¾ŸŸ€W€ --øƒ¹¶Øof L‚ cod¦Ùmitt§Éhere...‚·‚·‚W€2'³O/€í}€ç¨÷¨÷‰‰´,˜¾ç„¶ï¼Œ™SŸˆñ’œŽ¥å£åª–X义了ˆ«·:‘C>›0 ‚¡œØœªå®šä¹‰任何’7’7„‡„†˜x于是当我们请求‡‡‡‡£æ—¶ï¼Œš0‡o‡o‚ëÌua 代ç ä¼šå¦‚期执行,¦iŽ„ß„ß„Ý‚£äº›é™–Ø­›–Û½´§æŽ¥ç€™ñŠ¨å‘生作用,直至°W°Wµô去文仴Դ\´G‡_³ÿ€‚而绠8¬ ƒ0¥¥¡µä¼šæŠ›±c除éžè¿气太好,在¸?¸:确实孤‘¢ãå«åš„_„_„\µSŸ!¸€æ¡ç»验是U é‡åˆ°æ„外的ªß…W£R”åˆä¸æ¶‰åŠé™‹G‹B º”当首先检查是å¦å†E«?«?ƒ8’‹`¼èæ°å½“圩,™··©G™ ¦+™'™'™'™'™#‚Ì™.€‡™5。Ÿ‚Ÿ‚Ÿ‚›Echo‚¤e€X">€1‚–¨˜¼8‚'‚'‚'‚!Proxy‚,p€a_pass">€g‚‹¹‹ç±»ã€‚¿;‡ÐN‚9±‰jerror.log–DBð般总是会æä¾›å„ç§ó问题çš„答案ПP¿÷¿õŸÈƒ§ƒ§ƒ ŽQœ‰ä¸‹é¢¨“À’cä¿¡æ¯ï¼³GªGªG³G¬k[‚ò] 9364#0: *1¯˜pen() "/home/agÀzh/test/html¤2" fail°Ñ(2ÈNo sucµ`f€°‚(r directory)¯¯¯¯†‚…w…w…w…pf‘Àóize="4€xb>Œ›©Ÿ»¤çš„执†€…§è¡Œé¡ºåºï¼ˆå…«)å‰é¢æˆ‘们详细讨论了 rewrite“°一) àæ到,†ûŠÃ‹#ƒø€å…±åˆ’分为 11ÐŽ|Ð按照扊çä¾æ¬¡æ˜¯“z„t-read”Çt>server€¸•—€Ôfind-•fig€¿–瀟‚̀ǀŃh—¿˜O€—ÿ€¿€½try-‰Ñ€¯™Ÿ™›à•€†âlo…+.Œ×Œ×Œ×ŒÐšø先执衒z†ˆÕ ”$è›å»å–并解æžå®Œ—í´ï¼ˆrequestƒadersŽ ”åŽå°±ç«‹å³å¼€å§‹è¿è¡Œ‘àœB´åƒå‰é¢ä»‹ç»è8„œŠ„Ž” 样支挘7˜0注册夑™‘8Ȗᯔ如标准模å—”Yhref="http://wiki.n‚I.org/H€°RealIpModule">ngx_ˆ¸lip•:†–’‰—‰—… „CŸx„_ŸœèœqŠŸèƒ½æ˜¯迫使Šå®¤ä¸ºå½“ˆ@—~œaºåœ°å€ˆ¡À定的æŸ一个茂Á€¼ã€‚下Š8Šã例å­å°±ä½¿ç”¨ä¬±‡ß‡ß‡ß‡ß‡ß‡ß‡Ø‹L供的‚‡‚‡‚‡‚‡‚…#set‚z_ip_from"›È€—€‘‹°Ñ‚ß‚ß‚ß‚ß‚Ü‚-”"‘Ѐ‡er‚ºˆº¤æ¡é…ç¬E:™o™o™o™hY    ¡S {š’˜里的酒šž¸®©¤µŠŠé‚£äº›ž@自¡Šî¡‹ži‰€æœ‰è¯·Ÿ§Ÿ¥¡ 都改冕Ⱥ请求头‚RŽ4‚C‚) õ K¿时该例使用了标准内建å˜é‡›?›?›?›;Core›,.24·›(Ž'd›‡Y¾“出当¦_†¿†¼µ˜确认是å¦è¢«æˆåŠŸæ”¹‡`…øœŸ‹Ï‹Ï‹È首先在本地èƒJ¨²³§ñ‰*•‰Ž¥å£ï¼š‚߂߂ߟwÊ$ curl -H '‹¤“¸1.2.3.4'˜ƒlh°@:Ÿ1ƒ’o“O •´üO“·“·……“·‡Œä½¿ç”¨®¹… 工具皹Ë-H´œ€‰é¡¹æŒ‡èXé¢å¤–çš„ÈTTP¾˜’Ÿ’ž: „ÿt>. 从输凑˜¯ä»¥çœ‹åˆ°ï¼Œ‘ç‘ç‘ç‘ç‘ç‘w‘ç‘甓–ð实在„Êrewrite»/®µå°±å·²ç»æˆä¸ºäº††˜µ†ö中指官ü¼a³œƒ‡W‡Py¹ˆü究竟是在什么时候œ„¾ø———呢?ç­”案是:在ƒŠp‘P-¬°d†o®µã€‚ç”±于‡w‡w ‚øè¿è¡Œè¿œåœ¨‚W‚WK之åŽï¼Œæ‰€ä»¥å…|­Åt¥z¾`ˆØ通过ŽwŽwŽw»„Ò¾o¾꺟»¤è¯»å–‚‚‚ÿÿÿÿ¥¿‡æ—¶ï¼ŒƒA‡ºçš„楋߳˜¯ç»è¿‡‰_‰_Š¤¯¡æ”¹è¿‡‚£—›¯›¯›«如果在请求上例中›•Ÿß£d…(没有挓á•••ˆ–者æ供的ool–#ä¸æ˜¯åˆæ³•çš„ÉP ±¯–?x ™H`会对æ‰G进行‹€€…Œæ”¹å†™ï¼Œä¾‹å¦‚:

    $ curl localhost:8080/test‰à果从å¦ä¸€å°æœºå™¨è®¿问这个 ‚y„ 接å£ï¼Œé‚£ä¹ˆå³ä½¿æŒ‡定了åˆæ³•çš„º‡4Ë请求头,也ä¸ä¼šè§¦å‘Îginx 对æ¥æº地å€è¿›è¡Œæ”¹`。这是因为上例已ç»ä½¿ç”¨ €—€“三)‚R中介终q†À“CIDR 记法â€)。此外,åŒæ—¶é…置多ä•i‡‡‡‡‡†‡€—‡语å¥ä¹Ÿæ˜¯å…许的,”¡ ·å¯ä»¥ˆ „C?Œð‘Ÿ€æˆ–地å€H®µã€‚下é¢æ˜¯ä¸‰¹–™­ï¼š¦wÏϦw j……‹ À0.32.€05; ×¢/ÇÇÕ\0/24××¢§„ß„ß„Ü有的读者å¯èƒ½ä¼šé—®‰pŒ÷Œ÷Œ÷Œ÷Œõ">ngx…"ip“S¨¡å—究竟有什么实际用途呢?为什么我们需è¦åŽ»æ”q›üŒÏŒË答案是:当¤½¤„ç†çš„Ի过了æŸä¸ªÈTTP 代ç†æœ务器çh½¬å‘æ—¶‘;P…óå°±å˜å¾—特别æ‰x”¨ã€‚当原始çš„用户胇转å‘之åŽï¼Œ„ˬX收到的冷“2— ä¸€ä¾‹™€€‘˜æˆäº†该代煭‘¨»¡ÙºŽæ˜¯ˆ –è劀l背åŽçš„应用就无法知é“历„n真实愙щ€ä»¥ï¼Œ„°般我们会在ƒ]‡‰çš„代…™¨ä¸­æŠŠ‚ƃ;‡_¨8¼–ç è¿›Œ³Šè殊的Œû³æ‚@£™ˆ¦‚上例€µµŸ£¨…ª‡¸å†åœ¨…eŠÙ§æŠŠè¿™ä¸ªè¯·æ±‚ƒ#„s­&æ¢å¤å‡ºæ¥ã€‚衲‚6„Š™»­å¤„ç†阶段(包括‹Ç‹Ä„ç§åŽ端应用)就äºp®¤ä¸ºè¿™´‰d›´æŽ¥æ¥²(´Û“.g‹_‹Y‚Y»¿ä½›ä¸存在一样。正是因ƒ4¸ªéœ€æ±‚‚(ŽÛŸŸŸŸŸŸŸ—æ‰éœ€è¨œ¨ç¬¬ä¸€ª¡ˆïˆèŒå³ª²ˆt-‚d»注册å¤â¨‹åºï¼Œ…便尽å¤Ñ早地攠¿š‡p¬7§_§_¬4ƒÿƒÿµä¹‹åŽä¾¿æ˜¯…*server@write_°2˜;曾在¹?¹<15150¹:ºŒï¼‰¹=简å•æ到,å¥h‹ß‹ß‹ß‹Ü„‹ç‹á„œªÿš„é…ç½®¾Ã’书写圅†~†<»û—中时„iŸºæœ¬ä¸Š都是è¿行在߈WˆW¸‡¢™¥çœ‹è¿™“À i¸ÿ¸ÿŒÏŒÏŒÏ¸ÿƒŠ {¶¸_$€Elisten 8080¸‡€Ÿ‚ÿ‚ocatio‚(/testƒÇ¯¯¿¼ž $b "$a, world"„O‚Ÿ€W€!echo‚§§7€3}'‡€Ÿ¿Ÿ…'a helloƒO—ƒ€çƒ€™ÿÿÿ>À里,酒á语契ôt $—@ƒÙ‘ã”û”ã¶Ð“'”ÿ”þ”ᛠ此它“(”ϯ”ϔϭ‘€Œ///µè¦æ—©äºŽBƒr„šw‘……¾Â‡ï‡éb á÷Ú“£A™šäºŽå¤–™ø¶u‰g‰e‚c„K†©¯¥ä¾‹çš„测试结果è¯æ˜Žäº†è¿™›¸点:›——›º$ curl˜[lh©:š˜z—‘w¼…B—­G‘×/tt>

由于 server-rewrite 指令也就总是è¿è¡Œ在‚ׂׂׂÕalIp‚Ë">ngx_†xlip‚㨡å—改写请求的æ¥æºåœ°å€‡[。æ¥çœ‹ä¸‹é¢è¿™ä¸ªä¾‹å­ï¼š

” šr†Zšk接å£çš„结果如下:“·‚‚“·„¢$ curl -H '‹ž‡ 1.2.3.4'ŠKlhŸ€:“„†W‡7 ‰œüO‡Ÿ‡Ÿ…'…'…#ž šo­ä¸­ï¼Œ虽然žçžçžç¡·¡·¡·¡¶ž¸ƒ了‚w‚w‚w¡W¡W¡W‚‚Œ¦»¤}‹å‰ï¼Œä½†ä»ç„¶晚于ƒGƒGƒGƒGƒGƒG¤——执行㣸«”ò£å˜é‡åœ¨®O®O­N被„„„Š?Š?Š?Š>赋值时,从‚§‚§‚§‚£Cor‚.24£×r">¤G†ƒ(†{读出皬¬å·²ç»æ˜¯ç»è¿‡æ­S¿‡çš„了‰“““˜0fontóize="4€xb>N…Aµ$†ûƒ¡‹Š顺åºï¼ˆä¹ï¼‰–h–‚ –Oƒ?ƒ?ºÁ´§æŽ¥åœ¨Œ—Œ—Œ—µåŽè¾¹çƒˆ˜¯Zfind-configG®µã€‚è¿™˜È¼¹¶ä¸æ”¯æŒÎ† ‘L³¨å†Œå¤„ç†ç¨‹åº…ðŒè€Œæ˜¯ç”±] ¸å¿ƒæ¥完æˆå½“å‰è¯·æ±‚与„:ª5¾¾ ¹‹é—´çš„€对工作。æ¢å¥è¯è¯´ƒˆ‡À此阶段之å‰ï„0ƒ …Ð没有与任何ƒ‡ƒ‡ƒ…相关è”。因此,对šÐ¿¯‰¿‰¿‰¼ƒë…€*p¦hŒ(ad™´’ŒŒ÷Œ÷ÿµæ¥è¯´ïƒ˜ªæœ‰w›ÄˆÇ»¥åŠæ›´外层作用域中的酒ææ‰ä¼šèµ·ä½œç”¨ãŽÂ就是为什么åƒr¥cƒ§ƒ§ƒ¤‚â›ç›ç›çž‡ž†£‡l£”!…šè¿è¡Œå„‰‰‰ŽÉ”ȹŸæ˜¯ä¸º† ‰é¢æ‰€A®U…o…o…o…o¨w¨w¨w…_«²Ÿéƒ½ç‰¹æ„写在®Ú‰—‰—‰”¥Š¥ç¡®ä¿å…¶æ³¨å†Œ‡5‘‡µçš„处çš}能够生效。»· O O¶‘½“›´•_•_ƒGµæˆåŠŸåŒ¹é…了一个˜ç˜ç†u¡Ø†q¼šç«‹å³打å°ä¸€æ¡è°ƒè¯•ä¿¡æ¯到错误日志文件中±ˆ‘们æ¥看这æ ·çš„一ä¼:‡‡‡ª‰„¨    …U /hello {¿»br©€)†u€EechP"”world";ÇÇ„}€ç€æ€›…_…_…_>如果å¨X‘JŒÃ‡ “调试日志â€ï¼Œé‚£–Y½“请求ŒZ†»ŒK¯£æ—¶ï¼Œ便å¯ä»¯–error.lo‹¶µ¡»¤å‡ºä¸‹™®¢€è¡Œä¿¡æ¯ï¼š‹‡†/†/‹‡ˆR$ grep 'using ’»'ŒQgs/„/‰Šo‚ebug] 84579#0: *1 ‚‡‚€urŽ´"ˆ"‚‡ŒŒ…ç…ç…ã“Œœ‰æ„çœ略了俇ٻq¦–çš„æ—¶³戳,以便放在这里›Ÿƒ7ƒ7ƒ3¥ß››°×š—ƒ˜¯æˆ‘们€xè€æœ‹å‹ê§¼W€‚由于ž½·²ç»åœ¨ƒwƒw¿>»J‡h»g»gŸ‰ºîˆªˆ»Ž„o„o‚¼€å§‹ï¼Œ‚G¡Gç½®å—中Ž€…的指令便å¯ä»¥äº§ç”Ÿ作用。å‰é¢å·²ç»ä»‹ç»è¿‡ï¼Œå½“ ngx_r€› 模å—çš„,ƒ˜于 location€g‚“…Bå’Œ‚—‚—‚—‚—‚“Š\‚¶€‡‚׈ä¸ä¾‹å¤–。

GG@å†å¾€åŽä¾¿æ˜¯æ‰€è°“çš„ŽÂpost-¯Žï€‚这个€{„X僒find-config®µé‚£æ ·…€接å—·ñ‹¬注册处ç†ç¨‹åºï¼Œè€Œ„pç”±] ¸å¿ƒå®Œ戓Ÿ„·ƒ)…á¦æ±‚çš„“内部跳转â€æ“作(如æžœ‚/‚/‚*œ‰æ­¤è¦‚Cè¯ï¼‰ã€‚å…ˆå‰åœ¨Žyfileˆà=0000115150>‚È二)™ ×Ò了“冄§„ –y¦‚念,åŒæ—¶æ¼”示了如何通à’’’’Echo’e€X_exec">€^‘Ϥ或者‚§‚§‚§¢'¢&”Õ”ž‚Ÿ¤æ¥å‘起“内‡€ã€‚ç”±¢êƒƒƒ†/†/†/†/ƒ“¤6ŽB“ˆtentŽG®µï¼Œä¸Ž•0里讨论的–¯××— å…³ï¼Œ…h˜Qˆ‘们感兴趣çš„便åªå‰©ä¸‹è¿„ˆ—‚w¢_‡—‡—‹‹‹‹‡”›žé¡¾ä¸€„”7”7”7”7’ƒ’ –aš¡‘­ï¼š¡—¡—¡—¡”    server {‡"
›˜=†­ ©˜k”¦'˜o˜o˜o˜o˜o˜o˜o£ŠŠå½“å‰请求çš„ÕRI žæ¡ä»¶åœ°æ”¹å†™ä¸º„Ò‹)„Š«N¥ƒšjªâ€œå†…饷¯ Œæœ€ç»ˆè€¿›äº†‡‡ ‚…‡ ¸sˆ@比较有趣的å„0–¹æ˜¯â€œƒ¯Í工作原ç†ã€‚â'µœ¬è´¨ä¸Š其实就是把å‡Ò´â‡é¹Ë¾l¼ºè¡Œå€’退到¼—¼—©Œä»¥ä¾¿é‡æ–°è¿›Ð‚“Šb©è‡Ÿ‡˜ä…置嗃ø€`对。比如上例中,¨÷¨÷¨÷¨÷ˆˆè让当剧ˆ×ˆÐˆ£›žäº†ˆ¿ˆ¿„͵~此时彂—“5¾Ë被††††††††修改丿ᕟ•œ所以迖€€æ¬¡æ¢æˆäº†”¯”«Žå½“å‰è…Ó›¸å…³è”‚X然åŽå†接ç€ä»Ž''‰š¾€ä¸‹æ‰§ŽXˆ¸± g g `ä¸è¿‡è¿˜R›´æœ‰è¶£˜?˜¯ï¼Œå€’Œ;Œ'Œ'ï„动作并ä¸æ˜¯h生在…g…g–t而是åT‡(é¢çš„¿§Ç€‚上例•À”§Ž—Ž—Ž—Ž—Ž—Ž—Ž—åªæ˜¯ç®€å•åœ°æŒ‡ç¤ºÎ‚i ˆèå¿…è¦åœ†£……Œ*¥: ï í££¥à设计对于‚ìåˆå­¦è€…æ¥è¯´ï’ˆ–许显得有些å¤æ€ªï¼šâ€œä¸º什么ä¸直接儱ˆ_ˆ_ˆ_ˆ_ˆ_ˆ_ˆ_­ƒ’*š€ç«‹å³è¿£j†b呢?â€答案å§c¾ˆç®€å•…à那就是为了在最åˆ匹é…çš ¥?‰á¥Žˆ支æŒå¤šæ¬¡åå¤åœ°æ”¹°ÀžI¨¾‹å¦‚:–ï–ï–ï–èƒ!½ç½æ·@½ç¹÷º×€Eˆ¤ ^ /bar;“€€…

这里在 ¡… /Œ‚ 中连续把当å‰è¯·æ±‚çš„ÕRI 改写了两é:第一€`先无æ¡ä»¶åœ°æS¸ºƒZŒIƒ,第二éå†æ——•z’. 而这ä¸¤æ¡ €L 语å¥åªä¼šæœ€ç»ˆå¯¼è‡´ƒÚpost-vˆ¹阶段å‘生一次“内部跳转â€æ“作,从…ä¸è‡³äºŽåœ¨ç¬¬ä²‡ŠS—¶å°±ç›´接跳离了当å‰çš„„#‚ …#åŽé¢çš(ˆgˆgˆgˆgˆgˆgˆgˆb没有机会执行。请范‘&…ˆå£çš„结果è¯å®žäº†è¿™‡0点:”x”W”W”W‚™–}$ curl™‹lh‹ð:8080ƒ–—O˜/™"€÷˜?˜?ƒïƒïƒë¾“出结†å¯ä»¥çœ‹åˆ°ï¼Œä¸Šä¾‹ç¡®†¸æˆåŠŸåœ°ä»Žˆ?™\€æ­¥è·³åˆ°äº†•¯šMŠ如果å¯ç”¨ÎŒÉ ‘È调试日志â€çš„è¯ï¼Œ还å¯ä»¥ä»Ž‚zfind-config”G®µç”Ÿæˆ‘7‘7> å—的匹é…ä¿¡æ¯ä¸­è¿›…tbOO‰g‰gOOgrep 'using¸„â'Ñgs/error.€XŒÇ·‚[debug] 89449#0: *1 ‚‡‚€ur©¼"‹q"‚w‚w‚w‚w‚w‚w‚w‚qŒð‚w‚w‘§ˆGˆGˆD我们眑,对于该次请求,Šàå…±åªåŒŒ1过‘×#’Œ‘wžã¦ú个Ž—Ž•¢Ž‚‰¤ ‚ˆ¤'¤'¤!“˜Ž†O†O†H£ 然,妔ê°lserve­# …°ç½®å—中直接使用£££££££‚ü指令对请求¨ª•H£È©3…ˆ™ä¸ä¼š涉åŠâ€‡‡‡ƒ!› ä¸ºæ­¤ªˆµ™å‘生å†ï†è®§šg‚早于执¡Œš–…p…(›uœŸœŸ‚8‹È比如下é¢è¿™ä¸ªä¾‹å­›/Œ§Œ§›/–¥…c {•W—Ç$€Eliste–Ø©y;‡–×€Ÿ‚ÿ€!ˆ¤ ^•  ½Q‚_Ç€Ÿ‚_‚?„s‰Ä‚(‚Z†§w€W€!ech¸ƒç¯?€3}'…€Ÿ¿Ÿ……‡(…§§·…³¡ˆç¯¯…''€ç€ç…ç‘'‘'‘'">’ 里,戤Q–ß–ß–ß”¡就把那些以¤/£›µ·å§‹çš„™¯• º¤Í S´©€Œæ­¤æ—¶;并没有和任何™Ÿ™ž相关è”,所äƒè¨Û正常往下è¿è›Œš¯š¯œã完æˆæœ€ç»ˆçš„ƒg·«*»fˆë…c¾K¦!Ô‡÷¦˜å£ï¼Œé‚£ä¹ˆ‚Ç‚À ?根本就没有机会匹ƒ£ÞŒH第一次(也是唯一ƒÀ€Å‰è¿è¡Œ‡‡‡}‹ ‚©½“å‰è¯·†Œõå·²ç»è¢«æ”¹å†™ä?>±&…†§†¢e. 实际诃输出正是如此:¥—”w”w¥—–š$»Xurl› lhost:¤‰Š>—o˜Ošb€÷˜_˜_ƒïƒïƒë’k°x调试日志â€å¯ä»¥å†‹³ä½è¯æˆ½Êš„结论†ïƒƒ†ï†ï grep 'using‡XÊ'‡qgs/error.€X†g‡W‚[debug] 92693#0: *1 ‚‡‚€ur¤Ü"Q"‚wˆ×ˆ×…×…×¾ìˆ看到,›´€»å…±åªºû过一次‘šwŒ¹é…,“€€…¼Œå¹¶æ— “内部跳转â€å‘生。

Nginx é…置指令的执行顺åºï¼ˆå)post-rewrite标准æ¨¡å— ngx_l€¡_req å’Œ‚O‚O‚O‚OtZone‚W‚Uz€°‚[°±è¿è¡ŒˆP此阶段,å‰è€…å¯ä»¥控制请求的访问频度,而åŽè€…åjé™åˆ¶è®!h“P’¨P‹±¿™é‡Œæˆ‘们仅ä»…和它们打个ç…§é¢ï¼‚‰€H还会有机会专门接触到这两个æŠÒƒŒWŒWŒWŒP†¨‚¸åå¤æ…@°çš„æ ‡åŒÿŠ·Š·Š·Š±RealIpŠŸxŒ¸alipŠ{…¶å®žä¹ŸŠx… ªé˜¶æ®µæ³¨å†Œäº†处ç†ç¨‹åºã€‚有些读Š能会问:“这是为什么呈àŸå®ƒä¸æ˜¯å·²ç»˜ï˜êad–/ƒ½ƒ§ºäº†å—‚8ŸpŒT¸å¦¨é€š过下é‹À…É例å­æ¥æ­æ™“ç­”案:‹7‹7‹7 á„    server {„²‰dr´Õ值ä¿å­˜åˆ°äº†ç”¨æˆ·å˜釄Jˆú„;´‹然åŽå†输出ã¹à¹<…¿…¿…¸…ˆäºŽªÿªÿ¿7¿7¥å½“‡7‡7‡7Ÿ_Ÿ_Ÿ_Ÿ_—尚未在 preaccess
阶段改写æ¥æºåœ°å€时,最åˆçš„æ€ß€å°±å·²ç»åœ¨ <‚(rewrite‚®µè¢«è¯»å–了。上例çš„实际请求结果è¯æ˜Žäº†æˆ‘们的结论:

ƒé    $ curl -H 'X-Real-IP: 1.2.3.4' localhost:8080/test…ª
输出çš„地å€ç¡®å®žæ˜¯未ç»æ”‹Ù过的。Nginx €`“调试日志â€å¯ä»¥进一步确认这一点‰‡„W„W‰‡‰‡ grep‰€E‰€htt€Xscript (var|set)|‘hlip‰Úgs/error.€Xˆ_‰·‚Ä[debug] 32488#0Š*1 ƒƒ ƒ€À"ŠÞ"‚‚‚‚‚‚‚‰…h†˜addr‚W‚W‚W‚W‚W‡#„‚‘S„w‚'‚'‚'‚'‚'0100007F FFF€F€P€¥‚¿‚¿‚¿‚¿‚¿‡/‰·‰·…G‚”—GGD其中第一行è“B信毒'çç’'…·…·…·…·…·…·…·…·…·ƒ×ƒ×ƒÒ™˜ €( 语å¥è¯¤É‚_‚_‚_‚[Cor‚E.24remote_“)">$€w“˜‚àå˜é‡æ—¶äº§ç”ŸçžrŠ£‹aŸð­—符串©¢ˆ‡ˆƒ 便是„·„·„·„·„·„G„·„·当时读出æ¥ç„8€¼ã€‚?‹o‹o¥©€Œç¬¬äºŒ‘‘ÏÏ‘‘‘‘‘ßßÏÏσŸƒŸ–yˆ™æ˜¾ç¤º²对å˜é‡‹J‚× ©Ø†p³X赋值æ“作。†§ƒƒƒ Žé¢ä¸¤ùˆ?ŸŸˆ?ˆ?ˆ?ˆ?¡§£Ç˜×ˆ‚'‚'‚'‚'£Ç£Ç£Ç‚¿ŠÇŠÇ†'†'›”‡”‡”‡›ŠalIp”“">ngx_„³” 模å—在Œjp€ÐccessŒ‹阶段攸•På‰è¯·æ±‚çš„æ¥æºåœ°å€ŽÓ看到,改写åŽçš„æ–°ºÏºÌŸæœ›çš„ƒ¢Šìƒ’. 但很明显这个æ“作å‘生圅C‘¯žÄ‘“之åŽï¼Œæ‰€ä»¥å·²ç»å¤ª迟了〒WŠŸŠŸš¼最åŽä¸«Ñ’o··’o’oOOš§«§«§£'ƒ×ƒ×ƒ×šÛ7774Echo¤´e€X">€1é…置指令在输出时¬C_‹·‘¸ªG„,我äý它的值是改å@‰çš„楑—Œ_†ß†ß†Ú‚s 里,有的读者å¯èƒ½会问:“如果ˆGˆGˆG˜w˜w˜w˜w—ä¸åœ¨˜˜˜Œ³¨å†Œå¤„ç†ç¨‹åº,而å¬r·Ÿ8那么上例ä¸å°±å¯ä»¥工作了?â€ç­”案是†ø8”p定。因为‡G‡G‡G»?»>‡M„ćVI†?也åŒæ ·æ³¨å†Œ†‡†‡†„‡Œ‰é¢æˆ‘®±iaæilepos=¦Ñ115150>(二)ƒÊ»i‰¹åˆ«æ¡k“¡¿™ç§æƒ…况下,ä¸åŒæŒƒ¹‹é—´çš„执行顺åºä¸€èˆ¬æ˜¯ä¸¢Òšçš„,æŸÚ‰‰‰WWW…:ˆ×ˆÒ“”»ç„¶åœ¨‚ÿ‚ÿ‚ÿŒŒ#º0">€(‚ê语å¥ä¹¥q†£˜˜˜˜‹‡¨x建议æ˜Ñå°½é‡åœ;servež£–b­é…ç½®…Ÿ…Ÿ…Ÿˆ—ˆ—ˆ—…«¿™æ ·çš„Œ«!»¥é¿å…–x¼»‹ç»çš„Žt£˜æ‰‹çš„—P外情况。‡G‡G‡G¬!¿è¡Œåœ¨œœ“û‰Û!¨£ü€x¦ä¸€ä¸ªè€æœ‹å’Y‚1‚‚ši•ÿ¬å·²ç»çŸ¥é“了’I ‡å‡†æ¨¡‡h‰ï‰ï‰ï‰ëAƒ‰ïx_ƒ­a>ã€ç¬¬ä¸‰æ–¹æ¨¡å‚—‚–mdounin›€€….ru/hg/ngx_http_auth_request_module/">€ù€×st 以åŠç¬¬ä¸‰æ–¹æ¨¡å— €‚•指令å°±è¿è¡Œåœ¨è¿™ä¸ª阶段。

€L— 功能〓דדדÑ对于多个Œ·Œ·Ï‰7“Ÿ™…ç…ç…ç…ç…ç…ç…åˆgšˆ¯ä»¥ç”¨…控制它们彼此之间„1作方å¼ã€‚比如模å¡0A ”ùB 都在†W†W†P‡S了与访问控制相关‡G‡E那就有两ç§å„€ñ”¸•È„’Œæ¨¡å—„4¾—通过验è¯æ‰算通过,二ççáåªè¦å…š ­ä»»ä¸€äœ(‚_就算递ˆ8©‚€ç§åä„ý称为ˆ;llˆ#…͈或者说“与‡Ù³»â€ï¼‰„Ø‚ºŒç§æ–¹€则被秂‡nŽ‚‡‚‡‚‚€`‚‡¼‰ã€‚默认情农Ћ,“ë使用çš„是…O‚ϧa¸‹é¢æ˜¯ˆ+例å­ï¼š—g—g—g«4    loc“¸on /t³P {ƒ2
±里,戴YœU‹ÊŽäŽ¥å£ä¸­åŒæ—¶é… 1œ¢Ÿ¢Ÿ¢Ÿ¢›A‰*¿Wx_Ÿ«^µ"‚W‚W‚W¿Ÿ‚>¾þ‚"´¡¿™æ ·¢7¢7±±œ”±è¿™ä¸¤”°«•èµ·æ¥åšæ£€éªŒåµUž[‚±¯­å¥‚²éá—会让…υυψˆˆ…ÿ—的处ç¦=总是æ‹’ç»å½“å‰è¯·æ±‚»Ó„Ÿ‡L” ””…[ x‚“å…许讪1‡)½“我们¤Ã†g†g†g±±±±°ã‘¡'¡&’†@Œˆ需覆G¶ 所有樉 ¬èª¯ï¼Œä½†ä¸å¹¸çš¤q –H†7†7†7Œ—Œ—Œ—Œ——总是会拒绉£™)‰€ä»¥æ•´’0Œ«†Pa¢«æ‹’:§G›‡›‡§Gª$ curl§‹lhost:8080›çž‡Ÿg <html&g Ÿ??9ead9€atitle€i403 Forbid–¨€Ù/€æ€rµ‚ï‚ï‚ï;bod©xbgcolor="white"ÇÇÇÂcenterƒuh1„§„§„1€Ê€Z—‚ß‚ß‚ß;h‚¾Ÿê‚?‚?‚?‚?‚;/†ÙGGGCŒ?G«÷«÷wwq细心çš„读者会在λr错误日志文件中看到类似下é¢è¦±€è¡Œçš„出错信æ¯ï¼š”oƒÿƒÿ”o†‚[error] 6549#0: *1·5 fŒÝˆ¨r™Ø‡§‡§‡§ƒ¯ƒ¯‡¤„¶è€Œï¼Œ如果戤!把上例中的 º¢Ô«¯§Û更改为/)n¤€€‚À‡¿„„‡¿‡º›Ùtio†À›º {†Ç§½€2ƒ¬ˆøny燀Ÿ‚ÿ€2²y‚ll‚o?€3¯O¯H ¯W¯U‚/‚/€Ÿ‚Ç‚§€2echo ›€€…something important;

结果则会完全ä¸åŒ:‚çççƒ1„ $ curl localhost:8080/test„ç…Ǽ‡G‡G†_†_„„„{å³è¯·æ±‚å而最终通过了验è¯ã€‚这是因为在 ƒ anyƒ æ–¹å¼ä¸‹ï¼Œ€Êccess€ã阶段åªè¦æœ‰ä¸€ä¸ªæ¨¡å—通迃7è就会认为请求整体WU…X„8上例中, ngx_lua0.5.0rc19 …ˆ以上版本;之å‰çš„€“ I¸èƒ½å’Œž‡ž‡ˆ¨Ÿz¡Ó†èµ·å·¥ä½œçš„。‡Ï‡Ï‡Ï›8fontóize="4€xb>N†‚´指令皠§è¡Œé¡ºåºï¼ˆåƒX)’ˆ’0‚!’oƒWƒW¸´§è·Ÿåœ¨†:çŽçŽà‡ñŽçš„是Btry-file70’KŒ˜¬¸“门用于实现标准é†'¤wwwsCore­Tƒ¸_ƒº"„€[Ú’±ŠŸèƒ½ï¼Œ并ä¸æ”¯æŒÎ‰º”Ë注册夔ÿ…由于„G„G„G„G„G„G„G›ø†²Šp许多ÆastCGI 应用çš„é…置中都有€¨¬é‰€ä»¥æˆ‘们ä¸å¦¨åœ¨è¿™é‡Œç®€å•介ç»ä¸»¸‹ã€‚™ßŽÇŽÇŽÀ†—†—†—†—†—†—†—†•¢ºœH¾ˆªä»¥ä¸Šä»»æ„æ•°é‡çš„忆J¯ä¸ªå‚€Ù‡ Œ‡å®šäº†…ÒªÕRI. †Ãå‡è®¾é…¸¿t>N’ƒ‚Žyˆ™Ž4¦™•D””µï¼Œä¾æ¬¡æŠŠå‰‚‹-1‚Ÿ‚š映射为文件系统上†)¯¹è±¡ï¼ˆ€Û 0者目录),然åŽæ£€查这些对象是å¦å­˜…Œè¥‰—¦…´å‘现æŸ个文äƒÓ£‡9°±ä¼šåœ¨‡‡‡†¹½“å‰è¯·¾ …ˆŠy 改写为该对è„x‰€å¯¹åº”ŒÎI†À但ä¸ä¼šåŒ…å«æœ«å°¾çš„æ–œæ å­—符,也ä¸ä¼š…ᔟ ®内部跳转â€ï¼‰ã€‚如果剋_‹_‹Y„Gƒ‡ß…3ð—Qˆ ‡¿‡¿²ËˆÒç«‹å³å‘起“儇„š(最åŽä¸“9‘í¨³ç¬¬’ß„ï€ð‰æ‰€æŒ‡å®šçš„”Óš·š·š·´ˆ‰é¢åœ¨šù…Q©ˆ=0000164306>ƒ™…­ï¼‰™â°êGB74657A七)B xå·²ç»çœ‹åˆ°é™æ€èµ„æºæœåŠ¡æ¨¦ˆ0–¢ˆ)‹7Ÿï¼Œé€šè¿‡ _ _ _ _ \roo‡P€1„ê­ 8‰¾Â–‡æ¡£æ ¹™#Œ@进行昄y˜I¼È¦‚,当‡‡是Œê/var/www/+‘—¶å€™ï¼Œ‡S‡:Rfoo/barŽt¼šè¢«æ˜ žŸ»¶‚—‚‘‡t‹¸Œè€Œè¯·æ‚—‚•zƒä£€‚·‚²…s‚·‚·¤. ²Ø¨p¦Ã i¦‚何通‹ñ ›W›W¡·œ¨æ¥åŒº分“盈ô’‰³†¨€xøŠ ±#正在讀ºçš„¯w¯w¯woi使用åŒæ ·çš„规则æ¥完æˆå…¨Xˆðšt‡2”Ÿ?¡çš„映傛››t">ä¸å¦¨ž€…æ¥çœ‹ä¸‹é¢è¿™ä¸ªä¾‹å­:

    root /var/www/;—x里通过 €1 指令把“文档根目录â€é…置为 „á™…",如果你系统中的_^ 路径东ø˜æ”¾æœ‰é‡è¦æ•°æ®ï¼Œåˆ™å¯ä»¥æŠŠå®ƒæ›¿æ¢ä¸ºå…¶ä»–ä»»æ„路径h但此跀y对è¿è¡ŒÎ‡‘÷orker 进程çš„系统å¸å·è‡³少有å¯è¯»æƒé™ã€‚我们在…Úu ž‚††Ð使用了‹‡‹‡‹‡‹‡‹„Ÿ^">€^‹ÒŠãŒˆ¹¶æä¾›ƒ三个å‚数,ŠŠšà„b ‚˜™„ëå’Œ‹£“p€’. Ž ŠÀå‰é¢å¯¹…Ÿ…Ÿ…Ÿ…Ÿ…Ÿ…Ÿ…Ÿ‘mŠ°介ç»ï¼Œæˆ‘们åÚ知é“,它会劄‚-‚…q阶段ä¾次检查å‰ä¸¤‡Ž†c‡}†÷‡所对应的文件系统a±¡æ˜¯å¦“H„Žè°_šgšg˜Xä¸å¦¨å…ˆæ¥åšä¸€ç»„实验。å‡è®¾çŽ°å†|–זזу¸空的6q第一丆¯†¯†˜ å°„戆‚ç‚áO˜¯ä¸å­˜ƒø‚â›åŒæ ·ïƒ(¯¹äºŽç¬¬二个åƒG‰_‰Xƒg˜pžÊƒgƒao也是七‡ˆƒ €¨›€æ—¶›$ŽïŽïŽï®µå‘èµ·到最åŽä¸€ä¸ªå…„Œ‡å®šçš„ÕRI(峕ÿ¢Ë‰çš„“内部跳转â€ã€‚实际çš„请求结果è¯实了这一点:¿¿¿¸ƒ™¬E$ curl¯Slhost:8080 ­­ÿ®ò€÷®®ƒ÷ƒ÷ƒó显然,该请求最终—u¤/ƒ- 绑定在一起ï›è‰§è¡Œäº†输出Ê~字符串的工作。上例中定义的ƒwƒr›¿„O„N£Ž®Œå…¨ä¸I‚与这´€ŒÁ¬b´°«ð•!› ä¸ºå¯¹’0¤/¤/¤/¤/¤/¤/¤/ˆ@†€‰„êN-1­©w•#åªä¼šæ££ ¡'»Ÿï¼Œè€Œ…䎻执行”Q‚ …‡—n˜¥‹é—´çš„匹é…。’׎çŽçŽà‡{‹X«è”šªè¯·æ±‚ï„åƒØ产生类似下éRžÀ—Ë调试日志â€ï–ƒ¯ƒ¯––grep ‰Èing–¹gs/error.€X•§–—Ô[debug] 3869#0: *1‚?to use Œi€à"‘y"€A¥Ço"‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ûdir‚ò“‚÷¥S‚÷‚÷‚÷‚÷‚÷‚÷…ï…ë™X‚ÿ‚úz‚ÿ‚ÿž‡‹ÿ‹ÿ‹ü通过这些信æ¯å¯ä»¥清楚地看到©§©§©¦‰ºØº‹æƒ…:‘d¹O¥äº†æ–‡ä±o±o¥¯‰¸ªÄŒæœ«äº†åˆå¤„熂‰­²¬o>. žãFæ¡â€œè°•‡S•容易亖©误解,会让人误以 H²³@ŠŠæœ€åŽƒ×ƒ×§Ž™æ˜ å°„æˆäº†æ–‡¿W¿R进行棈ჺ‹å®žå¹¶éžå¦‚此。当£Ï£Ï£Ï£Ï£Ï£Ï£Ïº`Œ‡ä»¤å¤„‰ÐŽ`它的朆7·—¶ï¼Œæ€»¹¸直接扣)¶¶¤f论其对应的æ‡W‡T‚Xå¦å­˜åœ¨ã€‚ w””²ùŽ¥ä¸‹æ¥å†åšä¸²à„实验ï½ï‘ª-•›å»ºä¸€ä†p为J“„î®á…†…容为2hello÷orld“„ˆæ³¨æ„你需è¦有ƒÏƒÏ•«ƒø«9†™æƒé™):‡W‡W÷idth="£€€…0pt">    $ echo 'hell€@world' > /var/www/foo€^则请汭'­$¤»“果也Ÿ©‰â€¨…‚¯‚¯……­·­·­·…¯—­·†×/†×„/„/†×œ¨è¿™ç§情况中!¨•Ï•Ï¨°ç¬¬ä¸€ä«ç•W«á¯¹åº”çš„{¥é©%就会转å‘检查第二‚^竳»ç»Ÿå¯¹象(圅±³x便是监“7t“S)。由于此çb„N‡\„z­o­o­o¸ºç¬¬äºŒ­‡­‡­„ŒE…注æ„,原始冫€¼æ˜¯f…Œä½†¸¿¸¿¸¿¸¿¸¿¸¿¸¿š¸Š°‡ªåŠ¨åŽ»x末尾皊8œæ å­—符)。•ßß¾‹Žè组实验所产ç®ß®ß®ß—¿‚¿‚¿—¿—¿®ß®ß®ß–¯—׮߮Ú223®ß®ß®ß®ß®ß®ß‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ‚ÿ £‚òŽh‚÷“ë‚÷‚÷œ—‰‰±Í«r看到,ÏÏÏÏÏÏϬ˜Œ‡ä»¤åœ¨™Ë³W³W†å®ƒçš„å‰ä¸¤ä¸ª•«‘_…§…§…£通过å‰é¢è¿™å‡ ç»„实‘¸Ÿ°难看分†††††††»¤æœ¬è´¨上åªæ˜¯æœ‰æ¡ä»¶åœ°æ”¹°ž‡ž†´³ˆ3说的‘๖A…¶å®žå°±‚y£ßŸä¸Šçš„å¤ €Øå¦å­˜åœ¨ã€‚当â‚都ä¸æ»¡è¶³æ—¶ ®ƒå°±ä¼šæ— æ¡ä»…ª起一个指定ç„R内部跳转â€ãƒ然,除了无æ‚/‚)·µ之外+‹‹‹‹‹‹‹~还支æŒ直接è¿”回指…銶æ€ç ‹1HTTP 错误页,例如:’W’W’W ÷œ*„·€·K/ =404;šÿšÿšÿƒƒ¦¶è¡Œé…置是说sµçµã’Œ­G€œ˜z¨8´ç‘´äëÛ찱直接‰s‚ª†ÎotÆoundº´‰uˆ±ãD®ƒæ˜¯å¦‚何使用等å·å®R–àç¼€æ¥æ ‡è¯†‹ËŒ_š„。ˆŠmbp:pagebreak/>°‰HŽÀ€N€MŠpody>¢€„INDXÀèýéÿÿÿÿÀTAGX 14IDXTàINDXÀ´ÿÿÿÿÿÿÿÿ00‰$³€€017¼¡‡€02GÝ^²£€03&cê¿€04 ù\ÂÛ€05f»OÑ÷€066ŒJ¸“€07Äk¦¯€08kê`ÓË€09L½FÂç€0Aÿpσ€0BÎY´®€0C]‚UºÙ€0D2¼gÄ„€0E €iÒ¯€0F ÒPïÚ€10 TÁJú…€11 »N´°€12 mïR¸Û€13 @§m¿†€14 -æP¢±€IDXTÀÊÔÞéôÿ #/;GS_kwƒ›§†ç¼˜èµ·›Nginx 教程的连载计划›Nginx å˜é‡æ¼«è°ˆï¼ˆä¸€ï¼‰›Nginx å˜é‡æ¼«è°ˆï¼ˆäºŒï¼‰›Nginx å˜é‡æ¼«è°ˆï¼ˆä¸‰ï¼‰›Nginx å˜é‡æ¼«è°ˆï¼ˆå››ï¼‰›Nginx å˜é‡æ¼«è°ˆï¼ˆäº”)›Nginx å˜é‡æ¼«è°ˆï¼ˆå…­ï¼‰›Nginx å˜é‡æ¼«è°ˆï¼ˆä¸ƒï¼‰›Nginx å˜é‡æ¼«è°ˆï¼ˆå…«ï¼‰ªNginx é…置指令的执行顺åºï¼ˆä¸€ï¼‰ªNginx é…置指令的执行顺åºï¼ˆäºŒï¼‰ªNginx é…置指令的执行顺åºï¼ˆä¸‰ï¼‰ªNginx é…置指令的执行顺åºï¼ˆå››ï¼‰ªNginx é…置指令的执行顺åºï¼ˆäº”)ªNginx é…置指令的执行顺åºï¼ˆå…­ï¼‰ªNginx é…置指令的执行顺åºï¼ˆä¸ƒï¼‰ªNginx é…置指令的执行顺åºï¼ˆå…«ï¼‰ªNginx é…置指令的执行顺åºï¼ˆä¹ï¼‰ªNginx é…置指令的执行顺åºï¼ˆå)­Nginx é…置指令的执行顺åºï¼ˆå一)FLISAÿÿÿÿÿÿÿÿFCIS éŽ