OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠžΡ‚Π½ΠΎΠ²ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°ΠΌΠ΅ транскрипцията Π½Π° Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΡ‚ конфСрСнцията HighLoad++ ΠΏΡ€Π΅Π· 2016 Π³., която сС ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅ Π² подмосковното Π‘ΠΊΠΎΠ»ΠΊΠΎΠ²ΠΎ Π½Π° 7β€”8 Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ ΠΌΠΈΠ½Π°Π»Π°Ρ‚Π° Π³ΠΎΠ΄ΠΈΠ½Π°. Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ ΠŸΡ€ΠΎΡ‚Π°ΡΠΎΠ² Ρ€Π°Π·ΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ функционалността Π½Π° NGINX с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° OpenResty ΠΈ Lua.

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅, Π°Π· съм Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ ΠŸΡ€ΠΎΡ‚Π°ΡΠΎΠ², работя Π² Parallels. Π©Π΅ Π²ΠΈ Ρ€Π°Π·ΠΊΠ°ΠΆΠ° ΠΌΠ°Π»ΠΊΠΎ Π·Π° сСбС си. ΠŸΡ€Π΅Π· Ρ‚Ρ€ΠΈ Ρ‡Π΅Ρ‚Π²ΡŠΡ€Ρ‚ΠΈ ΠΎΡ‚ ΠΆΠΈΠ²ΠΎΡ‚Π° си пиша ΠΊΠΎΠ΄. Π‘Ρ‚Π°Π½Π°Ρ… програмист Π΄ΠΎ мозъка Π½Π° коститС Π² буквалния смисъл: понякога ΡΡŠΠ½ΡƒΠ²Π°ΠΌ ΠΊΠΎΠ΄. Π§Π΅Ρ‚Π²ΡŠΡ€Ρ‚ ΠΎΡ‚ ΠΆΠΈΠ²ΠΎΡ‚Π° си съм Π² индустриална Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, пишСйки ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‚ΠΈΠ²Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² продукция. Код, с ΠΊΠΎΠΉΡ‚ΠΎ някои ΠΎΡ‚ вас работят, Π½ΠΎ Π΄ΠΎΡ€ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΠΈΡ€Π°Ρ‚.

Π—Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΠ»ΠΊΠΎ лошо бСшС. ΠšΠΎΠ³Π°Ρ‚ΠΎ бях малък Π΄ΠΆΡƒΠ½ΠΈΠΎΡ€, Π΄ΠΎΠΉΠ΄ΠΎΡ… ΠΈ ΠΌΠΈ Π΄Π°Π΄ΠΎΡ…Π° Π΄Π²ΡƒΡ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ. Π‘Π΅Π³Π° Ρ‚ΡƒΠΊ Π½Π° всички ΠΈΠΌ Π΅ highload. Π₯ΠΎΠ΄ΠΈΡ… Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ, ΠΏΠΈΡ‚Π°Ρ…: β€žΠ₯Π΅ΠΉ, Ρ€Π°Π·ΠΊΠ°ΠΆΠ΅Ρ‚Π΅, ΠΈΠΌΠ°Ρ‚Π΅ Π»ΠΈ big data, всичко Π΅ супСр? Колко Π³ΠΎΠ»Π΅ΠΌΠΈ са Π²Π°ΡˆΠΈΡ‚Π΅ Π±Π°Π·ΠΈ?β€œ ΠžΡ‚Π³ΠΎΠ²Π°Ρ€ΡΡ…Π°: β€žΠ˜ΠΌΠ°ΠΌΠ΅ 100 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°!β€œ Аз ΠΊΠ°Π·Π²Π°Ρ…: β€žΠ‘ΡƒΠΏΠ΅Ρ€, 100 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°!β€œ А Π·Π° сСбС си мислСх ΠΊΠ°ΠΊ Π΄Π° Π·Π°Π΄ΡŠΡ€ΠΆΠ° покСрфСйса си. Мислиш си, Π΄Π°, рСбята са Π³ΠΎΡ‚ΠΈΠ½ΠΈ, Π° слСд Ρ‚ΠΎΠ²Π° сС Π²Ρ€ΡŠΡ‰Π°Ρˆ ΠΈ сС занимаваш с Ρ‚Π΅Π·ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚Π½ΠΈ Π±Π°Π·ΠΈ. И Ρ‚ΠΎΠ²Π° бСшС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ бях Π΄ΠΆΡƒΠ½ΠΈΠΎΡ€. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡΡ‚Π΅ Π»ΠΈ си какъв ΡƒΠ΄Π°Ρ€ Π΅ Ρ‚ΠΎΠ²Π°?

Зная ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 20 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈ Π΅Π·ΠΈΠΊΠ°. Π’ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, с ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅ Π΄Π° сС справя ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. Π”Π°Π²Π°Ρ‚ Ρ‚ΠΈ ΠΊΠΎΠ΄ Π½Π° Erlang, Π½Π° C, Π½Π° C++, Π½Π° Lua, Π½Π° Python, Π½Π° Ruby, Π½Π° Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ ΠΈ Ρ‚ΠΈ трябва Π΄Π° сС ΡΠΏΡ€Π°Π²ΠΈΡˆ с всичко Ρ‚ΠΎΠ²Π°. Π’ ΠΎΠ±Ρ‰ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Ρ‚Ρ€ΡΠ±Π²Π°ΡˆΠ΅. НС успях Π΄Π° прСброя Ρ‚ΠΎΡ‡Π½ΠΎ, Π½ΠΎ ΠΈΠ·Π³ΡƒΠ±ΠΈΡ… смСтката някъдС слСд 20.

