(μλ°©ν₯ νλ‘μ) nginx μλ²κ° μΆ©λνλ λ¬Έμ κ° λ°μνμ΅λλ€. κ·Έλ€μ μμ²μ μμ ν μλ΅νμ§ μμΌλ©° μ€μ€λ‘ μ΄ μνλ₯Ό λ²μ΄λμ§ μλ κ² κ°μ΅λλ€. μ΄λ¬ν μλ²λ λ§μ μμ μμ²(ν루 500λ§ μ΄μ)μ μ²λ¦¬ν©λλ€.
μ§λ λ©°μΉ λμ λλ μ½κ°μ μμ€μ μ μκ³ λͺ¨λν°λ§μ ν΅ν΄ μ΄μ λν΄ κ²½κ³ λ₯Ό λ°μ λλ§λ€ Docker μΈμ€ν΄μ€λ₯Ό μλμΌλ‘ λ€μ μμνμ§λ§ nginxκ° μ¬μ ν μλ΅νλμ§ νμΈνλ λμ°λ―Έ cron μ€ν¬λ¦½νΈλ₯Ό μ μ리μ λ°°μΉνκΈ°λ‘ κ²°μ νμ΅λλ€. λ¬Έμ κ° μλ κ²½μ° κ°λ μλ₯Ό ν΅ν΄ λ€μ μμν©λλ€.
μ²μμ Docker 컨ν μ΄λλ₯Ό λ€μ μμνκΈ° λλ¬Έμ μ€μ λ‘ λλ²κΉ μ 보λ₯Ό μ»μ§ λͺ»νμ΅λλ€. λ‘κΉ μ΄ μ€μ§λ©λλ€. κ·Έλ¬λ 컨ν μ΄λ λ΄λΆμμ nginxλ₯Ό λ€μ μμνλλ‘ λ³κ²½ν ν λ‘κ·Έμ λ€μμ΄ νμλ©λλ€.
2017/02/01 01:14:16 [alert] 489#0: worker process 501 exited on signal 9
2017/02/01 01:14:16 [alert] 489#0: shared memory zone "auto_ssl" was locked by 501
2017/02/01 01:14:16 [alert] 489#0: worker process 502 exited on signal 9
λλ Googleμ μμκ³ λ΄κ° μ°Ύμ μμλ μ μΌν μ°Έμ‘°λ https://github.com/18F/api.data.gov/issues/325μ λλ€ . κ·Έλ¬λ λ§λ£κ° μ μ©λ κ²μ²λΌ 보μ΄μ§λ§ μ΄κ²μ μλ κ² κ°μ΅λλ€. (λμ λͺ¨λν°λ§μΌλ‘ μΈν΄) μ΅κ·Όμ μ½ 7μκ°μ λ€μ΄νμμ΄ λ°μνκΈ° λλ¬Έμ μ€μ μμ μ νκ³ μμ΅λλ€.
λμΌν Docker 컨ν μ΄λλ₯Ό μ¬μ©νλλΌλ μ΄ λ²κ·Έλ₯Ό λ‘컬μμ μ ν μ¬νν μ μλ€λ μ μ μΈκΈν΄μΌ ν©λλ€.
μ§κΈμ μλ μ¬μμ μ€ν¬λ¦½νΈκ° λ¬Έμ λ₯Ό ν΄κ²°νμ§λ§ μμ΄λμ΄κ° μλ μ¬λμ΄ μλμ§ νμΈνλ κ²μ΄ μ’μ΅λλ€. μΆκ° λ‘κΉ μ μΌκ³ λλ²κ·Έ λ‘κ·Έλ₯Ό μλνκ² λμ΄ κΈ°μ©λλ€.
μ, μ΄λ‘ μΈν΄ μλΉμ€κ° μ€λ¨λμλ€λ μμμ λ£κ² λμ΄ μ κ°μ λλ€!
λΆννλ μλΉν μμ νΈλν½μ μ»λ μ°λ¦¬ μ€μΉμμ μ΄μ κ°μ κ²μ λ³Έ μ μ΄ μμ΅λλ€(λΉμ μ΄ μΈκΈν μ§λ 3μμ μ¬κ±΄ μ΄ν). κ·Έλ¬λ #29μ λ³΄κ³ λ μ΄μ μ μ¬ν λ λ€λ₯Έ μ μ¬ν λ¬Έμ κ° μμμ΅λλ€. μ¬κΈ°μμ μ°λ¦¬λ κ΄λ ¨λμμ μ μλ λ¬Έμ λ₯Ό μμ νμ§λ§ λ¬Έμ λ₯Ό μμ ν μ€λͺ νμ§λ μμμ μ μμ΅λλ€. κ·Έλ¬λ ν΄λΉ λ¬Έμ λ κ΄λ ¨μ΄ μμ μλ μμ΅λλ€(λ±λ‘μ΄ λ°μν μμ μλ§ ν΄λΉλ¨).
μ΄ λ¬Έμ λ₯Ό λλ²κΉ νλ λ° λμμ΄ λλ μ μμ κ°μ¬λ립λλ€. λͺ κ°μ§ μ΄κΈ° μ§λ¬Έμ΄ μμ΅λλ€.
worker_processes
μ€μ )?lua-resty-auto-sslμ luarocksμ 0.10.3-1μ
λλ€.
μ°λ¦¬λ OpenResty 1.11.2.2λ₯Ό μ¬μ©νκ³ μμ΅λλ€.
nginx version: openresty/1.11.2.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
built with OpenSSL 1.0.2h 3 May 2016
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.0 --add-module=../echo-nginx-module-0.60 --add-module=../xss-nginx-module-0.05 --add-module=../ngx_coolkit-0.2rc3 --add-module=../set-misc-nginx-module-0.31 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.06 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.7 --add-module=../ngx_lua_upstream-0.06 --add-module=../headers-more-nginx-module-0.32 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.17 --add-module=../redis2-nginx-module-0.13 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.14 --add-module=../rds-csv-nginx-module-0.07 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-http_ssl_module --with-http_perl_module --with-http_v2_module --with-http_secure_link_module --add-module=/nginx-build/openresty-1.11.2.2/../testcookie-nginx-module --add-module=/nginx-build/openresty-1.11.2.2/../lua-upstream-cache-nginx-module --add-module=/nginx-build/openresty-1.11.2.2/../nginx-module-vts --with-openssl=/openssl
νμ¬ νμΌ μμ€ν
μ κ° μλ²κ° μ²λ¦¬νλ νμ λλ©μΈμ΄ λΆλ¦¬λμ΄ μμ΅λλ€.
μΆ©λμ΄ λ°μν λ 3μκ°μμ μ’μ 3μΌκΉμ§ μμ ν 무μμλ‘ λ³΄μ
λλ€.
nginx atmμ λ€μ λ‘λνμ§ μκ³ λ€μ μμνκΈ°λ§ νλ©΄ λ©λλ€. νμ§λ§ μ΄κ²μ μλνκ³ μ΄κ²μ΄ μλνλμ§ νμΈνκ² μ΅λλ€.
μ²μμλ μμ
μ 1λͺ
μ μ¬μ©νμ§λ§ λ¬Έμ κ° λ°μνμ λ μ΄λ₯Ό 2κ°λ‘ λλ € μ°¨μ΄κ° μλμ§ νμΈνμ΅λλ€.
λ€μ λΉ OpenResty λͺ¨λ μ¬μ©:
μμ§ μ΄ νλ‘μ νΈ μ΄μΈμ κ΅¬μ± μ½λμμ λ€λ₯Έ Luaλ₯Ό μ¬μ©νκ³ μμ§ μμ΅λλ€.
νμ μ‘°μΉκ° λ¦μ΄μ Έμ μ£μ‘ν©λλ€! λͺ κ°μ§ λ κ²μν νμ λ¬΄μ¨ μΌμ΄ μΌμ΄λ μ μλμ§μ λν λͺ κ°μ§ μ΄λ‘ μ΄ μμ΅λλ€.
μμ€ν μμ€ λ‘κ·Έμ λ©λͺ¨λ¦¬ λΆμ‘± λλ oom-killerμ λν λ΄μ©μ΄ μμ΅λκΉ? nginxμμ λ©λͺ¨λ¦¬ μ¦κ° λλ λ©λͺ¨λ¦¬ λμλ₯Ό λνλΌ μ μλ μ΄λ¬ν μλ²μ λν λ€λ₯Έ λͺ¨λν°λ§μ΄ μμ΅λκΉ? λλ μ°λ¦¬κ° λ€λ₯Έ Nginxμ λͺ¨λμ μΌλΆλ μν μ ν μ μλ€λ©΄ κΆκΈνλ€μ κ·Έλμ, μ°λ¦¬ 루μ - resty - μλ SSL μ€μΉμ μ΄λ€ λ©λͺ¨λ¦¬ λμλ₯Ό λ³Έ μ μ΄ μκ°νμ§ μλλ€ (μ΄μ΄ μΈκΈ μ lua-upstream-cache-nginx-moduleμ λ©λͺ¨λ¦¬ λμ).
μ£μ‘ν©λλ€. @GUI μμ μ νΈ 9μμ μ¬λ§ν κ²μ΄ λ²κ·Έμ μ°κ²°λμ΄ μμ§ μΆμμ§λ§ λ¬Έμ μ λμνκΈ° μν΄ μλμ μΌλ‘ nginx νλ‘μΈμ€λ₯Ό μ’ λ£νμ΅λλ€. μ΄ μλ²μ λ©λͺ¨λ¦¬μλ λ¬Έμ κ° μμΌλ©° μ½ 2GBμ λ©λͺ¨λ¦¬κ° μμΌλ©° μ€μ λ‘λ μλμ΄ μ¬μ©λκ³ λλ¨Έμ§λ λλΆλΆ μΊμλ©λλ€. dmesgμμ OOM ν¬μ΄ μμ΅λλ€.
λ μ΄μ μ¬μ©λμ§ μλ lua-upstream-cache-nginx-module λ° μ κ±°λ pagespeed λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μΌλΆ λͺ¨λμ μ κ±°νμ§λ§ λμμ΄ λμ§ μλ κ²μΌλ‘ 보μ λλ€.
λμμ΄ λ μ μλ μ€λ₯ νμ΄ λͺ κ° λ μμ΅λλ€. 곧 μλ²μμ κ°μ Έμ€λλ‘ νκ² μ΅λλ€.
@ajmgh : κ΄λ ¨μ΄ μλμ§ μμ ν νμ ν μλ μμ§λ§ ꡬμ±λ lua_shared_dict
λ©λͺ¨λ¦¬ ν¬κΈ°κ° λ무 μμ κ²½μ° μ΄μν μ€λ₯λ‘ μ΄μ΄μ§ μ μλ λͺ κ°μ§ μ μ¬μ μΈ λ¬Έμ λ₯Ό μΆμ ν κ² κ°μ΅λλ€. https://github.com /GUI/lua-resty-auto-ssl/issues/48#issuecomment -294397379
λ°λΌμ μμ€ν
μ μΌλ§λ λ§μ μΈμ¦μκ° μκ³ nginx ꡬμ±μ μΌλ§λ ν° lua_shared_dict auto_ssl
κ° κ΅¬μ±λμ΄ μλμ§ μκ³ μμ΅λκΉ? 0.10.3 μ΄νλ‘ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ λͺ κ°μ§ μ
λ°μ΄νΈκ° μμΌλ―λ‘(μ΄μ΄ μ’λ€λ©΄) μ΅μν λ λμ μ€λ₯ μ²λ¦¬ λ° λ©μμ§λ₯Ό μ 곡νλ―λ‘ κ°λ₯νλ©΄ v0.10.6μΌλ‘ μ
κ·Έλ μ΄λλ₯Ό μλν μλ μμ΅λλ€.
λλ λκ°μ μ€λ₯μ μ§λ©΄νκ³ μμ΅λλ€.
lua-resty-auto-sslμ λ²μ 0.10.6-1λ‘ μ
λ°μ΄νΈνκ³ lua_shared_dict auto_ssl_settings
λ₯Ό 1000mλ‘ λ립λλ€(64kλ‘ μ€μ λκΈ° μ ).
lua_shared_dict auto_ssl
λ λμΌνκ² μ μ§: 1000m
μ΄λ¬ν λ³κ²½μΌλ‘ μ΄ λ¬Έμ κ° ν΄κ²°λλμ§ νμΈνκΈ°λ§ νλ©΄ λ©λλ€./
@ajmgh λ¬Έμ λ₯Ό ν΄κ²°νμ ¨λμ?
@aiev auto_ssl_settings
νμ¬ μ§§μ λ¬Έμμ΄κ³Ό νλμ λΆμΈλ§ μ μ₯νλ―λ‘ λ³κ²½ν΄λ μλ¬΄λ° μ°¨μ΄κ° μμ΅λλ€. μΈμ¦μλ auto_ssl
μ μ₯λ©λλ€. κ·Έλ¬λ λμ λλ €λ³΄μΈμ.
μλμ, μ΅μ μ λ°μ΄νΈλ‘ λ¬Έμ κ° ν΄κ²°λμ§ μμ΅λλ€. auto_ssl ν¬κΈ°λ₯Ό 8MμΌλ‘ μ¬λ Έμ΅λλ€. μ΄λ μ½ 10κ°μ μΈμ¦μλ§ μ¬μ©νκ³ λ³κ²½ μ¬νμ΄ μκΈ° λλ¬Έμ κ³Όλν©λλ€.
# Log entries after my script detects nginx is unresponsive and force kills it
2017/05/24 13:29:15 [alert] 462#0: worker process 474 exited on signal 9
2017/05/24 13:29:15 [alert] 462#0: worker process 475 exited on signal 9
2017/05/24 13:29:15 [alert] 462#0: shared memory zone "auto_ssl" was locked by 475
λλ κ°μ λ¬Έμ λ₯Ό λͺ λ² κ²½ννμ΅λλ€.
μ λ luarocksμ OpenResty 1.11.2.3/4 λ° lua-resty-auto-ssl 0.11.0-1μ μ¬μ©νκ³ μμ΅λλ€.
μ΄ λ¬Έμ κ° λνλλ©΄ 100κ° μ΄μμ tcp μ°κ²°μ΄ CLOSE_WAIT μνμμ λ©μΆ₯λλ€.
μ°λ¦¬λ κ°μ λ¬Έμ λ₯Ό μ¬λ¬ λ² κ²½ννμ΅λλ€.
nginx λ²μ : openresty/1.11.2.4
lua-resty-auto-ssl 0.11.0-1
CLOSE_WAIT μνκ° λ§μ΄ μμΌλ©° nginxλ λ μ΄μ μλ΅ν μ μμ΅λλ€. μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ CLOSE_WAIT μ°κ²°μ μ’
λ£νκ±°λ λ컀λ₯Ό λ€μ μμν΄μΌ ν©λλ€.
@ajmgh λ¬Έμ λ₯Ό ν΄κ²°νμ ¨λμ? μ°λ¦¬λ openresty 컨ν μ΄λμμ λμΌν λ¬Έμ λ₯Ό κ²ͺκ³ μμ΅λλ€. CLOSE_WAIT μνμμ ~1200κ°μ μ°κ²°μ΄ μκ³ lua-resty-auto-sslλ‘ openrestyλ§ μ€ννλ μλ²μ /tmpμ λ§μ νμλ νμΌμ΄ μμ΅λλ€.
λ€μμ μμ€ν ꡬμ±μ λλ€.
@ronail μλμ. νμ§λ§
μ΄ λ²κ·Έκ° λ°μν λ€λ₯Έ λͺ¨λ μ¬λλ€μ΄ Dockerλ₯Ό μ¬μ©νκ³ μμ΅λκΉ? Lua/OpenRestyμ Dockerλ₯Ό ν¨κ» μ¬μ©νλ©΄ μ λ§ μ΄μν μΌμ΄ λ²μ΄μ§ μ μμ΅λλ€.
λλ λ컀λ₯Ό μ¬μ©νμ§ μκ³ μμΌλ©° κ°μ λ¬Έμ μ μ§λ©΄νκ³ μμ΅λλ€.
νμλ μνμμ μΈμ¦μ λ°κΈμ μλν λ λ°μνλ λ¬Έμ μΈ κ² κ°μ΅λλ€.
λλ λν μ ν¨μ€κ° 30λΆλ§λ€ OpenRestyλ₯Ό λ€μ μμνλλ‘ κ°μ ν΄μΌ νλ λΉμ·ν λ¬Έμ κ° λ°μν©λλ€(맀μκ° λλ μ§μμ μΌλ‘ μΆ©λμ΄ λ°μν©λλ€...)
λμ λ©λͺ¨λ¦¬ μ νμ΄ μ€μ λμ΄ μμ§λ§ λμμ΄λλ€λ©΄ LetsEncryptμμ μ€ν¨ν μΈμ¦μ λν΄ μλΉν λΉμ¨ μ νμ λ°κ³ μλ€λ κ²μ μμμ΅λλ€.
μ΄μ κ°μ λ¬Έμ κ° λ°μνμ¬ κ·Όλ³Έ μμΈμ΄ 무μμΈμ§μ λν ν¬μΈν°κ° μλ λ³΄κ³ μ(#43, #136)λ₯Ό μ°Ύμμ΅λλ€. ν μ€νΈ μμ€ν μμ λ¬Έμ λ₯Ό μ¬νν μ μμμΌλ―λ‘ νλ‘λμ μμ€ν μμ κ°μ λ‘ λλ²κ·Έν΄μΌ νμ΅λλ€. 'λ€νν' μ€λ¨μ΄ μμ£Ό λ°μνμ¬ λλ²κΉ λ°©λ²μ λΉ λ₯΄κ² λ°λ³΅ν μ μμμ΅λλ€. 첫째, κ·Έκ²μ λͺ¨λ nginx νλ‘μΈμ€μ λν strace -fp $pidμ λΆκ³ΌνμΌλ©°, μ΄λ λͺ¨λ νλ‘μΈμ€κ° futex()λ₯Ό κΈ°λ€λ¦¬κ³ μμμ 보μ¬μ£Όμμ΅λλ€. μ΄λ pid μ€ νλκ° νμ shdictμ λν μ κΈμ 보μ νκ³ μλ€λ μ¬μ€κ³Ό μΌμΉν©λλ€. λ€μμΌλ‘ κ° νλ‘μΈμ€μ gdb μμΆμ λ€νλ₯Ό μΆκ°νκ³ μ΄λ―Έμ§μ λλ²κ·Έ κΈ°νΈλ₯Ό μΆκ°ν ν λ¬Έμ κ° λ€μ μ½λ κ²½λ‘μ μμμ΄ λΆλͺ ν΄μ‘μ΅λλ€.
#3 0x00007f8f4ea50219 in ngx_shmtx_lock (mtx=0x7f8f31a0c068) at src/core/ngx_shmtx.c:111
#4 0x00007f8f4eb7afbe in ngx_http_lua_shdict_set_helper (L=0x418257a0, flags=0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:1016
#5 0x00007f8f4eb7a4a4 in ngx_http_lua_shdict_delete (L=0x418257a0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:632
#6 0x00007f8f4debd2f3 in lj_BC_FUNCC () from /usr/local/openresty/luajit/lib/libluajit-5.1.so.2
#7 0x00007f8f4dec0b9f in gc_call_finalizer (g=0x418063b8, L=0x418257a0, mo=0x7ffc7592da00, o=0x40e11948) at lj_gc.c:475
#8 0x00007f8f4dec0e2b in gc_finalize (L=0x418257a0) at lj_gc.c:509
#9 0x00007f8f4dec15d9 in gc_onestep (L=0x418257a0) at lj_gc.c:659
#10 0x00007f8f4dec16ef in lj_gc_step (L=0x418257a0) at lj_gc.c:689
#11 0x00007f8f4ded8c3d in lua_pushlstring (L=0x418257a0, str=0x7f8f330a6066 "0\202\002\v\n\001", len=527) at lj_api.c:639
#12 0x00007f8f4eb7a225 in ngx_http_lua_shdict_get_helper (L=0x418257a0, get_stale=0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:538
#13 0x00007f8f4eb79eb6 in ngx_http_lua_shdict_get (L=0x418257a0) at ../ngx_lua-0.10.13/src/ngx_http_lua_shdict.c:419
ngx_http_lua_shdict_get_helper()λ₯Ό κ°λ΅ν μ΄ν΄λ³΄λ©΄ λ¬Έμ μ κ·Όλ³Έ μμΈμ΄ λͺ νν΄μ§λλ€. shdictκ° μ κΈ°κ³ lua_pushlstringμ΄ λλλ‘ κ°λΉμ§ μμ§κΈ°λ₯Ό νΈμΆνμ¬ λμΌν shdictμμ νλͺ©μ μ κ±°νλ €κ³ ν μ μμ΄ κ΅μ°© μνλ₯Ό μ λ°ν μ μμ΅λλ€.
λ΄ λΉ λ₯΄κ³ λλ¬μ΄ ν΄κ²°μ± μ μ΄κ²μ΄μμ΅λλ€(λ무 λͺ»μ겨μ ν¨μΉλ₯Ό κ²μνμ§ μμ κ²μ λλ€).
case SHDICT_TSTRING:
{
int len = value.len;
char *tmp = malloc(len);
if(!tmp) {
ngx_log_error(NGX_LOG_ERR, ctx->log, 0, "dict get: malloc: out of memory");
return luaL_error(L, "out of memory");
}
ngx_memcpy(tmp, value.data, value.len);
ngx_shmtx_unlock(&ctx->shpool->mutex);
lua_pushlstring(L, tmp, len);
free(tmp);
}
break;
μ§κΈκΉμ§ μ΄κ²μ μλ²½νκ² μ€νλ©λλ€. μμ€ν μ λ΄λΆ μλμ λν λ λ§μ ν΅μ°°λ ₯μ κ°μ§ μ¬λμ΄ λ λμ μμ μ μμ±νκΈ°λ₯Ό μν μ μμ΅λλ€.
ν₯λ―Έλ‘κ²λ μ΄κ²μ μλ €μ§ μ¬μ€μ
λλ€!
https://github.com/openresty/lua-nginx-module/issues/1207#issuecomment -350745592
μ°ΈμΌλ‘ ν₯λ―Έλ‘μ΅λλ€. μΈκΈν λ¬Έμ μ λ°λΌ lua-resty-coreλ₯Ό μ¬μ©νλ©΄ λ¬Έμ κ° ν΄κ²°λλ©° μ€λͺ μμ λ°λ₯΄λ©΄ openresty 1.15.8.1λΆν° μλμΌλ‘ λ‘λλλ―λ‘ μ΄ λ²κ·Έλ ν΄λΉ λ²μ μμ μλμΌλ‘ μμ λμμ΅λλ€. νλ‘μλ₯Ό μ κ·Έλ μ΄λνκ³ λ€μ λ³΄κ³ νκ² μ΅λλ€.
μλ²½νκ² μλνλ κ² κ°μ΅λλ€. μ€λ¨μ μ λ°ν μνκ° μ¬μ ν μ§μλλ€κ³ κ°μ νλ©΄ λ²κ·Έκ° μμ λμλ€κ³ λ§ν μ μμ΅λλ€.
3λ μ΄μ μμ‘°λ‘κ² μ€νν νμ λ°©κΈ μ΄ λ¬Έμ μ λΆλͺμ³€μ΅λλ€.
λν νλ‘λμ μμ μ΄ λ¬Έμ κ° λ°μνμ΅λλ€. @koszik λ° alμκ² κ°μ¬λ립λλ€. νμΈμ μν΄ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ λ€μ λ¨κ³λ₯Ό λ°λ₯΄μΈμ.
OpenRestyλ₯Ό >1.15.8.1
μ΄κ²μ λ§€μ° μνν κ²μΌλ‘ 보μ΄λ©° f66bb61f11a654f66d35dd793ceaf0293d9c0f46μ 곧 μΆμνκ±°λ μ΅μν κΆμ₯ μ¬νμ΄ μλ μꡬ μ¬νμ λ§κ² λ¬Έμλ₯Ό μ λ°μ΄νΈν κ°μΉκ° μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λν νλ‘λμ μμ μ΄ λ¬Έμ κ° λ°μνμ΅λλ€. @koszik λ° alμκ² κ°μ¬λ립λλ€. νμΈμ μν΄ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ €λ©΄ λ€μ λ¨κ³λ₯Ό λ°λ₯΄μΈμ.
OpenRestyλ₯Ό
>1.15.8.1
μ΄κ²μ λ§€μ° μνν κ²μΌλ‘ 보μ΄λ©° f66bb61f11a654f66d35dd793ceaf0293d9c0f46μ 곧 μΆμνκ±°λ μ΅μν κΆμ₯ μ¬νμ΄ μλ μꡬ μ¬νμ λ§κ² λ¬Έμλ₯Ό μ λ°μ΄νΈν κ°μΉκ° μμ΅λλ€.