ãã¹ãŠã®ãããžã§ã¯ãã®å¯¿åœã®äžã§ããµãŒããŒãSLAèŠä»¶ãæºããã®ããããæåéãçä¿¡ãã©ãã£ãã¯ã®éãæå¶ãå§ãããšããæ¥ãŸãã ãã®åŸãããã«ããã¯ãéãã¯ãšãªã誀ã£ãŠäœæãããã€ã³ããã¯ã¹ããã£ãã·ã¥ãããŠããªãããŒã¿ããŸãã¯ãã®éããã£ãã·ã¥å
ã®é »ç¹ã«æŽæ°ãããããŒã¿ãããã³ãããžã§ã¯ãã®ä»ã®ããŒã¯ãµã€ããèŠã€ããé·ãããã»ã¹ãå§ãŸããŸãã
ããããã³ãŒãããå®ç§ãã§ã倧éã®ãªã¯ãšã¹ãããã¹ãŠããã¯ã°ã©ãŠã³ãã«é
眮ãããå¯èœãªãã¹ãŠããã£ãã·ã¥ãããå¿
èŠãªSLAã€ã³ãžã±ãŒã¿ãŒã«ãµãŒããŒããŸã å°éããŠããªãå Žåã¯ã©ãããã°ããã§ããããã å¯èœã§ããã°ããã¡ãããæ°ããè»ã賌å
¥ãããã©ãã£ãã¯ã®äžéšãåé
ãããã°ããã®éåé¡ãå¿ããããšãã§ããŸãã
ãããããµãŒããŒãããå€ãã®èœåãæã£ãŠãããšæããŠããå ŽåããŸãã¯ãµã€ãã100åé«éåããããžãã¯ãã©ã¡ãŒã¿ãŒãããå Žåã¯ãããã¯ãšã³ãããã®å¿çããã£ãã·ã¥ã§ããçµã¿èŸŒã¿ã®nginxæ©èœãæãåºãããšãã§ããŸãã ãããäœã§ãããããããŠããããµãŒããŒã«ãã£ãŠåŠçããããªã¯ãšã¹ãã®æ°ãå¢ããã®ã«ã©ã®ããã«åœ¹ç«ã€ããèŠãŠã¿ãŸãããã
Nginxãã£ãã·ã¥ãšã¯äœã§ããïŒ
Nginxãã£ãã·ã¥ã¯ãããã¯ãšã³ãã®ãªã¯ãšã¹ãæ°ã倧å¹
ã«åæžã§ããŸãã ããã¯ãäžå®æéHTTPå¿çãä¿åãããªãœãŒã¹ã«å床ã¢ã¯ã»ã¹ãããšãã«ãããã¯ãšã³ãã®ãªã¯ãšã¹ãããããã·ããã«ãã£ãã·ã¥ãããªãœãŒã¹ãè¿ãããšã§å®çŸãããŸãã ãã£ãã·ã³ã°ã¯ãããšãçæéã§ãã£ãŠãããµãŒããŒã«ãã£ãŠåŠçããããªã¯ãšã¹ãã®æ°ã倧å¹
ã«å¢å ãããŸãã
nginxã®æ§æã«é²ãåã«ããngx_http_proxy_moduleãã¢ãžã¥ãŒã«ã§æ§æãããŠããããšã確èªããå¿
èŠããããŸãããã®ã¢ãžã¥ãŒã«ã§æ§æããããã§ãã
䟿å®äžãæ§æãå¥ã®ãã¡ã€ã«ãããšãã°ã/etc/nginx/conf.d/cache.confãã«è»¢éã§ããŸãã ãã£ãã·ã¥ã¹ãã¬ãŒãžèšå®ãæ§æã§ããproxy_cache_pathãã£ã¬ã¯ãã£ããèŠãŠã¿ãŸãããã
proxy_cache_path /var/lib/nginx/proxy_cache levels=1:2 keys_zone=proxy_cache:15m max_size=1G;
ã/ Var / lib / nginx / proxy_cacheãã¯ããµãŒããŒäžã®ãã£ãã·ã¥ã¹ãã¬ãŒãžãã¹ãæå®ããŸãã nginxãããã¯ãšã³ãããã®å¿çãšãšãã«ãã¡ã€ã«ãä¿åããã®ã¯ãã®ãã£ã¬ã¯ããªã§ãã åæã«ãnginxã¯ãã£ãã·ã¥çšã®ãã£ã¬ã¯ããªãåå¥ã«äœæããŸããããããèªåã§åŠçããå¿
èŠããããŸãã
ãã¬ãã«= 1ïŒ2ã-ãã£ãã·ã¥ã䜿çšããŠãã£ã¬ã¯ããªã®ãã¹ãã®ã¬ãã«ãèšå®ããŸãã ãã¹ãã¬ãã«ã¯ãïŒãã§ç€ºãããŸãããã®å Žåã2ã€ã®ãã£ã¬ã¯ããªãäœæãããåèš3ã€ã®ãã¹ãã¬ãã«ãèš±å¯ãããŸãã ãã¹ãã¬ãã«ããšã«ããã£ã¬ã¯ããªåã®äœææ¹æ³ã瀺ã1ã2ã®å€ã䜿çšã§ããŸãã
éèŠãªç¹ã¯ããã£ã¬ã¯ããªåãã©ã³ãã ã«éžæãããã®ã§ã¯ãªãããã¡ã€ã«åã«åºã¥ããŠäœæãããããšã§ãã ãã¡ã€ã«åã¯ããã£ãã·ã¥ããŒã®md5é¢æ°ã®çµæã§ããããã£ãã·ã¥ããŒã«ã€ããŠã¯åŸã§æ€èšããŸãã
å®éã«ãã£ãã·ã¥ãã¡ã€ã«ãžã®ãã¹ãã©ã®ããã«æ§ç¯ãããããèŠãŠã¿ãŸãããã
/var/lib/nginx/proxy_cache/2/49/07edcfe6974569ab4da6634ad4e5d492
ãKeys_zone = proxy_cacheïŒ15mããã©ã¡ãŒã¿ãŒã¯ãå
±æã¡ã¢ãªå
ã®ãŸãŒã³ã®ååãèšå®ããŸããããã«ã¯ããã¹ãŠã®ã¢ã¯ãã£ããªããŒãšããŒã«é¢ããæ
å ±ãæ ŒçŽãããŸãã ãïŒãã¯ãå²ãåœãŠãããã¡ã¢ãªã®ãµã€ãºãMBåäœã§ç€ºããŸãã nginxã«ãããšã8 MBã®ããŒãä¿åããã«ã¯1 MBã§ååã§ãã
ãMax_size = 1Gãã¯ããã¹ãŠã®ããŒãžã®æ倧ãã£ãã·ã¥ãµã€ãºãå®çŸ©ããŸãããããè¶
ãããšãnginxã¯å¿
èŠã®ãªãããŒã¿ãåé€ããŸãã
ãã£ãã·ã¥å
ã®ããŒã¿ã®ã©ã€ãã¿ã€ã ãå¶åŸ¡ããããšãã§ããŸãããã®ãããããã©ã«ãã§10åã§ãããproxy_cache_pathããã£ã¬ã¯ãã£ãã®ãinactiveããã©ã¡ãŒã¿ãŒãå®çŸ©ããã ãã§ååã§ãã ãéã¢ã¯ãã£ãããã©ã¡ãŒã¿ã§æå®ãããæéå
ã«ãã£ãã·ã¥ããŒã¿ãžã®åŒã³åºãããªãã£ãå Žåããã£ãã·ã¥ããŸã ããµã¯ãŒãã§ã¯ãªãå Žåã§ãããã®ããŒã¿ã¯åé€ãããŸãã
ãã®ãã£ãã·ã¥ã¯ã©ã®ãããªãã®ã§ããïŒ ããã¯å®éã«ã¯ãµãŒããŒäžã®éåžžã®ãã¡ã€ã«ã§ããããã®å
容ãæžã蟌ãŸããŸãã
â¢ãã£ãã·ã¥ããŒã
â¢ãã£ãã·ã¥ããããŒã
â¢ããã¯ãšã³ãããã®ã³ã³ãã³ãå¿çã
ããããŒãšããã¯ãšã³ãããã®å¿çããã¹ãŠæ確ãªå Žåã¯ãããã£ãã·ã¥ããŒãã«å¯Ÿããããã€ãã®è³ªåããããŸãã ã©ã®ããã«æ§ç¯ãããã©ã®ããã«ç®¡çãããŸããïŒ
nginxã§ãã£ãã·ã¥ããŒãæ§ç¯ããããã®ãã³ãã¬ãŒããèšè¿°ããããã«ãproxy_cache_keyãã£ã¬ã¯ãã£ãããããŸãããã®ãã£ã¬ã¯ãã£ãã§ã¯ãæååããã©ã¡ãŒã¿ãŒãšããŠæå®ãããŸãã æååã¯ãnginxã§äœ¿çšå¯èœãªå€æ°ã§æ§æã§ããŸãã
äŸïŒ
proxy_cache_key $request_method$host$orig_uri:$cookie_some_cookie:$arg_some_arg;
cookieãã©ã¡ãŒã¿ãŒãšgetãã©ã¡ãŒã¿ãŒã®éã®ãïŒãèšå·ã¯ããã£ãã·ã¥ããŒéã®è¡çªãé²ãããã«äœ¿çšãããŸããä»ã®ä»»æã®èšå·ãéžæã§ããŸãã ããã©ã«ãã§ã¯ãnginxã¯æ¬¡ã®è¡ã䜿çšããŠããŒãçæããŸãã
proxy_cache_key $scheme$proxy_host$request_uri;
ãã£ãã·ã³ã°ãããæè»ã«ç®¡çããã®ã«åœ¹ç«ã€æ¬¡ã®ãã£ã¬ã¯ãã£ãã«æ³šæããå¿
èŠããããŸãã
proxy_cache_valid-å¿çã®ãã£ãã·ã¥æéãæå®ããŸãã å¿çã®ç¹å®ã®ã¹ããŒã¿ã¹ãããšãã°200ã302ã404ãªã©ã瀺ãããšãããanyãæ§é ã䜿çšããŠãã¹ãŠãäžåºŠã«ç€ºãããšãã§ããŸãã ãã£ãã·ã¥æéã®ã¿ãæå®ãããšãnginxã¯ããã©ã«ãã§200ã301ãããã³302ã¹ããŒã¿ã¹ã®ã¿ããã£ãã·ã¥ããŸãã
äŸïŒ
proxy_cache_valid 15m; proxy_cache_valid 404 15s;
ãã®äŸã§ã¯ãã¹ããŒã¿ã¹200ã301ã302ã®ãã£ãã·ã¥ã©ã€ãã¿ã€ã ã15åã«èšå®ããŸãïŒç¹å®ã®ã¹ããŒã¿ã¹ãæå®ããªãã£ããããnginxã¯ããã©ã«ãã§ãããã䜿çšããŸãïŒã 次ã®è¡ã§ã¯ãã¹ããŒã¿ã¹ã404ã®å¿çã«å¯ŸããŠã®ã¿ããã£ãã·ã¥æéã15ç§ã«èšå®ããŸãã
proxy_cache_lock-ãã®ãã£ã¬ã¯ãã£ãã¯ããã£ãã·ã¥ã®ã»ããã®çŽåŸã«ããã¯ãšã³ããžã®è€æ°ã®ãã¹ãåé¿ããã®ã«åœ¹ç«ã¡ãŸããããªã³ãã®äœçœ®ã«å€ãèšå®ããã ãã§ãã ä»ã®ãã¹ãŠã®èŠæ±ã¯ããã£ãã·ã¥å
ã®å¿çããŸãã¯ããŒãžãžã®èŠæ±ããããã¯ããããã®ã¿ã€ã ã¢ãŠããåŸ
ã¡ãŸãã ãããã£ãŠããã¹ãŠã®ã¿ã€ã ã¢ãŠããæ§æã§ããŸãã
proxy_cache_lock_age-ãµãŒããŒããã®å¿çã«ã¿ã€ã ã¢ãŠãå¶éãèšå®ã§ããŸãããã®åŸããã£ãã·ã¥ãèšå®ãããåŸã次ã®ãªã¯ãšã¹ãããµãŒããŒã«éä¿¡ãããŸãã ããã©ã«ãã¯5ç§ã§ãã
proxy_cache_lock_timeout-ããã¯ãåŸ
æ©ããæéãæå®ããŸãããã®åŸããªã¯ãšã¹ãã¯ããã¯ãšã³ãã«éä¿¡ãããŸãããã¬ã¹ãã³ã¹ã¯ãã£ãã·ã¥ãããŸããã ããã©ã«ãã¯5ç§ã§ãã
proxy_cache_use_stale-å»æ¢ããããã£ãã·ã¥ã䜿çšã§ããå Žåã«èšå®ã§ããå¥ã®äŸ¿å©ãªãã£ã¬ã¯ãã£ãã
äŸïŒ
proxy_cache_use_stale error timeout updating;
ãã®å Žåãæ¥ç¶ãšã©ãŒãèŠæ±ã®éä¿¡ããµãŒããŒããã®å¿çã®èªã¿åããèŠæ±ã®éä¿¡ã®åŸ
æ©å¶éã®è¶
éããµãŒããŒããã®å¿çã®èªã¿åãããŸãã¯ãã£ãã·ã¥å
ã®ããŒã¿ãèŠæ±æã«æŽæ°ãããå Žåã«ãå€ããã£ãã·ã¥ã䜿çšããŸãã
proxy_cache_bypass -nginxããã£ãã·ã¥ããã®å¿çã
åãåãããããã«ãªã¯ãšã¹ããããã¯ãšã³ãã«ãªãã€ã¬ã¯ãããæ¡ä»¶ãæå®ããŸãã ãã©ã¡ãŒã¿ã®å°ãªããšã1ã€ã空ã§ã¯ãªããã0ãã«çãããªãå Žåã äŸïŒ
proxy_cache_bypass $cookie_nocache $arg_nocache;
proxy_no_cache -nginxãããã¯ãšã³ãããã®å¿çããã£ãã·ã¥ã«ä¿åããªãæ¡ä»¶ãæå®ããŸãã æäœã®ååã¯ãproxy_cache_bypassãã£ã¬ã¯ãã£ãã®ååãšåãã§ãã
ããŒãžãã£ãã·ã¥ã§èµ·ããããåé¡
åè¿°ã®ãšãããnginxã¯HTTPå¿çã®ãã£ãã·ã¥ãšãšãã«ãããã¯ãšã³ãããåä¿¡ããããããŒãä¿åããŸãã ãµã€ãã§ã»ãã·ã§ã³ã䜿çšããŠããå Žåãã»ãã·ã§ã³Cookieããã£ãã·ã¥ãããŸãã ãã£ãã·ã¥ããŠã©ãããŒã ã£ãããŒãžã«ã¢ã¯ã»ã¹ãããã¹ãŠã®ãŠãŒã¶ãŒã¯ãã»ãã·ã§ã³ã«ä¿åãããå人ããŒã¿ãåãåããŸãã
次ã«çŽé¢ãã課é¡ã¯ããã£ãã·ã¥ç®¡çã§ãã ãã¡ããã2ã5åã®ãã€ããŒãã£ãã·ã¥æéãèšå®ã§ããŸããã»ãšãã©ã®å Žåãããã§ååã§ãã ããããããã¯ãã¹ãŠã®ç¶æ³ã«é©çšã§ããããã§ã¯ãªããããèªè»¢è»ãåçºæããŸãã ããããŸãæåã«ã
Cookieã¹ãã¬ãŒãžç®¡çnginxåŽã§ã®ãã£ãã·ã¥ã«ã¯ãèšèšäžã®å¶éãããã€ããããŸãã ããšãã°ããŠãŒã¶ãŒãããã¯ãšã³ãã«å°éããªãããããã£ãã·ã¥ãããããŒãžã§ã»ãã·ã§ã³ã䜿çšããããšã¯ã§ããŸãããå¥ã®å¶éã¯ãããã¯ãšã³ãã«ããCookieã®é
ä¿¡ã§ãã nginxã¯ãã¹ãŠã®ããããŒããã£ãã·ã¥ãããããä»ã®ãŠãŒã¶ãŒã®ã»ãã·ã§ã³ããã£ãã·ã¥ã«ä¿åããªãããã«ããã£ãã·ã¥ãããããŒãžã®Cookieã®é
ä¿¡ãçŠæ¢ããå¿
èŠããããŸãã proxy_ignore_headersãã£ã¬ã¯ãã£ãã¯ããã«åœ¹ç«ã¡ãŸãã åŒæ°ã«ã¯ãããã¯ãšã³ãããç¡èŠããå¿
èŠãããããããŒããªã¹ããããŸãã
äŸïŒ
proxy_ignore_headers "Set-Cookie";
ãã®è¡ã§ã¯ããããã·ãµãŒããŒããã®Cookieã®ã€ã³ã¹ããŒã«ã¯ç¡èŠãããŸããã€ãŸãããŠãŒã¶ãŒã¯ãSet-CookiesãããããŒã®ãªãå¿çãåãåããŸãã ãããã£ãŠãããã¯ãšã³ããCookieã«æžã蟌ãããšãããã®ã¯ãã¹ãŠãã¯ã©ã€ã¢ã³ãåŽã§ã¯ç¡èŠãããŸããããã¯ããããäœããç®çãšããŠããããšããç¥ããªãããã§ãã ãã®Cookieã®å¶éã¯ãã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã«èæ
®ããå¿
èŠããããŸãã ããšãã°ãèªèšŒãèŠæ±ããããã«ããŠãŒã¶ãŒãã»ãã·ã§ã³Cookieãåä¿¡ã§ããããã«ãããããŒã®ç¡èŠãç¡å¹ã«ããããšãã§ããŸãã
ã»ãã·ã§ã³ã®åç¶æéãèæ
®ããå¿
èŠããããŸããããã¯ãphp.iniæ§æã®ã
session.gc_maxlifetime ããã©ã¡ãŒã¿ãŒã§ç¢ºèªã§ããŸãã ãŠãŒã¶ãŒããµã€ãã«ãã°ã€ã³ããŠãã¥ãŒã¹ãã£ãŒãã®è¡šç€ºãéå§ãããšæ³åããŠãã ããããã¹ãŠã®ããŒã¿ã¯æ¢ã«nginxãã£ãã·ã¥ã«ãããŸãã ãã°ãããããšããŠãŒã¶ãŒã¯èªåã®æ¿èªãæ¶ããããšã«æ°ä»ããåã³æ¿èªããã»ã¹ãå®è¡ããå¿
èŠããããŸããããã®éãã£ãšãã¥ãŒã¹ãèŠãŠããŸããã ããã¯ãnginxããªã¯ãšã¹ããããã¯ãšã³ãã«éä¿¡ããã«ãã£ãã·ã¥ãããã¹ãŠã®ãªã¯ãšã¹ãã«çµæãè¿ããããã«çºçããŸããã ãã®ãããããã¯ãšã³ãã¯ãŠãŒã¶ãŒãéã¢ã¯ãã£ãã§ãããšå€æããã
session.gc_maxlifetime ãã§æå®ãããæéãçµéãããšã»ãã·ã§ã³ãã¡ã€ã«ãåé€ããŸããã
ãããé²ãããã«ãããã¯ãšã³ããªã¯ãšã¹ãããšãã¥ã¬ãŒãã§ããŸãã ããšãã°ãajaxãä»ããŠããã¯ãšã³ãã«æž¡ãããããšãä¿èšŒããããªã¯ãšã¹ããéä¿¡ããŸãã nginxãã£ãã·ã¥ãééããŠããã¯ãšã³ãã«å°éããã«ã¯ãPOSTãªã¯ãšã¹ããéä¿¡ããã ãã§ãããproxy_cache_bypassããã£ã¬ã¯ãã£ãã®ã«ãŒã«ã䜿çšãããããã®ããŒãžã®ãã£ãã·ã¥ãç¡å¹ã«ããããšãã§ããŸãã ãªã¯ãšã¹ãã¯äœããè¿ãå¿
èŠã¯ãããŸãããã»ãã·ã§ã³ãéå§ãã1è¡ã®ãã¡ã€ã«ã§ãããŸããŸããã ãã®ãããªãªã¯ãšã¹ãã®ç®çã¯ããŠãŒã¶ãŒããµã€ãã«ããéã®ã»ãã·ã§ã³ã®å¯¿åœã延ã°ãããšã§ãããnginxã¯ãã£ãã·ã¥ãããããŒã¿ããã¹ãŠã®ãªã¯ãšã¹ãã«æ
éã«æäŸããŸãã
ãã£ãã·ã¥ãã©ãã·ã¥ç®¡çæåã«ãèŠä»¶ãç§ãã¡ãéæããããšããŠããç®æšã決å®ããå¿
èŠããããŸãã ç§ãã¡ã®ãµã€ãã«ã人æ°ã®ããã¹ããŒãã€ãã³ãã®ããã¹ããããŒããã£ã¹ããå«ãã»ã¯ã·ã§ã³ããããšããŸãã ãã£ãã·ã¥ããããŒãžãèªã¿èŸŒããšããã¹ãŠã®æ°ããã¡ãã»ãŒãžããœã±ããã«å±ããŸãã 15ååã§ã¯ãªãããŠãŒã¶ãŒãçŸåšã®ã¡ãã»ãŒãžãæåã®ããŒãæã®çŸåšã®æå»ã«è¡šç€ºã§ããããã«ããã«ã¯ãnginxãã£ãã·ã¥ããã€ã§ãç¬ç«ããŠã¯ãªã¢ã§ããå¿
èŠããããŸãã åæã«ãnginxã¯ã¢ããªã±ãŒã·ã§ã³ãšåããã·ã³äžã«ãªãå ŽåããããŸãã ãŸãããªã»ããã®èŠä»¶ã®1ã€ã¯ãè€æ°ã®ããŒãžã®ãã£ãã·ã¥ãäžåºŠã«åé€ã§ããããšã§ãã
ãœãªã¥ãŒã·ã§ã³ã®èšè¿°ãéå§ããåã«ãnginxãããã«äœ¿çšã§ãããã®ãèŠãŠã¿ãŸãããã ãã£ãã·ã¥ããªã»ããããããã«ãnginxã«ã¯ãproxy_cache_purgeããšåŒã°ããç¹å¥ãªãã£ã¬ã¯ãã£ããããããã£ãã·ã¥ããªã»ããããæ¡ä»¶ãèšé²ããŸãã æ¡ä»¶ã¯å®éã«ã¯éåžžã®æååã§ã空ã§ã¯ãªãã0ãã§ã¯ãªãå Žåãæž¡ãããããŒã«ãã£ãŠãã£ãã·ã¥ãåé€ããŸãã å°ããªäŸãèããŠã¿ãŸãããã
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m; map $request_method $purge_method { PURGE 1; default 0; } server { ... location / { proxy_pass http://backend; proxy_cache cache_zone; proxy_cache_key $uri; proxy_cache_purge $purge_method; } }
äŸã¯ãnginxã®å
¬åŒWebãµã€ãããåãããŠããŸãã$ purge_methodå€æ°ã¯ããã£ãã·ã¥ããã©ãã·ã¥ããŸããããã¯ãproxy_cache_purgeãã£ã¬ã¯ãã£ãã®æ¡ä»¶ã§ãããããã©ã«ãã§0ã«èšå®ãããŠããŸãã ããã¯ãnginxããéåžžãã¢ãŒãã§åäœããããšãæå³ããŸãïŒããã¯ãšã³ãããã®å¿çãä¿åããŸãïŒã ãã ãããªã¯ãšã¹ãã¡ãœããããPURGEãã«å€æŽãããšãå¿çãä¿åããŠããã¯ãšã³ãã®ãªã¯ãšã¹ãããããã·ãã代ããã«ã察å¿ãããã£ãã·ã¥ããŒã䜿çšããŠãã£ãã·ã¥ãšã³ããªãåé€ãããŸãã ãã£ãã·ã¥ããŒã®æåŸã«ã*ãèšå·ãæå®ããŠãåé€ãã¹ã¯ãæå®ããããšãã§ããŸãã ãããã£ãŠããã£ã¹ã¯äžã®ãã£ãã·ã¥ã®å ŽæãšããŒåœ¢æã®åçãç¥ãå¿
èŠã¯ãããŸãããnginxã¯ãããã®è²¬ä»»ãåŒãåããŸãã ãããããã®ã¢ãããŒãã«ã¯æ¬ ç¹ããããŸãã
- proxy_cache_purgeãã£ã¬ã¯ãã£ãã¯ãåçšãµãã¹ã¯ãªãã·ã§ã³ã®äžéšãšããŠå©çšã§ããŸãã
- ãã£ãã·ã¥ããã€ã³ãããšã«åé€ãããã{cache key}â *âã®åœ¢åŒã®ãã¹ã¯ã«ãã£ãŠã®ã¿åé€ã§ããŸãã
ãã£ãã·ã¥ãããããŒãžã®ã¢ãã¬ã¹ã¯ãå
±ééšåããªããŠãå®å
šã«ç°ãªãå¯èœæ§ãããããããã¹ã¯ã*ããšãã£ã¬ã¯ãã£ããproxy_cache_purgeãã䜿çšããã¢ãããŒãã¯é©ããŠããŸããã å°ãã®çè«ãæãåºããŠãããªãã®å¥œããªã¢ã€ãã¢ãçºèŠããããšã¯æ®ã£ãŠããŸãã
nginxãã£ãã·ã¥ã¯ãµãŒããŒäžã®éåžžã®ãã¡ã€ã«ã§ããããšãç¥ã£ãŠããŸãã ãproxy_cache_pathããã£ã¬ã¯ãã£ãã§ãã£ãã·ã¥ãã¡ã€ã«ãä¿åãããã£ã¬ã¯ããªãåå¥ã«æå®ãããlevelsãã䜿çšããŠãã®ãã£ã¬ã¯ããªãããã¡ã€ã«ãžã®ãã¹ã圢æããããžãã¯ãæå®ããŸããã äžè¶³ããŠããã®ã¯ããã£ãã·ã¥ããŒã®æ£ããæ§æã ãã§ãã ãããããproxy_cache_keyããã£ã¬ã¯ãã£ãã§ã確èªã§ããŸãã ä»ããã¹ãããšã¯ã次ã®ãšããã§ãã
- proxy_cache_keyãã£ã¬ã¯ãã£ãã«ç€ºãããŠãããšããã«ãããŒãžãžã®ãã«ãã¹ã圢æããŸãã
- çµæã®æååãmd5ã§ãšã³ã³ãŒãããŸãã
- ãlevelsããã©ã¡ãŒã¿ãŒã®ã«ãŒã«ã䜿çšããŠããã¹ãããããã£ã¬ã¯ããªãäœæããŸãã
- ãããŠããµãŒããŒäžã®ãã£ãã·ã¥ãã¡ã€ã«ãžã®å®å
šãªãã¹ãæ¢ã«ãããŸãã ããšã¯ããã®ãã¡ã€ã«ãåé€ããã ãã§ãã å°å
¥éšãããnginxãã¢ããªã±ãŒã·ã§ã³ãã·ã³äžã«ãªãå¯èœæ§ãããããšãããã£ãŠãããããè€æ°ã®ã¢ãã¬ã¹ãäžåºŠã«åé€ã§ããããã«ããå¿
èŠããããŸãã ããã§ããã¢ã«ãŽãªãºã ã«ã€ããŠèª¬æããŸãã
- ãã¡ã€ã«ã«æžã蟌ããã£ãã·ã¥ãã¡ã€ã«ãžã®çæããããã¹ã
- ã¢ããªã±ãŒã·ã§ã³ãšäžç·ã«ãã·ã³ã«çœ®ãç°¡åãªbashã¹ã¯ãªãããæžããŸãããã 圌ã®ã¿ã¹ã¯ã¯ãsginçµç±ã§nginxããã£ãã·ã¥ããŠãããµãŒããŒã«æ¥ç¶ããã¹ããã1ã§çæããããã¡ã€ã«ã§æå®ããããã¹ãŠã®ãã£ãã·ã¥ãã¡ã€ã«ãåé€ããããšã§ãã
çè«ããå®è·µã«ç§»ããäœæ¥ã®ã¢ã«ãŽãªãºã ã瀺ãå°ããªäŸãäœæããŸãããã
æé 1.ãã£ãã·ã¥ãžã®ãã¹ãå«ããã¡ã€ã«ãçæããŸãã
$urls = [ 'httpGETdomain.ru/news/111/1:2', 'httpGETdomain.ru/news/112/3:4', ]; function to_nginx_cache_path(url) { $nginxHash = md5($url); $firstDir = substr($nginxHash, -1, 1); $secondDir = substr($nginxHash, -3, 2); return "/var/lib/nginx/proxy_cache/$firstDir/$secondDir/$nginxHash"; } // tmp $filePath = tempnam('tmp', 'nginx_cache_'); // $fileStream = fopen($filePath, 'a'); foreach ($urls as $url) { // $cachePath = to_nginx_cache_path($url); // fwrite($fileStream, $cachePath . PHP_EOL); } // fclose($fileStream); // bash exec("/usr/local/bin/cache_remover $filePath");
å€æ°$ urlsã«ã¯ããã£ãã·ã¥ãããããŒãžã®URLãå«ãŸããŠãããnginxæ§æã§æå®ãããproxy_cache_keyã®åœ¢åŒã«æ¢ã«ãªã£ãŠããããšã«æ³šæããŠãã ããã URLã¯ãããŒãžã«è¡šç€ºããããšã³ãã£ãã£ã®ã¿ã°ãšããŠæ©èœããŸãã ããšãã°ãããŒã¿ããŒã¹ã«éåžžã®ããŒãã«ãäœæããåãšã³ãã£ãã£ã衚瀺ãããç¹å®ã®ããŒãžã«ãããã³ã°ãããããã«ããããšãã§ããŸãã 次ã«ãããŒã¿ãå€æŽãããšãã«ãããŒãã«ã§éžæãè¡ããå¿
èŠãªãã¹ãŠã®ããŒãžã®ãã£ãã·ã¥ãåé€ã§ããŸãã
æé 2.ãã£ãã·ã¥ãµãŒããŒã«æ¥ç¶ãããã£ãã·ã¥ãã¡ã€ã«ãåé€ããŸãã
# , FILE_LIST=`cat $1 | tr ` # ssh SSH=`which ssh` USER= # nginx HOST= # KEY= # SSH , $SSH -i ${KEY} ${USER}@${HOST} # rm -rf rm -f $1 #
äžèšã®äŸã¯ã¬ã€ãã³ã¹ã®ã¿ã§ãããæ¬çªç°å¢ã§ã¯äœ¿çšããªãã§ãã ããã äŸã§ã¯ãå
¥åãã©ã¡ãŒã¿ãŒã®ãã§ãã¯ãšã³ãã³ãã®å¶éã¯çç¥ãããŠããŸãã çºçããå¯èœæ§ã®ããåé¡ã®1ã€ã¯ãrmã³ãã³ãã®åŒæ°ã®é·ããå¶éããããšã§ãã å°éã®éçºç°å¢ã§ãã¹ãããå Žåãããã¯ç°¡åã«èŠèœãšãããå¯èœæ§ããããå®çšŒåç°å¢ã§ã¯ããrmïŒArgument list too longããšãããšã©ãŒã衚瀺ãããŸãã
ã«ã¹ã¿ã ãããã¯ãã£ãã·ã³ã°
ãªããšãããŠãããïŒ
- ããã¯ãšã³ãã®è² è·ã軜æžããŸããã
- ãã£ãã·ã³ã°ã管çããæ¹æ³ãåŠã¶
- åžžã«ãã£ãã·ã¥ããã©ãã·ã¥ããããšãåŠã³ãŸããã
ãããããã¹ãŠãäžèŠãããšæãããããããŸããã ãããããæåã§ã¯ãªãã«ããŠããæ£ç¢ºã«ã¯2çªç®ã®ãµã€ããã¹ãŠã«ç»é²/æ¿èªæ©èœããããééåŸãããããŒã®ã©ããã«ãŠãŒã¶ãŒåã衚瀺ããããšã«ãªããŸãã ååã®ä»ãããããã¯ã¯äžæã§ãããæ¿èªããããŠãŒã¶ãŒåã衚瀺ããå¿
èŠããããŸãã nginxã¯ããã¯ãšã³ãããã®å¿çãä¿åãããããããŒãžã®å Žåã¯ããŒãžã®htmlã³ã³ãã³ãã§ãããããå人ããŒã¿ãå«ããããã¯ããã£ãã·ã¥ãããŸãã ãµã€ããžã®ãã¹ãŠã®èšªåè
ã«ã¯ããã£ãã·ã¥ã»ããã®ããã¯ãšã³ãã«æž¡ãããæåã®ãŠãŒã¶ãŒã®ååã衚瀺ãããŸãã
ãããã£ãŠãããã¯ãšã³ãã¯ãå人æ
å ±ãnginxãã£ãã·ã¥ã«è©²åœããªãããã«ãå人æ
å ±ãé
眮ãããŠãããããã¯ãæäŸããªãã§ãã ããã
ããŒãžã®ãã®ãããªéšåã®ä»£æ¿ããŒããæ€èšããå¿
èŠããããŸãã ãã€ãã®ããã«ãããã¯å€ãã®æ¹æ³ã§è¡ãããšãã§ããŸããããšãã°ãããŒãžãããŒãããåŸãajaxãªã¯ãšã¹ããéä¿¡ããå人ã³ã³ãã³ãã®ä»£ããã«ããŒããŒã衚瀺ããŸãã ä»æ¥æ€èšããå¥ã®æ¹æ³ã¯ãssiã¿ã°ã䜿çšããããšã§ãã æåã«SSIãšã¯äœããç解ããŠããããããnginxãã£ãã·ã¥ãšçµã¿åãããŠäœ¿çšââããæ¹æ³ãç解ããŸãããã
SSIãšã¯äœã§ããïŒ
SSIïŒãµãŒããŒåŽã€ã³ã¯ã«ãŒãããµãŒããŒåŽã€ã³ã¯ã«ãŒãïŒã¯ããµãŒããŒã«äœãããããæ瀺ããHTMLããŒãžã«åã蟌ãŸããã³ãã³ãã®ã»ããã§ãã
ãã®ãããªã³ãã³ãïŒãã£ã¬ã¯ãã£ãïŒã®ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
â¢if / elif / else / endif-åå²æŒç®åã
â¢echo-å€æ°ã®å€ã衚瀺ããŸãã
â¢include-å¥ã®ãã¡ã€ã«ã®å
容ãããã¥ã¡ã³ãã«æ¿å
¥ã§ããŸãã
æåŸã®æ什ã«ã€ããŠã®ã¿èª¬æããŸãã includeãã£ã¬ã¯ãã£ãã«ã¯2ã€ã®ãã©ã¡ãŒã¿ãŒããããŸãã
â¢file-ãµãŒããŒäžã®ãã¡ã€ã«ãžã®ãã¹ãæå®ããŸãã çŸåšã®ãã£ã¬ã¯ããªã«ã€ããŠã
â¢virtual-ãµãŒããŒäžã®ããã¥ã¡ã³ããžã®ä»®æ³ãã¹ã瀺ããŸãã
ãµãŒããŒäžã®ãã¡ã€ã«ãžã®ãã«ãã¹ãæå®ããããšã¯å¿
ããã䟿å©ã§ã¯ãªãããããä»®æ³ããã©ã¡ãŒã¿ãŒã«é¢å¿ããããŸããåæ£ã¢ãŒããã¯ãã£ãŒã®å ŽåããµãŒããŒäžã®ãã¡ã€ã«ã¯åã«ååšããŸããã ãã£ã¬ã¯ãã£ãã®äŸïŒ
nginxãssiæ¿å
¥ã®åŠçãéå§ããã«ã¯ã次ã®ããã«å Žæãå€æŽããå¿
èŠããããŸãã
location / { ssi on; ... }
ããã§ããã±ãŒã·ã§ã³ã/ãã§åŠçããããã¹ãŠã®ãªã¯ãšã¹ããssiæ¿å
¥ãå®è¡ã§ããŸãã
ç§ãã¡ã®ãªã¯ãšã¹ãã¯ãã®ã¹ããŒã å
šäœãã©ã®ããã«éãæããŸããïŒ
- ã¯ã©ã€ã¢ã³ããããŒãžãèŠæ±ããŸãã
- Nginxã¯ããã¯ãšã³ãã®ãªã¯ãšã¹ãããããã·ããŸãã
- ããã¯ãšã³ãã¯ãããŒãžã«ssiæ¿å
¥ãæäŸããŸãã
- çµæã¯ãã£ãã·ã¥ã«ä¿åãããŸãã
- Nginxã¯ãæ¬ èœããŠãããããã¯ããç
§äŒãããŸãã
- çµæã®ããŒãžãã¯ã©ã€ã¢ã³ãã«éä¿¡ãããŸãã
æé ãããããããã«ãssiã³ã³ã¹ãã©ã¯ãã¯nginxãã£ãã·ã¥ã«å
¥ããŸããããã«ãããå人ãããã¯ã¯ãã£ãã·ã¥ããããã¯ã©ã€ã¢ã³ãã«ã¯ãã¹ãŠã®æ¿å
¥ãå«ãæ¢è£œã®htmlããŒãžãéä¿¡ãããŸãã ããã§ããŒããæ©èœããnginxã¯æ¬ èœããŠããããŒãžãããã¯ãåå¥ã«èŠæ±ããŸãã ããããä»ã®ãœãªã¥ãŒã·ã§ã³ãšåæ§ã«ããã®ã¢ãããŒãã«ã¯é·æãšçæããããŸãã ãŠãŒã¶ãŒã«ãã£ãŠè¡šç€ºãç°ãªãè€æ°ã®ãããã¯ãããŒãžã«ããããã®ãããªåãããã¯ãssiæ¿å
¥ã«çœ®ãæããããããšãæ³åããŠãã ããã Nginxã¯ãäºæ³ã©ããããã®ãããªåãããã¯ãããã¯ãšã³ãããèŠæ±ããŸããã€ãŸãããŠãŒã¶ãŒããã®1ã€ã®èŠæ±ã¯ãããã¯ãšã³ãã«å¯ŸããŠããã€ãã®èŠæ±ãããã«çæããŸãããããã¯ãŸã£ããå¿
èŠãããŸããã
ssiãä»ããæ°žç¶çãªããã¯ãšã³ããªã¯ãšã¹ãã®åé€
ãã®åé¡ã解決ããã«ã¯ãnginxã¢ãžã¥ãŒã«ãngx_http_memcached_moduleãã圹ç«ã¡ãŸãã ãã®ã¢ãžã¥ãŒã«ã§ã¯ãmemcachedãµãŒããŒããå€ãåãåãããšãã§ããŸãã ã¢ãžã¥ãŒã«ãä»ããæžã蟌ã¿ã¯æ©èœããŸãããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒããããåŠçããå¿
èŠããããŸãã ã¢ãžã¥ãŒã«ãšçµã¿åãããŠnginxãèšå®ããå°ããªäŸãèããŠã¿ãŸãããïŒ
server { location /page { set $memcached_key "$uri"; memcached_pass 127.0.0.1:11211; error_page 404 502 504 = @fallback; } location @fallback { proxy_pass http://backend; } }
å€æ°$ memcache_keyã§ãnginxãmemcacheããããŒã¿ãååŸããããšããããŒãæå®ããŸããã memcacheãµãŒããŒã«æ¥ç¶ããããã®ãã©ã¡ãŒã¿ãŒã¯ãmemcached_paââssãã£ã¬ã¯ãã£ãã§èšå®ãããŸãã æ¥ç¶ã¯ããã€ãã®æ¹æ³ã§æå®ã§ããŸãã
â¢ãã¡ã€ã³åã
memcached_pass cache.domain.ru;
â¢IPã¢ãã¬ã¹ãšããŒãã
memcached_pass localhost:11211;
â¢UNIXãœã±ããã
memcached_pass unix:/tmp/memcached.socket;
â¢ã¢ããã¹ããªãŒã ãã£ã¬ã¯ãã£ãã
upstream cachestream { hash $request_uri consistent; server 10.10.1.1:11211; server 10.10.1.2:11211; } location / { ... memcached_pass cachestream; ... }
nginxããã£ãã·ã¥ãµãŒããŒããå¿çãåŸãããšãã§ããå Žåãã¯ã©ã€ã¢ã³ãã«ãããæäŸããŸãã ãã£ãã·ã¥ã«ããŒã¿ããªãå Žåããªã¯ãšã¹ãã¯ã@fallbackããä»ããŠããã¯ãšã³ãã«éä¿¡ãããŸãã nginxã®äžã§ã®memcachedã¢ãžã¥ãŒã«ã®ãã®å°ããªæ§æã¯ãssiæ¿å
¥ããã®ããã¯ãšã³ãã®ãªã¯ãšã¹ãã®åãæž¡ãåæ°ãæžããã®ã«åœ¹ç«ã¡ãŸãã
ãã®èšäºãã圹ã«ç«ãŠã°å¹žãã§ãããµãŒããŒã®è² è·ãæé©åããæ¹æ³ã®1ã€ã瀺ããnginxãã£ãã·ã³ã°ãèšå®ããåºæ¬ååãæ€èšãã䜿çšæã«çºçããåé¡ã解決ã§ããŸããã