Въй ΠΊΠ°Ρ‚ΠΎ всички ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π°Ρ‰ΠΈ знаят ΠΊΠ°ΠΊΠ²ΠΎ Π΅ Parallels ΠΈ с ΠΊΠ°ΠΊΠ²ΠΎ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅, няма Π΄Π° говоря Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ смС Π²Π΅Π»ΠΈΠΊΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ. Π©Π΅ ΠΊΠ°ΠΆΠ° само, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ 13 офиса ΠΏΠΎ свСта, ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 300 слуТитСли, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² Москва, Π’Π°Π»ΠΈΠ½ ΠΈ ΠœΠ°Π»Ρ‚Π°. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ моТСш Π΄Π° взСмСш ΠΈ Π΄Π° сС ΠΏΡ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡˆ Π½Π° ΠœΠ°Π»Ρ‚Π°, Π°ΠΊΠΎ Π·ΠΈΠΌΠ°Ρ‚Π° Π΅ студСна ΠΈ искаш Π΄Π° Π·Π°Ρ‚ΠΎΠΏΠ»ΠΈΡˆ Π³ΡŠΡ€Π±Π° си.

ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½Π°ΡˆΠΈΡΡ‚ ΠΎΡ‚Π΄Π΅Π» пишС Π½Π° Python 2. Π—Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ сС с бизнСс ΠΈ нямамС Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° внСдрявамС ΠΌΠΎΠ΄Π½ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π·Π°Ρ‚ΠΎΠ²Π° страдамС. ИмамС Django, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚Π°ΠΌ ΠΈΠΌΠ° всичко, Π° ΠΈΠ·Π»ΠΈΡˆΠ½ΠΎΡ‚ΠΎ смС ΠΈΠ·Ρ…Π²ΡŠΡ€Π»ΠΈΠ»ΠΈ. Π‘ΡŠΡ‰ΠΎ MySQL, Redis ΠΈ NGINX. Има ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π³ΠΎΡ‚ΠΈΠ½ΠΈ Π½Π΅Ρ‰Π°. ИмамС MongoDB, ΠΈΠΌΠ°ΠΌΠ΅ Π·Π°ΠΉΡ†ΠΈ, ΠΈΠΌΠ°ΠΌΠ΅ всичко β€” Π½ΠΎ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ моя Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π½Π΅ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌ с Ρ‚ΠΎΠ²Π°.

OpenResty

Π Π°Π·ΠΊΠ°Π·Π°Ρ… Π·Π° сСбС си. НСка обсъдим ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‰Π΅ говоря днСс:

  • Какво Π΅ OpenResty ΠΈ с ΠΊΠ°ΠΊΠ²ΠΎ сС Ρ…Ρ€Π°Π½ΠΈ?
  • Π—Π°Ρ‰ΠΎ Π΄Π° изобрСтявамС ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ вСлосипСд, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Python, NodeJS, PHP, Go ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ страхотни Π½Π΅Ρ‰Π°, с ΠΊΠΎΠΈΡ‚ΠΎ всички смС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ?
  • И ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΎΡ‚ ΠΆΠΈΠ²ΠΎΡ‚Π°. НуТно ΠΌΠΈ бСшС Π΄Π° ΡΡŠΠΊΡ€Π°Ρ‚Ρ прСзСнтацията си Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ тя бСшС с ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎΡΡ‚ 3,5 часа, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ°Π»ΠΊΠΎ.

OpenResty Π΅ NGINX. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Π½Π΅Π³ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π΄ΠΎΠ±Ρ€Π΅ написан ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±ΡŠΡ€Π·ΠΎ. Мисля, Ρ‡Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΎΡ‚ нас ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ NGINX Π² продукция. Всички Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Π΅ Π΅ Π±ΡŠΡ€Π· ΠΈ супСр. Π’ Π½Π΅Π³ΠΎ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ страхотно синхронно въвСТданС/ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° изобрСтяватС ΠΎΡ‚Π½ΠΎΠ²ΠΎ ΠΊΠΎΠ»Π΅Π»ΠΎΡ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…Π° Π² Python с gevent. Gevent Π΅ страхотСн, Π½ΠΎ Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ Π½Π° C ΠΈ Π½Π΅Ρ‰ΠΎ сС ΠΎΠ±ΡŠΡ€ΠΊΠ°, Ρ‚ΠΎ Ρ‰Π΅ сС ΠΏΠΎΠ±ΡŠΡ€ΠΊΠ°Ρ‚Π΅ ΠΏΡ€ΠΈ Π΄Π΅Π±ΡŠΠ³Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ. Аз ΠΈΠΌΠ°Ρ… ΠΎΠΏΠΈΡ‚: ΠΎΡ‚Π½Π΅ ΠΌΠΈ Ρ†Π΅Π»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ, Π·Π° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π° ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°Ρ€Π΅Π΄. Ако някой Π½Π΅ бСшС исслСдвал ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° няколко сСдмици, Π½Π΅ бСшС Π³ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π» Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ Google Π½Π΅ Π³ΠΎ бСшС Π½Π°ΠΌΠ΅Ρ€ΠΈΠ», щяхмС Π΄Π° бъдСм наистина Π² Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½ΠΈΠ΅.

