July Tech Festa 2018 (https://2018.techfesta.jp/)
!UBLVNBLVNF(.01FQBCP *OD+VMZ5FDI'FTUBສυϝΠϯΛ͑ΔϨϯλϧαʔόͷίϯςϯπΩϟογϡػೳͷཪଆ
View Slide
(.0ϖύϘϗεςΟϯάࣄۀ෦ΠϯϑϥΤϯδχΞٱถഅ!UBLVNBLVNF
ֹ݄ԁ͔Βར༻Ͱ͖Δʂ
ֹ݄ԁ͔Βར༻Ͱ͖ΔʂඵؒສઍϦΫΤετΛॲཧʂ
ֹ݄ԁ͔Βར༻Ͱ͖ΔʂສαΠτҎ্ӡ༻தʂඵؒສઍϦΫΤετΛॲཧʂ
ίϯςϯπΩϟογϡػೳ3FWFSTF1SPYZ84FSWFS௨ৗ
ίϯςϯπΩϟογϡػೳ3FWFSTF1SPYZ84FSWFS3FWFSTF1SPYZ$BDIF4FSWFS84FSWFSΩϟογϡίϯςϯπΩϟογϡ͋Γ
ίϯςϯπΩϟογϡػೳ3FWFSTF1SPYZ$BDIF4FSWFS84FSWFSΩϟογϡίϯςϯπΩϟογϡ͋Γ84FSWFSͷલஈͰΩϟογϡͯ͠ߴʹԠ͢Δɻ
ίϯςϯπΩϟογϡػೳ3FWFSTF1SPYZ$BDIF4FSWFS84FSWFSΩϟογϡίϯςϯπΩϟογϡ͋ΓOHJOYIUUQEύϑΥʔϚϯεͷߴ͍OHJOYͰϦΫΤετΛॲཧ͢Δɻ84FSWFSͷલஈͰΩϟογϡͯ͠ߴʹԠ͢Δɻ
ίϯςϯπΩϟογϡػೳ3FWFSTF1SPYZ$BDIF4FSWFS84FSWFSΩϟογϡίϯςϯπΩϟογϡ͋ΓOHJOYIUUQEύϑΥʔϚϯεͷߴ͍OHJOYͰϦΫΤετΛॲཧ͢Δɻ1)1ͷॲཧͰߴෛՙʹͳΓ͍͢8αʔόͷෛՙݮ84FSWFSͷલஈͰΩϟογϡͯ͠ߴʹԠ͢Δɻ
ฒྻສϦΫΤετ#FODI.BSLFS "QBDIF#FODI3FWFSTF1SPYZ84FSWFS3FWFSTF1SPYZ$BDIF4FSWFS84FSWFSΩϟογϡ8PSE1SFTTαΠτ 8PSE1SFTTαΠτ
3FWFSTF1SPYZ84FSWFS3FWFSTF1SPYZ$BDIF4FSWFS84FSWFSΩϟογϡ8PSE1SFTTαΠτ 8PSE1SFTTαΠτύϑΥʔϚϯεഒʂ
3FWFSTF1SPYZ84FSWFS3FWFSTF1SPYZ$BDIF4FSWFS84FSWFSΩϟογϡ8PSE1SFTTαΠτ 8PSE1SFTTαΠτύϑΥʔϚϯεഒʂແྉఏڙ
ͳͥ࡞ͬͨͷ͔ʁ
ࠃ࠷Ϩϯαό࠷
ੈͷதʹଟ͘ͷ$%/ࣄۀऀ͕ଘࡏ͢ΔίϯςϯπΩϟογϡͱ͍͑$%/
ϩϦϙοϓʂͰ֎෦$%/αʔϏε͏*OUFSOFU3FWFSTF1SPYZ $BDIF4FSWFS84FSWFS$%/ࣄۀऀ%$ΞΫηεϩϦϙοϓʂ
*OUFSOFU3FWFSTF1SPYZ $BDIF4FSWFS84FSWFS$%/ࣄۀऀ%$ΞΫηεΦϦδϯͷαʔόʹΞΫηεΩϟογϡର֎ͷίϯςϯπΩϟογϡظݶΕϩϦϙοϓʂϩϦϙοϓʂͰ֎෦$%/αʔϏε͏
*OUFSOFU3FWFSTF1SPYZ $BDIF4FSWFS84FSWFS$%/ࣄۀऀ%$ΞΫηεϩϦϙοϓʂΠϯλʔωοτΛߦ͖དྷ͢Δඞཁ͕͋ΔϩϦϙοϓʂͰ֎෦$%/αʔϏε͏
ίϯςϯπΩϟογϡػೳͷ߹*OUFSOFU3FWFSTF1SPYZ $BDIF4FSWFS84FSWFSΞΫηεϩϦϙοϓʂ
ίϯςϯπΩϟογϡػೳͷ߹*OUFSOFU3FWFSTF1SPYZ $BDIF4FSWFS84FSWFSΞΫηεߴϩϦϙοϓʂ
$%/োน͕ߴ͍
$%/োน͕ߴ͍υϝΠϯΛ$%/ʹ͚ΔͨΊͷ%/4ͷઃఆͦͦ%/4ͱʁ$%/ػೳ͕ଟ͘ઃఆ͕ෳࡶඇΤϯδχΞͷํʹͱ͍ͬͯ͠αʔϏεʹΑͬͯར༻ྉ͕ۚൃੜ͢ΔϩϦϙοϓʂΤϯδχΞҎ֎ͷํʑ͔Βଟ͘͝ར༻͍͍ͯΔ
ίϯςϯπΩϟογϡػೳʁ
Άͪͬ
ΆͪͬଟػೳΑΓ؆୯Λ༏ઌ
͜͜·Ͱͷ͓͞Β͍ίϯςϯπΩϟογϡػೳΛϦϦʔεࠃ࠷ϨϯαόΛࢦ͢ʂ֎෦$%/Λซ༻͢ΔΑΓɺંฦ͠ͷ௨৴Ͱ݁͢Δɻ୭Ͱ؆୯ʹઃఆͰ͖Δʂ$%/͕͍͠ͱײ͡Δ͓٬༷Ͱ؆୯ʹઃఆ͕Մೳɻ
͜͜·Ͱ໘ന͘ͳ͍Ͷʁ
ຊେنϗεςΟϯάͳΒͰͷίϯςϯπΩϟογϡػೳΛࢧ͑ΔΠϯϑϥٕज़ʹ͍͓ͭͯ͠·͢ʂ
ઃܭલఏ࣮·ͱΊຊͷྲྀΕίϯςϯπΩϟογϡͷ֓ཁɾ։ൃܦҢࠓίίίϯςϯπΩϟογϡͷػೳͱΠϯϑϥʹٻΊͨ͜ͱ
ઃܭલఏ ࣮ ·ͱΊίϯςϯπΩϟογϡͷػೳͱΠϯϑϥʹٻΊͨ͜ͱ
ΩϟογϡϞʔυ
ΩϟογϡϞʔυ81Ωϟογϡػೳ੩తΩϟογϡػೳ
81Ωϟογϡػೳ8PSE1SFTT༻ʹ࠷దԽͨ͠ΩϟογϡػೳϩϦϙοϓʂͷ͓٬༷ͷଟ͘8PSE1SFTTΛར༻͍ͯ͠Δ੩తΩϟογϡػೳը૾+4 $44ͳͲͷ੩తίϯςϯπΛରʹͨ͠Ωϟογϡػೳ8PSE1SFTTҎ֎Λར༻͍ͯ͠Δํ͚҆ఆͨ͠αΠτදࣔʹد༩ΩϟογϡϞʔυ
ͯ͢ͷίϯςϯπΛΩϟογϡͨ͠߹ɿ8PSE1SFTTͷϩάΠϯޙͷཧը໘͕Ωϟογϡ͞Εͨ߹ʹҙਤ͠ͳ͍ใ͕࿙ΕΔಠࣗձһ੍8ΞϓϦέʔγϣϯͰɺผͷձһͷϖʔδ͕ݟ͑ͯ͠·͏ϚωʔδυͳΩϟογϡػೳΛఏڙΩϟογϡϞʔυͳͥΩϟογϡϞʔυΛ͚Δඞཁ͕͋Δʁ
υϝΠϯͷઃఆʹԠͨ͡ػೳͷϋϯυϦϯά
طଘͷߏ3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ
طଘͷߏ3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπສαΠτ
υϝΠϯͷઃఆʹԠͯ͡ϓϩΩγઌΛมߋ͍ͨ͠3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFSPSίϯςϯπΩϟογϡػೳ0/ʁ0''ʁ
3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFSPSΩϟογϡͷϞʔυ81Ωϟογϡʁ੩తΩϟογϡʁυϝΠϯͷઃఆʹԠͯ͡ৼΔ͍Λ੍ޚ͍ͨ͠
εέʔϥϏϦςΟ
εέʔϥϏϦςΟαʔόΛՃ͚ͨͩ͠Ͱউखʹػೳ͕εέʔϧ͢ΔΠϯϑϥΞʔΩςΫνϟʹ͍ͨ͠$BDIF4FSWFS $BDIF4FSWFS $BDIF4FSWFS3FWFSTF1SPYZ
ߴՄ༻ੑ
ߴՄ༻ੑαʔόյΕΔյΕͯશࣗಈͰαʔϏεͷঢ়ଶ͕෮چ͢ΔΠϯϑϥΞʔΩςΫνϟʹ͍ͨ͠$BDIF4FSWFS $BDIF4FSWFS $BDIF4FSWFS3FWFSTF1SPYZ
ޮతͳΩϟογϡ
ޮతͳΩϟογϡ୯७ʹ$BDIF4FSWFSΛฒͯࢄ͢Δͱ3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS84FSWFSΩϟογϡώοτԼσΟεΫྖҬͷফඅFYBNQMFDPNFYBNQMFDPN
ޮతͳΩϟογϡυϝΠϯຖʹॲཧ͢Δ$BDIF4FSWFSΛݶఆ͍ͨ͠3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS84FSWFSΩϟογϡώοτ্σΟεΫྖҬͷઅFYBNQMFDPNFYBNQMFDPN
͜͜·Ͱͷ͓͞Β͍ΩϟογϡϞʔυ 81 ੩తΩϟογϡυϝΠϯͷઃఆʹԠͨ͡ػೳͷϋϯυϦϯάεέʔϥϏϦςΟߴՄ༻ੑޮతͳΩϟογϡίϯςϯπΩϟογϡͷػೳͱɹɹɹɹɹɹɹɹΠϯϑϥʹٻΊͨ͜ͱ
͜ΕΒΛಉ࣌ʹຬͨ͢ج൫Λ࣮͢Δඞཁ͕͋Δ
࣮લఏ ઃܭ ·ͱΊίϯςϯπΩϟογϡػೳͷ࣮
͜͜Ͱ#FFSڅਫ
ΩϟογϡϞʔυͷ࣮
ΩϟογϡϞʔυͷ࣮http {:proxy_cache_path /var/cache/nginx/cache levels=1:2 \keys_zone=zone1:1024m inactive=10m;proxy_cache_valid 200 10m;proxy_cache_valid 404 1m;server {:proxy_cache zone1;proxy_cache_key $proxy_scheme://$host$ $is_args$args;proxy_pass $proxy_scheme://${Origin Server};}}OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻
http {:proxy_cache_path /var/cache/nginx/cache levels=1:2 \keys_zone=zone1:1024m inactive=10m;proxy_cache_valid 200 10m;proxy_cache_valid 404 1m;server {:proxy_cache zone1;proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;proxy_pass $proxy_scheme://${Origin Server};}}OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻DBDIFͷอଘઌαΠζɺ༗ޮظؒΩϟογϡϞʔυͷ࣮
http {:proxy_cache_path /var/cache/nginx/cache levels=1:2 \keys_zone=zone1:1024m inactive=10m;proxy_cache_valid 200 10m;proxy_cache_valid 404 1m;server {:proxy_cache zone1;proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;proxy_pass $proxy_scheme://${Origin Server};}}OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻εςʔλείʔυʹΑͬͯอଘظؒΛม͑ΔΩϟογϡϞʔυͷ࣮
http {:proxy_cache_path /var/cache/nginx/cache levels=1:2 \keys_zone=zone1:1024m inactive=10m;proxy_cache_valid 200 10m;proxy_cache_valid 404 1m;server {:proxy_cache zone1;proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;proxy_pass $proxy_scheme://${Origin Server};}}OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻[POFΛͬͯΩϟογϡ͢ΔΩϟογϡϞʔυͷ࣮
http {:proxy_cache_path /var/cache/nginx/cache levels=1:2 \keys_zone=zone1:1024m inactive=10m;proxy_cache_valid 200 10m;proxy_cache_valid 404 1m;server {:proxy_cache zone1;proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;proxy_pass $proxy_scheme://${Origin Server};}}OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻Ωϟογϡͷอଘɾ୳ࡧͷΩʔΩϟογϡϞʔυͷ࣮
ΩϟογϡϞʔυͷ࣮http {:proxy_cache_path /var/cache/nginx/cache levels=1:2 \keys_zone=zone1:1024m inactive=10m;proxy_cache_valid 200 10m;proxy_cache_valid 404 1m;server {:proxy_cache zone1;proxy_cache_key $proxy_scheme://$host$request_uri$is_args$args;proxy_pass $proxy_scheme://${Origin Server};}}OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻Ωϟογϡ͕ͳ͍߹ɾ༗ޮظݶΕͷ߹ʹΞΫηε͢ΔΦϦδϯαʔό
ΩϟογϡϞʔυͷ࣮http {:server {:location /login {proxy_no_cache 1;proxy_cache_bypass 1;}}}OHJOYඪ४ͷOHY@IUUQ@QSPYZ@NPEVMFΛར༻Ωϟογϡ͠ͳ͍ΩϟογϡΛ୳ࡧ͠ͳ͍
Ωϟογϡػೳ:location / {:set $do_not_cache 0;if ($http_cookie ~ '(wordpress_|comment_author|wp-postpass)') {set $do_not_cache 1;}proxy_no_cache $do_not_cache;proxy_cache_bypass $do_not_cache;proxy_cache zone1;proxy_cache_key "$proxy_scheme://$host$request_uri$is_args$args";proxy_pass $proxy_scheme://${Origin Server};}DPPLJFʹಛఆͷจࣈྻ͕͋Δ࣌Ωϟογϡ͠ͳ͍81Ωϟογϡػೳͷྫ Ұ෦ɿ
ͬͯΔ͋͠Μ·໘ന͘ͳ͍Ͱ͢ΑͶʂ
Ҏ߱ͰɺϨϯαόʹ͓͚Δ՝Λόʔϯͱղܾ͢ΔιϑτΣΞͷΛ͍͖ͯ͠·͢
υϝΠϯʹԠͨ͡ػೳͷϋϯυϦϯάͷ࣮
Γ͍ͨ͜ͱ3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFSPSίϯςϯπΩϟογϡػೳ0/ʁ0''ʁΩϟογϡͷϞʔυ81Ωϟογϡʁ੩తΩϟογϡʁ
ͲͷΑ͏ʹ࣮͢Δ͔ʁ
طଘͷߏΛ͏গ͠ৄ͘͠3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ
3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπඦطଘͷߏΛ͏গ͠ৄ͘͠
3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπສαΠτطଘͷߏΛ͏গ͠ৄ͘͠
3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπසൟʹ૿ݮ͢ΔطଘͷߏΛ͏গ͠ৄ͘͠
Ϩϯλϧαʔόͷ߹3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%େྔͷ૿ݮ͢ΔυϝΠϯΛͲͷΑ͏ʹϓϩΩγ͍ͯ͠Δ͔ʁ
େྔυϝΠϯͷϓϩΩγ3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπສαΠτҎ্ͷϓϩΩγͷઃఆΛॻ͘ͷݱ࣮తͰͳ͍
େྔυϝΠϯͷಈతͳϓϩΩγ3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπOHJOYOHY@NSVCZ
ฐࣾͷ!NBUTVNPUPSZ͕։ൃ͍ͯ͠ΔOHJOYʹΈࠐΉ͜ͱͰϓϩηεͷىಈϦΫΤετͷλΠϛϯάͰNSVCZͷεΫϦϓτΛ࣮ߦͰ͖ΔNSVCZΈࠐΈ͚ͷܰྔ3VCZ࣮OHY@NSVCZ
େྔυϝΠϯͷಈతͳϓϩΩγ3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπυϝΠϯͱ84FSWFSͷඥ͚ͮσʔλϕʔευϝΠϯTJUFBDPNαʔό84FSWFSOHJOYOHY@NSVCZ
େྔυϝΠϯͷಈతͳϓϩΩγ3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπυϝΠϯͱ84FSWFSͷඥ͚ͮσʔλϕʔευϝΠϯTJUFBDPNαʔό84FSWFSOHJOYOHY@NSVCZNSVCZΛͬͯίϯςϯπΩϟογϡػೳͷϋϯυϦϯάΛߦ͏ʂ
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFSPSίϯςϯπΩϟογϡػೳ0/ʁ0''ʁΩϟογϡͷϞʔυ81Ωϟογϡʁ੩తΩϟογϡʁίϯςϯπΩϟογϡػೳ0/ʁ0''ʁΩϟογϡͷϞʔυ81Ωϟογϡʁ੩తΩϟογϡʁ3FWFSTF1SPYZ84FSWFS$BDIF4FSWFS
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFS σʔλϕʔευϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFS σʔλϕʔευϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81ΩϟογϡͷϞʔυ81Ωϟογϡʁ੩తΩϟογϡʁΩϟογϡͷϞʔυ81Ωϟογϡʁ੩తΩϟογϡʁ
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFS σʔλϕʔεΩϟογϡͷϞʔυ81PS੩తʹΑͬͯڍಈΛม͍ͨΩϟογϡର֎ظݶΕͷ߹ʹΞΫηε͢ΔΦϦδϯαʔόͷใυϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFS σʔλϕʔεOHY@NSVCZυϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFS σʔλϕʔευϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81OHY@NSVCZOHY@NSVCZΛ͑ͬͱεϚʔτʹͰ͖Δ
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFS σʔλϕʔεOHY@NSVCZυϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ813FWFSTF1SPYZσʔλϕʔευϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81%#͔Βऔಘͨ͠σʔλΛ
ػೳͷϋϯυϦϯά3FWFSTF1SPYZ84FSWFS*OUFSOFU84FSWFS IUUQTTJUFBDPN4JUF" 4JUF# 4JUF$ 4JUF%͓٬༷ͷίϯςϯπ$BDIF4FSWFS σʔλϕʔεOHY@NSVCZυϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81σʔλϕʔευϝΠϯTJUFBDPNαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ813FWFSTF1SPYZ$BDIF4FSWFS%#͔Βऔಘͨ͠σʔλΛNSVCZͰIUUQϔομʹ༩ͯ͠ൖ)551ϔομ
ػೳͷϋϯυϦϯά3FWFSTF1SPYZOHJOYOHY@NSVCZ84FSWFS 84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%$BDIF4FSWFSIUUQTTJUFBDPNσʔλϕʔεαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ81
ػೳͷϋϯυϦϯά3FWFSTF1SPYZOHJOYOHY@NSVCZ84FSWFS 84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%$BDIF4FSWFSIUUQTTJUFBDPNσʔλϕʔεIUUQϔομΛՃαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ819-0-*10161453&".8FC4FSWFS9-0-*101$"$)&5:1&81h = Nginx::Headers_in.newh['X-LOLIPOP-UPSTREAM'] = 'Web Server1'h['X-LOLIPOP-CACHE-TYPE'] = 'WP'࣮ࡍ%#͔Βऔಘͨ͠
ػೳͷϋϯυϦϯά3FWFSTF1SPYZOHJOYOHY@NSVCZ84FSWFS 84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%$BDIF4FSWFSIUUQTTJUFBDPNσʔλϕʔεαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ819-0-*10161453&".8FC4FSWFS9-0-*101$"$)&5:1&81if ($http_x_lolipop_cache_type = "WP") {# WPΩϟογϡػೳͷڍಈ:}IUUQϔομΛՃIUUQϔομΛͱʹΩϟογϡػೳͷڍಈΛมߋ
ػೳͷϋϯυϦϯά3FWFSTF1SPYZOHJOYOHY@NSVCZ84FSWFS 84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%$BDIF4FSWFSIUUQTTJUFBDPNσʔλϕʔεIUUQϔομΛͱʹϓϩΩγαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ819-0-*10161453&".8FC4FSWFS9-0-*101$"$)&5:1&81IUUQϔομΛͱʹΩϟογϡػೳͷڍಈΛมߋproxy_pass $proxy_scheme://$http_x_lolipop_upstream;IUUQϔομΛՃ
ػೳͷϋϯυϦϯά3FWFSTF1SPYZOHJOYOHY@NSVCZ84FSWFS 84FSWFS4JUF" 4JUF# 4JUF$ 4JUF%$BDIF4FSWFSIUUQTTJUFBDPNσʔλϕʔεIUUQϦΫΤετϔομΛՃIUUQϦΫΤετϔομΛͱʹϓϩΩγαʔό84FSWFSΩϟογϡPOΩϟογϡλΠϓ819-0-*10161453&".8FC4FSWFS9-0-*101$"$)&5:1&81IUUQϦΫΤετϔομΛͱʹΩϟογϡػೳͷڍಈΛมߋproxy_pass $proxy_scheme://$http_x_lolipop_upstream;NSVCZͰσʔλϕʔε͔Βऔಘͨ͠ΛIUUQϔομʹຒΊࠐΉ$BDIF4FSWFSଆຒΊࠐ·ΕͨIUUQϔομΛࢀর͚ͩͰυϝΠϯຖͷৼΔ͍ͷ੍ޚ͕ՄೳIUUQϔομʹΑΔใͷͳͷͰɺ$BDIF4FSWFS௨ৗͷOHJOYͰΑ͍ͷͰγϯϓϧ
3FWFSTF1SPYZOHJOYOHY@NSVCZσʔλϕʔεϦΫΤετύϑΥʔϚϯεେৎʁ
ύϑΥʔϚϯεྼԽΛ࠷খݶʹ͑ΔςΫχοΫΛ͝հ͠·͢ʂ
Ωϟογϡͷಋೖ
Ωϟογϡͷಋೖ3FWFSTF1SPYZ.Z42-ϦΫΤετ3FEJTOHJOYOHY@NSVCZ
Ωϟογϡͷಋೖ3FWFSTF1SPYZ.Z42-ϦΫΤετ3FEJTOHJOYOHY@NSVCZᶃᶃ3FEJT͔ΒใΛऔಘ
Ωϟογϡͷಋೖ3FWFSTF1SPYZ.Z42-ϦΫΤετ3FEJTOHJOYOHY@NSVCZᶃᶄᶃ3FEJT͔ΒใΛऔಘᶄᶃͰଘࡏ͠ͳ͚Ε.Z42-͔ΒใΛऔಘ
Ωϟογϡͷಋೖ3FWFSTF1SPYZ.Z42-ϦΫΤετ3FEJTOHJOYOHY@NSVCZᶃᶅᶄᶃ3FEJT͔ΒใΛऔಘᶄᶃͰଘࡏ͠ͳ͚Ε.Z42-͔ΒใΛऔಘᶅᶄͰऔಘͨ͠ใΛ࣍ճϦΫΤετͷͨΊʹ3FEJTʹॻ͖ࠐΈ
ϖύϘͰɺσʔλετΞΛ֊Խͯ͠Λ͍͍ײ͡ʹ͢ΔNSCHFNΛެ։͍ͯ͠·֦͢ுػߏ 3VCZͰ͍͏HFN
NSVCZNTEMPDBMNFNDBDIFΠϯϝϞϦ,743FEJT .Z42-ॲཧίετ͕͍ॱʹGFUDI࣍ճҎ߱ͷGFUDIͷͨΊʹΩϟογϡ.VMUJ4UBHF%BUBTUPSFhttps://github.com/pepabo/mruby-msdNTE͕͍͍ײ͡ʹߴͳσʔλετΞ͔ΒGFUDI͢Δ
NSVCZNTEredis = Msd::Store::Redis.newmysql = Msd::Store::MySQL.new('SELECT host FROM table WHERE domain = ?','localhost', 'root', 'password', 'DBName')msd = Msd::Client.newmsd.configure do |c|c.stores = [redis, mysql]endmsd.fetch('site-a.com')# => "Web Server1"
NSVCZNTEredis = Msd::Store::Redis.newmysql = Msd::Store::MySQL.new('SELECT host FROM table WHERE domain = ?','localhost', 'root', 'password', 'DBName')msd = Msd::Client.newmsd.configure do |c|c.stores = [redis, mysql]endmsd.fetch('site-a.com')# => "Web Server1"ଓ
NSVCZNTEredis = Msd::Store::Redis.newmysql = Msd::Store::MySQL.new('SELECT host FROM table WHERE domain = ?','localhost', 'root', 'password', 'DBName')msd = Msd::Client.newmsd.configure do |c|c.stores = [redis, mysql]endmsd.fetch('site-a.com')# => "Web Server1"ଓσʔλετΞΛొ
NSVCZNTEredis = Msd::Store::Redis.newmysql = Msd::Store::MySQL.new('SELECT host FROM table WHERE domain = ?','localhost', 'root', 'password', 'DBName')msd = Msd::Client.newmsd.configure do |c|c.stores = [redis, mysql]endmsd.fetch('site-a.com')# => "Web Server1"ଓσʔλετΞΛొσʔλΛΩϟογϡͭͭ͠GFUDI͢Δ
3FWFSTF1SPYZOHJOYOHY@NSVCZ.Z42-3FEJTϦΫΤετϦΫΤετຖʹίωΫγϣϯΛுΔͷίετ͕ߴ͍ίωΫγϣϯ
ίωΫγϣϯͷ͍ճ͠
OHY@NSVCZʹNSVCZͷϑοΫϙΠϯτ͕ଘࡏ͢Δhttps://github.com/matsumotory/ngx_mruby/tree/master/docs/directivesmruby_init_worker /path/to/init.rb;mruby_init_worker_code "# ίʔυ";mruby_set $variable /path/to/variable.rb;mruby_access_handler /path/to/access.rb;mruby_access_handler /path/to/access.rb cache;nginx.conf# Workerϓϩηεىಈ࣌# cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ# _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ# mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ# ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔ
ίωΫγϣϯΛ͍ճ͢https://github.com/matsumotory/ngx_mruby/tree/master/docs/directivesmruby_init_worker /path/to/init.rb;mruby_init_worker_code "# ίʔυ";mruby_set $variable /path/to/variable.rb;mruby_access_handler /path/to/access.rb;mruby_access_handler /path/to/access.rb cache;nginx.conf# Workerϓϩηεىಈ࣌# cacheΦϓγϣϯΛ͚ͭΔͱnginxىಈ࣌ʹmrubyΛόΠτίʔυ# _code ͷσΟϨΫςΟϒΠϯϥΠϯͰmrubyͷίʔυΛهड़Ͱ͖Δ# mrubyͷ࣮ߦ݁ՌΛnginxͷมʹ֨ೲ͢Δ# ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔmruby_init_worker /path/to/init.rb;# Workerϓϩηεىಈ࣌# ϦΫΤετ։࢝࣌ʹ࣮ߦ͞ΕΔmruby_access_handler /path/to/access.rb;
OHJOY3FEJT8PSLFSىಈ࣌ʹ3FEJTͱଓ͠ίωΫγϣϯΛอଘ͢Δ
OHJOYXPSLFS3FEJTίωΫγϣϯ8PSLFSىಈ࣌ʹ3FEJTͱଓ͠ίωΫγϣϯΛอଘ͢Δ8PSLFSϓϩηεͷىಈ
OHJOYXPSLFS3FEJTmruby_init_worker_code "Userdata.new.redis = Redis.new('127.0.0.1', 6379)";ίωΫγϣϯ8PSLFSىಈ࣌ʹ3FEJTͱଓ͠ίωΫγϣϯΛอଘ͢Δ8PSLFSϓϩηεͷىಈNSVCZVTFSEBUBͱ͍͏NSCHFNΛͬͯɺNSVCZεΫϦϓτ͔ΒࢀরͰ͖ͳ͍NSVCZͷάϩʔόϧมʹ3FEJTͷίωΫγϣϯΛ֨ೲൺֱత҆શʹάϩʔόϧมʹΦϒδΣΫτΛ֨ೲͰ͖Δ
OHJOYXPSLFS3FEJT8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏
OHJOYXPSLFS3FEJT8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏ϦΫΤετΞΫηεmruby_access_handler_code "Userdata.new.redis.get('hoge')";
OHJOYXPSLFS3FEJT8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏ϦΫΤετΞΫηεmruby_access_handler_code "Userdata.new.redis.get('hoge')";8PSLFSىಈ࣌ʹଓͨ͠ίωΫγϣϯΛऔΓग़ͯ͠ɺར༻͢ΔɻNSVCZͷΠϯλϓϦλ͕8PSLFSͰ͍ճ͞Ε͍ͯΔͨΊΞΫηε͕ՄೳͦͷͨΊɺผͷ8PSLFS͔ΒผͷΠϯλϓϦλͳͷͰࢀরͰ͖ͳ͍
OHJOYXPSLFS3FEJT8PSLFSىಈ࣌ʹଓͨ͠3FEJTͷίωΫγϣϯΛ͏ϦΫΤετΞΫηεmruby_access_handler_code "Userdata.new.redis.get('hoge')";ίωΫγϣϯΛுͬͨޙʹ3FEJT͕࠶ىಈ͞ΕΔͳͲɺίωΫγϣϯ͕அ͞ΕΔ͜ͱΛఆͯ͠࠶ଓॲཧͷ࣮ඞཁɻNSVCZNTE࣮ࡁΈ
εέʔϥϏϦςΟߴՄ༻ੑ
εέʔϥϏϦςΟߴՄ༻ੑ໘ͳखॱͳ͘؆୯ɺࣗಈʹ
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSϓϩΩγ͕ਖ਼ৗͳαʔόΛೝࣝͯ͠ಈతʹϓϩΩγઌΛܾΊΔ
$POTVMOHY@NSVCZCZ)BTIJ$PSQ
)BTIJ$PSQ͕։ൃ͍ͯ͠ΔιϑτΣΞػೳɿαʔϏεσΟεΧόϦϔϧενΣοΫͳͲͳͲDPOTVM
DPOTVMͷΠϕϯτʹൃՐͯ͠ɺ༧Ί༻ҙͨ͠ςϯϓϨʔτΛͬͯϑΝΠϧΛੜͰ͖Δɻαʔόͷ૿ݮϔϧενΣοΫͷ݁ՌDPOTVMUFNQMBUF
$POTVMΛ͏ͱͲ͏ͳΔʁ
3FWFSTF1SPYZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFS$POTVMΛ͏ͱͲ͏ͳΔʁ
3FWFSTF1SPYZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFS$POTVMͰTFSJWDFΛఆٛϔϧενΣοΫTFSWJDFΛఆٛͯ͠ϔϧενΣοΫ͕Ͱ͖Δ{"service": {"name": "cache-server","checks": [{"script": "ϔϧενΣοΫίϚϯυ",}]}}
3FWFSTF1SPYZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFS# curl -s http://localhost:8500/v1/health/service/ \cache-server | jq '.[].Node.Node'"cache-server-1""cache-server-2"TFSWJDFDBDIFTFSWFSϔϧενΣοΫDPOTVM"1*ʹΞΫηε͢ΔͱαʔϏεʹଐ͢ΔϊʔυΛಘΔ͜ͱ͕Ͱ͖ΔɻϔϧενΣοΫ݁ՌಘΔ͜ͱ͕Ͱ͖ΔɻαʔϏεʹଐ͢ΔϊʔυͷҰཡϔϧενΣοΫ݁ՌΛಘΒΕΔ
DPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢Δ
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢ΔDPOTVMUFNQMBUF
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUF{{ range service "cache-server|passing" }}- {{ .Address }}{{ end }}servers.yml.ctmplDPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢ΔϩʔυςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUF{{ range service "cache-server|passing" }}- {{ .Address }}{{ end }}servers.yml.ctmplTFSWJDF ϔϧενΣοΫঢ়ଶOPEFͷ*1ΞυϨεDPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢ΔϩʔυςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUF{{ range service "cache-server|passing" }}- {{ .Address }}{{ end }}- cache-server-1ͷIPΞυϨε- cache-server-2ͷIPΞυϨεservers.yml.ctmplservers.ymlDPOTVMUFNQMBUFΛͬͯɺಈతʹϑΝΠϧΛੜ͢ΔϩʔυऔಘੜςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUF{{ range service "cache-server|passing" }}- {{ .Address }}{{ end }}- cache-server-1ͷIPΞυϨε- cache-server-2ͷIPΞυϨε- cache-server-3ͷIPΞυϨεservers.yml.ctmplservers.ymlαʔόΛ૿ઃͨ͠ͱ͖DPOTVMDBDIFTFSWFSςϯϓϨʔτϑΝΠϧ
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUF{{ range service "cache-server|passing" }}- {{ .Address }}{{ end }}- cache-server-1ͷIPΞυϨε- cache-server-2ͷIPΞυϨεservers.yml.ctmplservers.ymlαʔό͕μϯͨ͠ͱ͖ϔϧενΣοΫςϯϓϨʔτϑΝΠϧ
αʔόͷ૿ݮ࣌ʹਖ਼ৗͳαʔόҰཡΛಈతੜ͢Δ͜ͱ͕Ͱ͖ͨʂ
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSNSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉDPOTVMUFNQMBUFmruby_init_worker_code "servers = YAML.load(File.open('servers.yml').read)Userdata.new.servers = servers";nginx.confDPOTVMDBDIFTFSWFS
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUFmruby_init_worker_code "servers = YAML.load(File.open('servers.yml').read)Userdata.new.servers = servers";nginx.confDPOTVMDBDIFTFSWFSXPSLFSϓϩηεىಈ࣌ʹੜ͞Εͨ:".-Λϩʔυ*1ΞυϨεͷྻΛอଘNSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
3FWFSTF1SPYZOHJOYXJUIOHY@NSVCZDPOTVMDPOTVMDBDIFTFSWFSDPOTVMDBDIFTFSWFSTFSWJDFDBDIFTFSWFSDPOTVMUFNQMBUFmruby_init_worker_code "servers = YAML.load(File.open('servers.yml').read)Userdata.new.servers = servers";nginx.confDPOTVMDBDIFTFSWFSXPSLFSϓϩηεىಈ࣌ʹੜ͞Εͨ:".-Λϩʔυ*1ΞυϨεͷྻΛอଘDPOTVMUFNQMBUFͰϑΝΠϧੜޙʹOHJOYSFMPBEΛ࣮ࢪͯ͠ϩʔυ͢ΔʂOHJOYSFMPBENSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉ
NSVCZͷੈքʹϓϩΩγઌͷαʔόҰཡΛ͢͜ͱ͕Ͱ͖ͨʂ
NSVCZͰಈతʹ6QTUSFBNΛܾఆ͢Δ
NSVCZͰಈతʹ6QTUSFBNΛܾఆ͢Δ3FWFSTF1SPYZDBDIFTFSWFSDBDIFTFSWFS DBDIFTFSWFS 8FC4FSWFSίϯςϯπΩϟογϡػೳແޮ࣌
NSVCZͰಈతʹ6QTUSFBNΛܾఆ͢Δ3FWFSTF1SPYZDBDIFTFSWFSDBDIFTFSWFS DBDIFTFSWFS 8FC4FSWFSίϯςϯπΩϟογϡػೳ༗ޮ࣌ͲΕ͔̍
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Servernginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Serverμϛʔͷ6QTUSFBNOHY@NSVCZͰॻ͖͑Δnginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web ServerOHJOYͷมʹNSVCZͷ࣮ߦ݁ՌΛ֨ೲ͢Δnginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Servermruby_init_worker_code "servers = YAML.load(File.open('servers.yml').read)Userdata.new.servers = servers";ىಈ࣌ʹऔಘͨ͠$BDIF4FSWFSҰཡnginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Serverଓઌͷϙʔτ൪߸ nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web ServerμϛʔͰఆٛͨ͠6QTUSFBNnginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server6QTUSFBNͷαʔόΛॻ͖͑Δnginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server6QTUSFBNͷαʔόΛॻ͖͑ΔϥϯμϜʹΩϟογϡαʔόΛ1ฦ͢nginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server࠷ޙʹࢀরͨ͠ͷ͕มʹ֨ೲ͞ΕΔnginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web Server࠷ޙʹࢀরͨ͠ͷ͕มʹ֨ೲ͞ΕΔϓϩΩγ͢Δnginx.conf
NSVCZΛΈ߹ͤͯಈతʹઃఆΛಡΈࠐΉupstream dynamic_cache_server {server 127.0.0.1:80;mruby_upstream_keepalive 64;}mruby_set_code $upstream ":if result.enable_contents_cache?servers = Userdata.new.serversport = Nginx::Connection.new.local_portindex = SecureRandom.random_number(servers.size)upstream = Nginx::Upstream.new("dynamic_cache_server")upstream.server = "#{servers[index]}:#{port}""dynamic_cache_server"elseresult.upstreamend";proxy_pass $upstream;# DB͔Βऔಘͨ͠ίϯςϯπΩϟογϡػೳͷར༻༗ແ# DB͔Βऔಘͨ͠υϝΠϯʹඥͮ͘Web ServerίϯςϯπΩϟογϡػೳ͕ແޮͷ߹%#͔Βऔಘͨ͠8FC4FSWFSΛฦ͢nginx.conf
DPOTVMͱOHY@NSVCZͷΈ߹ͤͰαʔόͷ૿ݮʹ߹ΘͤͯࣗಈతʹϓϩΩγઌΛܾఆ͢ΔΈ͕Ͱ͖ͨ
υϝΠϯຖʹΩϟογϡαʔόΛݶఆ͍͚ͨͩ͠Ͱͳ͘ʴαʔόͷεέʔϧʹࣗಈରԠ͍ͨ͠ʴՄ༻ੑΛҡ͍࣋ͨ͠
NSVCZͰ؆୯ͳΞϧΰϦζϜΛ࣮
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPN
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPNF Y B N Q M F D P NυϝΠϯͷઌ಄͔Β̑จࣈநग़
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPNF Y B N Q M F D P N ਐͷ"4$**ίʔυΛऔಘυϝΠϯͷઌ಄͔Β̑จࣈநग़
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPNF Y B N Q M F D P N ਐͷ"4$**ίʔυΛ͢υϝΠϯͷઌ಄͔Β̑จࣈநग़
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPNF Y B N Q M F D P N <> <> <> <> <> <>"SSBZDPOTVMUFNQMBUFʹΑΔ:".-ੜˠ:".-MPBE ˠ"SSBZ
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPNF Y B N Q M F D P N <> <> <> <> <> <>"SSBZMFOHUI
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPNF Y B N Q M F D P N <> <> <> <> <> <>"SSBZ
αʔόͷ૿ݮ͕ൃੜͨ͠߹
3FWFSTF1SPYZ$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFS$BDIF4FSWFSFYBNQMFDPNF Y B N Q M F D P N <> <> <> <> <> <>"SSBZMFOHUIDPOTVMUFNQMBUFͰઃఆϑΝΠϧ͕࠶ੜOHJOYSFMPBE
NSVCZΛͬͨ؆୯ͳΞϧΰϦζϜͷ࣮ʹΑͬͯޮతͳΩϟογϡΛ࣮ݱͨ͠ʂ
·ͱΊ
·ͱΊίϯςϯπΩϟογϡػೳΛϦϦʔεͨ͠ંฦ͠Ͱߴɾઃఆ؆୯NSVCZΛ׆༻ͯ͠େنϨϯαόڥʹඞཁͳཁ݅Λຬͨͨ͠NSVCZNTE NSVCZVTFSEBUBΛ༻͍ͨύϑΥʔϚϯε্5JQTΛհͨ͠DPOTVMͱNSVCZΛΈ߹ͤͯɺαʔόͷঢ়ଶʹ߹ΘͤͯಈతʹมԽ͢ΔΠϯϑϥΞʔΩςΫνϟΛ࣮ݱͨ͠
܅ϖύϘͰಇ͔ͳ͍͔ʁ࠷৽ͷ࠾༻ใΛνΣοΫˠ !QC@SFDSVJU
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