Π’ NGINX Π²Π΅Ρ‡Π΅ са Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅ ΠΈ статичСн ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚. НС Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° сС Ρ‚Ρ€Π΅Π²ΠΎΠΆΠΈΡ‚Π΅ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΏΠΎ правилния Π½Π°Ρ‡ΠΈΠ½, Π·Π° Π΄Π° Π½Π΅ сС забавя Π½Π΅Ρ‰ΠΎ ΠΈΠ»ΠΈ Π΄Π° Π·Π°Π³ΡƒΠ±ΠΈΡ‚Π΅ дСскриптори. Nginx Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ, Π½Π΅ трябва Π΄Π° мислитС ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ – WSGI, PHP-FPM, Gunicorn, Unicorn. Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ‚Π΅ Nginx, Π΄Π°Π²Π°Ρ‚Π΅ Π½Π° администраторитС ΠΈ Ρ‚Π΅ знаят ΠΊΠ°ΠΊ Π΄Π° работят с Π½Π΅Π³ΠΎ. Nginx структурирано ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° заявкитС. Малко ΠΏΠΎ-късно Ρ‰Π΅ говоря Π·Π° Ρ‚ΠΎΠ²Π°. ΠšΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎΠΉ ΠΈΠΌΠ° Ρ„Π°Π·Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ само Π΅ ΠΏΡ€ΠΈΠ΅Π» заявката, слСд Ρ‚ΠΎΠ²Π° я Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠ» ΠΈ накрая Π΅ ΠΏΡ€Π΅Π΄Π°Π» ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° потрСбитСля.

Nginx Π΅ страхотСн, Π½ΠΎ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ гъвкав Π΄ΠΎΡ€ΠΈ с всички страхотни Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ са Π²Π³Ρ€Π°Π΄ΠΈΠ»ΠΈ Π² конфигурацията, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС настройва. Π’Π°Π·ΠΈ мощност Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½Π°. Π—Π°Ρ‚ΠΎΠ²Π° Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΎΡ‚ Taobao ΠΏΡ€Π΅Π΄ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ осСм Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π²Π³Ρ€Π°Π΄ΠΈΡ…Π° Lua Π² Π½Π΅Π³ΠΎ. Какво Π΄Π°Π²Π° Ρ‚ΠΎΠ²Π°?

  • Π Π°Π·ΠΌΠ΅Ρ€. Π’ΠΎΠΉ Π΅ малък. LuaJIT Π΄Π°Π²Π° ΠΎΠΊΠΎΠ»ΠΎ 100-200 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π° overhead ΠΏΠΎ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ overhead ΠΏΠΎ производитСлност.
  • Бкорост. Π˜Π½Ρ‚Π΅ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ LuaJIT Π² ΠΌΠ½ΠΎΠ³ΠΎ ситуации Π΅ близък Π΄ΠΎ C; Π² някои случаи проявява с Java, Π° Π² Π΄Ρ€ΡƒΠ³ΠΈ - я Π½Π°Π΄ΠΌΠΈΠ½Π°Π²Π°. Някога Ρ‚ΠΎΠΉ сС ΡΡ‡ΠΈΡ‚Π°ΡˆΠ΅ Π·Π° state of the art, Π½Π°ΠΉ-добрият JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€. Π‘Π΅Π³Π° ΠΈΠΌΠ° ΠΏΠΎ-Π΄ΠΎΠ±Ρ€ΠΈ, Π½ΠΎ Ρ‚Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π΅ΠΆΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ V8. Някои JavaScript ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΈ ΠΈ Java HotSpot са ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΈ, Π½ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ мСста всС ΠΎΡ‰Π΅ остават Π½Π°Π·Π°Π΄.
  • ЛСсно усвояванС. Ако ΠΈΠΌΠ°Ρ‚Π΅, Π΄Π° Ρ€Π΅Ρ‡Π΅ΠΌ, ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° Π½Π° Perl ΠΈ Π½Π΅ стС Booking, няма Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Perl програмисти. Π—Π°Ρ‰ΠΎΡ‚ΠΎ Π³ΠΈ няма, всички са Π²Π·Π΅Ρ‚ΠΈ, Π° ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌ ΠΎΡ‚Π½Π΅ΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅ ΠΈ Π΅ слоТно. Ако искатС програмисти Π½Π° Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ, вСроятно ΡΡŠΡ‰ΠΎ Ρ‰Π΅ трябва Π΄Π° Π³ΠΈ ΠΏΡ€Π΅ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚Π΅ ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅. ΠŸΡ€ΠΈ Lua всичко Π΅ просто. Lua ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΡƒΡ‡Π΅Π½ ΠΎΡ‚ всСки Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ Π·Π° Ρ‚Ρ€ΠΈ Π΄Π½ΠΈ. На ΠΌΠ΅Π½ ΠΌΠΈ ΠΎΡ‚Π½Π΅ ΠΎΠΊΠΎΠ»ΠΎ Π΄Π²Π° часа, Π·Π° Π΄Π° сС справя. Π‘Π»Π΅Π΄ Π΄Π²Π° часа Π²Π΅Ρ‡Π΅ ΠΏΠΈΡˆΠ΅Ρ… ΠΊΠΎΠ΄ Π·Π° продукция. Π‘Π»Π΅Π΄ сСдмица Ρ‚ΠΎΠΉ Π·Π°ΠΌΠΈΠ½Π° Π·Π° продукция.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ²Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π’ΡƒΠΊ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‰Π°. Π’ OpenResty са ΡΡŠΠ±Ρ€Π°Π½ΠΈ ΠΊΡƒΠΏ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ Π»ΡƒΠ°ΡˆΠ½ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΎΡ‚ NGINX. И всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ - Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π°Ρ‚Π΅ ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ

Π”ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ с Π»ΠΈΡ€ΠΈΠΊΠ°Ρ‚Π°, ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ към ΠΊΠΎΠ΄Π°. Π•Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ малък Hello World:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Какво ΠΈΠΌΠ° Ρ‚ΡƒΠΊ? Π’ΠΎΠ²Π° Π΅ NGINX мСстополоТСниС. НиС Π½Π΅ сС притСснявамС, Π½Π΅ пишСм собствСн Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³, Π½Π΅ Π²Π·ΠΈΠΌΠ°ΠΌΠ΅ Π³ΠΎΡ‚ΠΎΠ² ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π² NGINX, ΠΆΠΈΠ²Π΅Π΅ΠΌ Π΄ΠΎΠ±Ρ€Π΅ ΠΈ Π»Π΅Π½ΠΈΠ²ΠΎ.

content_by_lua_block – Ρ‚ΠΎΠ²Π° Π΅ Π±Π»ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΡƒΠΊΠ°Π·Π²Π°, Ρ‡Π΅ прСдоставямС ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ Ρ‡Ρ€Π΅Π· Lua скрипт. Π’Π·ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΎΡ‚ NGINX remote_addr ΠΈ я вмъквамС Π² string.format. Π’ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ sprintf, само Ρ‡Π΅ Π½Π° Lua, само Ρ‡Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ. И прСдоставямС Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Но Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ Π² рСалния свят. Π’ продукция Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΉΠ²Π° Hello World. ОбикновСно Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈ запитвания към Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³Π°Π΄Π΅ ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Ρ‡Π°ΠΊΠ° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠŸΡ€ΠΎΡΡ‚ΠΎ сСди ΠΈ Ρ‡Π°ΠΊΠ°. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ΄Π²Π°Ρ‚ 100,000 ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, става ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ. Π—Π°Ρ‚ΠΎΠ²Π° Π΄Π° създадСм просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π©Π΅ Ρ‚ΡŠΡ€ΡΠΈΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΊΠΈ. Но няма Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΠΌ просто Ρ‚Π°ΠΊΠ°, Ρ‰Π΅ Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈΡ‚Π΅ Π΄ΡƒΠΌΠΈ ΠΈ Π°ΠΊΠΎ потрСбитСлят Π΅ Ρ‚ΡŠΡ€ΡΠΈΠ» 'ΠΊΠΎΡ‚Π΅Π½Ρ†Π°', Ρ‰Π΅ ΠΌΡƒ Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ ΠΊΠΎΡ‚ΠΊΠΈ, ΠΏΡƒΡ…ΠΊΠ°Π²ΠΈ ΠΈ Π΄Ρ€. ΠΏΡŠΡ€Π²ΠΎ трябва Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° бэкСнда. ИзглСТда Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π”Π²Π΅ Ρ€Π΅Π΄Π° Π²ΠΈ позволяват Π΄Π° Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ GET-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ трудности. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΎΡ‚ Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ с Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΏΠΎ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ° ΠΈ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ информация ΠΏΠΎ стандартСн SQL-Π·Π°ΠΏΠΈΡ‚. Всичко Π΅ просто. ИзглСТда Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π‘Π²ΡŠΡ€Π·Π²Π°ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° resty.mysql, която Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π°. НС Π½ΠΈ трябва Π΄Π° инсталирамС Π½ΠΈΡ‰ΠΎ, всичко Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ. Π£ΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° сС ΡΠ²ΡŠΡ€ΠΆΠ΅ΠΌ ΠΈ ΠΏΡ€Π°Π²ΠΈΠΌ SQL-Π·Π°ΠΏΠΈΡ‚:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π’ΡƒΠΊ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Π½ΠΎ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π’ΡƒΠΊ 10 β€” Π΅ Π»ΠΈΠΌΠΈΡ‚ΡŠΡ‚. Π˜Π·Π²Π»ΠΈΡ‡Π°ΠΌΠ΅ 10 записа, ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈ смС, Π½Π΅ искамС Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅. Π—Π° Π»ΠΈΠΌΠΈΡ‚Π° Π² SQL Π·Π°Π±Ρ€Π°Π²ΠΈΡ….

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½Π°ΠΌΠΈΡ€Π°ΠΌΠ΅ изобраТСния ΠΏΠΎ всички запитвания. Π‘ΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΎΡ‚ запитвания ΠΈ запълвамС Lua-Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π½Π°Ρ€Π΅Ρ‡Π΅Π½Π° reqs, ΠΈ ΠΏΡ€Π°Π²ΠΈΠΌ ngx.location.capture_multi.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Всички Ρ‚Π΅Π·ΠΈ запитвания ΠΎΡ‚ΠΈΠ²Π°Ρ‚ Π½Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅, ΠΈ Π½ΠΈ сС Π²Ρ€ΡŠΡ‰Π°Ρ‚ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ. Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° Π΅ Ρ€Π°Π²Π½ΠΎ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° Π½Π°ΠΉ-бавния. Ако всичкитС Π½ΠΈ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π΄ΠΎΠΉΠ΄Π°Ρ‚ Π·Π° 50 милисСкунди ΠΈ смС ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠ»ΠΈ сто запитвания, Ρ‚ΠΎ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΡŠΡ‚ Π½ΠΈ ΠΈΠ΄Π²Π° Π·Π° 50 милисСкунди.

Въй ΠΊΠ°Ρ‚ΠΎ смС ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ²ΠΈ ΠΈ Π½Π΅ искамС Π΄Π° пишСм ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° HTTP ΠΈ ΠΊΠ΅ΡˆΠΈΡ€Π°Π½Π΅, Ρ‰Π΅ Π½Π°ΠΊΠ°Ρ€Π°ΠΌΠ΅ NGINX Π΄Π° ΡΠ²ΡŠΡ€ΡˆΠΈ всичко вмСсто нас. ΠšΠ°ΠΊΡ‚ΠΎ видяхтС, Ρ‚Π°ΠΌ имашС Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ към url/fetch, Π΅Ρ‚ΠΎ Π³ΠΎ:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠŸΡ€Π°Π²ΠΈΠΌ прост proxy_pass, ΡƒΠΊΠ°Π·Π²Π°ΠΌΠ΅ къдС Π΄Π° сС ΠΊΠ΅ΡˆΠΈΡ€Π°, ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ, ΠΈ всичко Ρ€Π°Π±ΠΎΡ‚ΠΈ.

Но Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, ΡΡŠΡ‰ΠΎ трябва Π΄Π° ΠΏΡ€Π΅Π΄Π°Π΄Π΅ΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° потрСбитСля. Най-простата идСя Π΅ всичко Π΄Π° сС сСриализира Π² JSON, лСсно Π΅, Π·Π° Π΄Π²Π΅ Ρ€Π΅Π΄Π°. Π˜Π·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ Content-Type, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°ΠΌΠ΅ JSON.

Но ΠΈΠΌΠ° Π΅Π΄Π½Π° трудност: потрСбитСлят Π½Π΅ иска Π΄Π° Ρ‡Π΅Ρ‚Π΅ JSON. Врябва Π΄Π° ΠΏΡ€ΠΈΠ²Π»ΠΈΡ‡Π°ΠΌΠ΅ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Понякога Π½Π΅ Π½ΠΈ сС иска Π΄Π° Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌ ΠΎΡ‚Π½Π°Ρ‡Π°Π»ΠΎ. И SEO спСциалиститС Ρ‰Π΅ ΠΊΠ°ΠΆΠ°Ρ‚, Ρ‡Π΅ Π°ΠΊΠΎ Ρ‚ΡŠΡ€ΡΠΈΠΌ изобраТСния, Ρ‚ΠΎ Π΅ Π±Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π° тях. А Π°ΠΊΠΎ ΠΈΠΌ прСдоставим някакво ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, Ρ‚Π΅ Ρ‰Π΅ ΠΊΠ°ΠΆΠ°Ρ‚, Ρ‡Π΅ Π½Π°ΡˆΠΈΡ‚Π΅ Ρ‚ΡŠΡ€ΡΠ°Ρ‡ΠΊΠΈ Π½ΠΈΡ‰ΠΎ Π½Π΅ индСксират.

Какво Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ с Ρ‚ΠΎΠ²Π°? Π Π°Π·Π±ΠΈΡ€Π° сС, Ρ‰Π΅ прСдоставим Π½Π° потрСбитСля HTML. Π ΡŠΡ‡Π½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π΅ Π΅ подходящо, Π·Π°Ρ‚ΠΎΠ²Π° искамС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ шаблони. Π—Π° Ρ‚ΠΎΠ²Π° ΠΈΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° lua-resty-template.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ВСроятно Π²Π΅Ρ‡Π΅ стС Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚Ρ€ΠΈΡ‚Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΈ Π±ΡƒΠΊΠ²ΠΈ OPM. OpenResty ΠΈΠ΄Π²Π° с свой ΠΏΠ°ΠΊΠ΅Ρ‚Π΅Π½ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€, Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° инсталиратС ΠΎΡ‰Π΅ ΠΊΡƒΠΏ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π² частност lua-resty-template. Π’ΠΎΠ²Π° Π΅ прост шаблонСн Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π», близък Π΄ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅ Π½Π° Django. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ замСстванС Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.

Π’ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ всичко Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Π³ΠΎΡ€Π΅-Π΄ΠΎΠ»Ρƒ Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π‘ΡŠΠ±Ρ€Π°Ρ…ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΈ ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ€Π°Ρ…ΠΌΠ΅ шаблона Π² Π΄Π²Π΅ Π»ΠΈΠ½ΠΈΠΈ. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ Π΅ Π΄ΠΎΠ²ΠΎΠ»Π΅Π½, ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΊΠΎΡ‚Π΅Π½Ρ†Π°. ПонСТС Ρ€Π°Π·ΡˆΠΈΡ€ΠΈΡ…ΠΌΠ΅ Π·Π°ΠΏΠΈΡ‚ΠΈΡ‚Π΅, Ρ‚ΠΎΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΈ морско ΠΊΠΎΡ‚Π΅. МоТС Π±ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ²Π° Π΅ Ρ‚ΡŠΡ€ΡΠΈΠ», Π½ΠΎ Π½Π΅ успя Π΄Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ си.

Всичко Π΅ супСр, Π½ΠΎ Π½ΠΈΠ΅ смС Π² Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈ Π½Π΅ искамС всС ΠΎΡ‰Π΅ Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅. НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ авторизация. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°, Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ NGINX ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° Π·Π°ΠΏΠΈΡ‚Π° Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈ Π½Π° OpenResty:

  • ΠŸΡŠΡ€Π²Π° Ρ„Π°Π·Π°Β β€” access, ΠΊΠΎΠ³Π°Ρ‚ΠΎ потрСбитСлят Ρ‚ΡŠΠΊΠΌΠΎ Π΅ пристигнал ΠΈ Π½ΠΈΠ΅ Π³ΠΎ Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅, основавайки сС Π½Π° заглавията, IP адрСса ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π°Π½Π½ΠΈ. МоТСм Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π°ΠΌΠ΅, Π°ΠΊΠΎ Π½Π΅ Π½ΠΈ харСсва. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° авторизация ΠΈΠ»ΠΈ, Π°ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡ‚ΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ лСсно Π΄Π° Π³ΠΈ спирамС Π² Ρ‚Π°Π·ΠΈ Ρ„Π°Π·Π°.
  • rewrite. ΠŸΡ€Π΅ΠΏΠΈΡΠ²Π°ΠΌΠ΅ някои Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ.
  • content. Π”Π°Π²Π°ΠΌΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° потрСбитСля.
  • headers filter. ПодмСнямС заглавията Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π°. Ако смС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ proxy_pass, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ някои заглавия, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΈ прСдоставим Π½Π° потрСбитСля.
  • body filter. МоТСм Π΄Π° ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΠΌ тялото.
  • logΒ β€” Π»ΠΎΠ³Π²Π°Π½Π΅. ΠœΠΎΠ³Π°Ρ‚ Π΄Π° сС записват Π»ΠΎΠ³ΠΎΠ²Π΅ Π² elasticsearch Π±Π΅Π· Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ слой.

ΠΠ°ΡˆΠ°Ρ‚Π° авторизация Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠ°:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π° Π² location, ΠΊΠΎΠΉΡ‚ΠΎ описахмС ΠΏΠΎ-Ρ€Π°Π½ΠΎ, ΠΈ Ρ‰Π΅ поставим Ρ‚Π°ΠΊΡŠΠ² ΠΊΠΎΠ΄:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ cookie token. Ако няма, прСнасочвамС към авторизация. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ са Ρ…ΠΈΡ‚Ρ€ΠΈ ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ°Ρ‚, Ρ‡Π΅ трябва Π΄Π° поставят cookie token. Π—Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎ слоТим ΠΈ Π² Redis:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠšΠΎΠ΄ΡŠΡ‚ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с Redis Π΅ ΠΌΠ½ΠΎΠ³ΠΎ прост ΠΈ Π½Π΅ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π°, цСлият Π²Ρ…ΠΎΠ΄/ΠΈΠ·Ρ…ΠΎΠ΄, ΠΊΠ°ΠΊΡ‚ΠΎ Ρ‚Π°ΠΌ, Ρ‚Π°ΠΊΠ° ΠΈ Ρ‚ΡƒΠΊ, Π΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰. Ако ΠΏΠΈΡˆΠ΅Ρ‚Π΅ синхронСн ΠΊΠΎΠ΄, Ρ‚ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΈ асинхронно. НСщо ΠΊΠ°Ρ‚ΠΎ с gevent, само Ρ‡Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π΄ΠΎΠ±Ρ€Π΅.

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ самата авторизация:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

КаТСм, Ρ‡Π΅ трябва Π΄Π° Ρ‡Π΅Ρ‚Π΅ΠΌ тялото Π½Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ POST Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅, провСрявамС Π΄Π°Π»ΠΈ Π»ΠΎΠ³ΠΈΠ½ΡŠΡ‚ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° са Π²Π΅Ρ€Π½ΠΈ. Ако Π½Π΅ са Π²Π΅Ρ€Π½ΠΈ, прСнасочвамС към авторизация. А Π°ΠΊΠΎ са Π²Π΅Ρ€Π½ΠΈ, записвамС token Π² Redis:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

НС забравяйтС Π΄Π° поставитС cookie, Ρ‚ΠΎΠ²Π° ΡΡŠΡ‰ΠΎ сС ΠΏΡ€Π°Π²ΠΈ Π·Π° Π΄Π²Π΅ Π»ΠΈΠ½ΠΈΠΈ:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² пълСн ΡΡŠΡ€Π²ΡŠΡ€ Π·Π° прилоТСния

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΡŠΡ‚ Π΅ прост, Ρ‚Π΅ΠΎΡ€Π΅Ρ‚ΠΈΡ‡Π΅Π½. Π Π°Π·Π±ΠΈΡ€Π° сС, няма Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ услуга, която ΠΏΠΎΠΊΠ°Π·Π²Π° Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΊΠΎΡ‚Π΅Π½Ρ†Π°. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅, ΠΊΠΎΠΉ Π·Π½Π°Π΅. НСка ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π² продукция.

  • ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡ‚ΠΈΡ‡Π΅Π½ Π±Π΅ΠΊΠ΅Π½Π΄. Понякога Π½ΠΈ трябва Π΄Π° прСдоставим съвсСм ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ Π² Π±Π΅ΠΊΠ΅Π½Π΄Π°: понякога Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄Π°Ρ‚Π°, понякога някакъв списък, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΈΠΌΠ° Π² сайта, Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ брояч ΠΈΠ»ΠΈ статистика. НСщо Ρ‚Π°ΠΊΠΎΠ²Π° ΠΌΠ°Π»ΠΊΠΎ. ΠœΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΡ‚Π΅ части ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС направят ΠΌΠ½ΠΎΠ³ΠΎ лСсно. Π’ΠΎΠ²Π° Ρ‰Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ Π±ΡŠΡ€Π·ΠΎ, лСсно ΠΈ Π΄ΠΎΠ±Ρ€Π΅.
  • ΠŸΡ€Π΅Π΄ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. Понякога искамС Π΄Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°ΠΌΠ΅ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° Π² Π½Π°ΡˆΠ°Ρ‚Π° страница, Π° Ρ‚Π°Π·ΠΈ Ρ€Π΅ΠΊΠ»Π°ΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Ρ‡Ρ€Π΅Π· API запитвания. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ лСсно Ρ‚ΡƒΠΊ. НС Π·Π°Ρ€Π΅ΠΆΠ΄Π°ΠΌΠ΅ нашия Π±Π΅ΠΊΠ΅Π½Π΄, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎΠ΄ натиск. МоТСм Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΠΈ ΡΡŠΠ±Π΅Ρ€Π΅ΠΌ Π΄Π°Π½Π½ΠΈΡ‚Π΅ Ρ‚ΡƒΠΊ. МоТСм Π΄Π° сглобим някакъв JS ΠΈΠ»ΠΈ, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π΄Π° Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ Π½Π΅Ρ‰ΠΎ, Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ Π½Π΅Ρ‰ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π³ΠΎ прСдоставим Π½Π° потрСбитСля.
  • Ѐасада Π·Π° микросСрвиз. Π’ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡŠΡ€ случай, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ… Π² компания Tenzor, която сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° с Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΠΎ ΠΎΡ‚Ρ‡ΠΈΡ‚Π°Π½Π΅ ΠΈ осигурява отчСтност Π·Π° ΠΎΠΊΠΎΠ»ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°Ρ‚Π° Π½Π° ΡŽΡ€ΠΈΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈΡ‚Π΅ Π»ΠΈΡ†Π° Π² страната. НиС Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ услуга, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‰Π°: ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ, авторизация ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ.
    OpenResty ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ Π»Π΅ΠΏΠΈΠ»ΠΎ Π·Π° Π²Π°ΡˆΠΈΡ‚Π΅ микросСрвизи, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ осигури Π΅Π΄ΠΈΠ½Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всичко ΠΈ Π΅Π΄ΠΈΠ½Π΅Π½ интСрфСйс. Въй ΠΊΠ°Ρ‚ΠΎ микросСрвизитС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ написани Ρ‚Π°ΠΊΠ°, Ρ‡Π΅ Ρ‚ΡƒΠΊ ΠΈΠΌΠ°Ρ‚Π΅ Node.js, Ρ‚ΡƒΠΊ PHP, Ρ‚ΡƒΠΊ Python, Ρ‚ΡƒΠΊ Π½Π΅Ρ‰ΠΎ Π½Π° Erlang, Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌΠ΅, Ρ‡Π΅ Π½Π΅ искамС Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΊΠΎΠ΄ Π΄Π° сС пишС навсякъдС. Π—Π°Ρ‚ΠΎΠ²Π° OpenResty ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π°.
  • Бтатистика ΠΈ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°. ОбикновСно NGINX стои Π½Π° Π²Ρ…ΠΎΠ΄Π° ΠΈ всички запитвания ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· Π½Π΅Π³ΠΎ. ИмСнно Π½Π° Ρ‚ΠΎΠ²Π° място Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° изчислитС Π½Π΅Ρ‰ΠΎ Π²Π΅Π΄Π½Π°Π³Π° ΠΈ Π΄Π° Π³ΠΎ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ някъдС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Elasticsearch, Logstash ΠΈΠ»ΠΈ просто Π΄Π° Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² Π»ΠΎΠ³ ΠΈ послС Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ‚Π΅ някъдС.
  • ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΠΊΠΈ систСми. НапримСр, ΠΎΠ½Π»Π°ΠΉΠ½ ΠΈΠ³Ρ€ΠΈ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС правят ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅. ДнСс Π² ΠšΠ΅ΠΉΠΏΡ‚Π°ΡƒΠ½ ΠΠ»Π΅ΠΊΡΠ°Π½Π΄ΡŠΡ€ Π“Π»Π°Π΄Ρ‹Ρˆ Ρ‰Π΅ Ρ€Π°Π·ΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС ΠΏΡ€ΠΎΠΊΠΎΡ‚ΠΈΠΏΠΈΡ€Π° многопотрСбитСлска ΠΈΠ³Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° OpenResty.
  • Π€ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° запитвания (WAF). Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅ Π½Π° ΠΌΠΎΠ΄Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ web application firewall Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ услуги, ΠΊΠΎΠΈΡ‚ΠΎ Π³ΠΈ прСдоставят. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° OpenResty ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ свой собствСн web application firewall, ΠΊΠΎΠΉΡ‚ΠΎ лСсно ΠΈ Π±ΡŠΡ€Π·ΠΎ Ρ‰Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π° заявкитС спорСд Π²Π°ΡˆΠΈΡ‚Π΅ изисквания. Ако ΠΈΠΌΠ°Ρ‚Π΅ Python, Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Π΅ PHP ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ няма Π΄Π° бъдС ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½, освСн Π°ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ ΠΎΡ‚ ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°. Π—Π½Π°Π΅Ρ‚Π΅, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ MySQL ΠΈ Python. ВСроятно Ρ‚ΡƒΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΠΏΠΈΡ‚Π°Ρ‚ Π΄Π° направят някакъв directory traversal ΠΈ Π΄Π° ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π°Ρ‚ Π½Π΅Ρ‰ΠΎ Π² Π±Π°Π·Π°Ρ‚Π°. Π—Π°Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Ρ‚Π΅ опасни заявки Π±ΡŠΡ€Π·ΠΎ ΠΈ Π΅Π²Ρ‚ΠΈΠ½ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΎ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π°.
  • ΠžΠ±Ρ‰Π΅ΡΡ‚Π²ΠΎ. Въй ΠΊΠ°Ρ‚ΠΎ OpenResty Π΅ построСн Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° NGINX, Ρ‚ΠΎΠΉ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΈ бонус – Ρ‚ΠΎΠ²Π° Π΅ NGINX общността. Вя Π΅ ΠΌΠ½ΠΎΠ³ΠΎ голяма ΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° част ΠΎΡ‚ Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅, с ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚Π΅ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ, Π²Π΅Ρ‡Π΅ са Ρ€Π΅ΡˆΠ΅Π½ΠΈ ΠΎΡ‚ общността Π½Π° NGINX.

    Lua Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ. Π’Ρ‡Π΅Ρ€Π° разговарях с ΠΌΠΎΠΌΡ‡Π΅Ρ‚Π°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π΄ΠΎΠΉΠ΄ΠΎΡ…Π° Π½Π° учСбния Π΄Π΅Π½ HighLoad++ ΠΈ Ρ‡ΡƒΡ…, Ρ‡Π΅ само Tarantool Π΅ написан Π½Π° Lua. Π’ΠΎΠ²Π° Π½Π΅ Π΅ Ρ‚Π°ΠΊΠ°, Π½Π° Lua са написани ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‰Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈ: OpenResty, XMPP ΡΡŠΡ€Π²ΡŠΡ€ Prosody, игралният Π΄Π²ΠΈΠ³Π°Ρ‚Π΅Π» Love2D, Lua сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Warcraft ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ мСста. Има ΠΌΠ½ΠΎΠ³ΠΎ Lua Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ с голямо ΠΈ ΠΎΡ‚Π·ΠΈΠ²Ρ‡ΠΈΠ²ΠΎ общСство. ВсичкитС ΠΌΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ ΠΏΠΎ Lua бяха Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° няколко часа. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ… Π² списъка Π·Π° разпространСниС, Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ слСд няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ… мноТСство ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ с инструкции ΠΈ разяснСния. Π’ΠΎΠ²Π° Π΅ супСр. Π—Π° съТалСниС, Π½Π΅ навсякъдС ΠΈΠΌΠ° Ρ‚Π°ΠΊΠΎΠ²Π° Π΄ΠΎΠ±Ρ€ΠΎ Π΄ΡƒΡˆΠ΅Π²Π½ΠΎ общСство.
    Има GitHub Π·Π° OpenResty, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ issue, Π°ΠΊΠΎ Π½Π΅Ρ‰ΠΎ Π΅ счупСно. Има списък Π·Π° разпространСниС Π² Google Groups, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ±ΡΡŠΠΆΠ΄Π°Ρ‚Π΅ ΠΎΠ±Ρ‰ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° списък Π½Π° китайски – Π°ΠΊΠΎ случайно Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚Π΅ английски, Π° Π·Π½Π°Π΅Ρ‚Π΅ китайски.

РСзюмС

  • Надявам сС, Ρ‡Π΅ успях Π΄Π° ΠΏΡ€Π΅Π΄Π°ΠΌ, Ρ‡Π΅ OpenResty Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ Ρ„Ρ€Π΅ΠΉΠΌΡƒΡŠΡ€ΠΊ, спСциално ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ Π·Π° ΡƒΠ΅Π±.
  • Има нисък ΠΏΡ€Π°Π³ Π½Π° Π²Π»ΠΈΠ·Π°Π½Π΅, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° Ρ‚ΠΎΠ·ΠΈ, с ΠΊΠΎΠΉΡ‚ΠΎ пишСм, Π° Π΅Π·ΠΈΠΊΡŠΡ‚ Π΅ доста прост ΠΈ минималистичСн.
  • ΠŸΡ€Π΅Π΄Π»Π°Π³Π° асинхронно I/O Π±Π΅Π· ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ²Π΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ няма Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π·Π°ΠΏΠ»Π΅Ρ‚Π΅Π½ΠΈ структури, ΠΊΠ°ΠΊΡ‚ΠΎ понякога пишСм Π² NodeJS.
  • Има лСсСн Π΄Π΅ΠΏΠ»ΠΎΠΉ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π½ΠΈ трябва само NGINX с нСобходимия ΠΌΠΎΠ΄ΡƒΠ» ΠΈ Π½Π°ΡˆΠΈΡΡ‚ ΠΊΠΎΠ΄, ΠΈ всичко Π²Π΅Π΄Π½Π°Π³Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ.
  • Голямо ΠΈ ΠΎΡ‚Π·ΠΈΠ²Ρ‡ΠΈΠ²ΠΎ общСство.

НС Ρ€Π°Π·ΠΊΠ°Π·Π°Ρ… Π² Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ ΠΊΠ°ΠΊ сС ΠΏΡ€Π°Π²ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅, Π·Π°Ρ‰ΠΎΡ‚ΠΎ стана ΠΌΠ½ΠΎΠ³ΠΎ дълга история.

Благодаря Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅Ρ‚ΠΎ!

ΠŸΡƒΡΠ½Π΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎΡ‚ΠΎ

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ ΠŸΡ€ΠΎΡ‚Π°ΡΠΎΠ² – OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ Π½Π° прилоТСния

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com
ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster