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 Π² продукция. Всички Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Π΅ Π΅ Π±ΡŠΡ€Π· ΠΈ страхотСн. Π’ Π½Π΅Π³ΠΎ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ чудСсно синхронно ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠ΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° измислятС Π½Π΅Ρ‰Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΠΊΠ°ΠΊΠ²ΠΎΡ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ с gevent Π² Python. Gevent Π΅ страхотСн, Π½ΠΎ Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ Π½Π° C ΠΈ Π½Π΅Ρ‰ΠΎ сС ΠΎΠ±ΡŠΡ€ΠΊΠ°, с gevent Ρ‰Π΅ ΠΈΠ·ΠΏΠ°Π΄Π½Π΅Ρ‚Π΅ Π² лудост, ΠΎΠΏΠΈΡ‚Π²Π°ΠΉΠΊΠΈ сС Π΄Π° Π³ΠΎ Π΄Π΅Π±ΡŠΠ³Π²Π°Ρ‚Π΅. Π˜ΠΌΠ°Ρ… ΠΎΠΏΠΈΡ‚: ΠΎΡ‚Π½Π΅ ΠΌΠΈ Ρ†Π΅Π»ΠΈ Π΄Π²Π° Π΄Π½ΠΈ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π° ΠΊΠ°ΠΊΠ²ΠΎ сС Π΅ ΠΎΠ±ΡŠΡ€ΠΊΠ°Π»ΠΎ. Ако някой Π½Π΅ бСшС сС Ρ€ΠΎΠ²ΠΈΠ» мСсСци ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, Π½Π΅ бСшС ΠΎΡ‚ΠΊΡ€ΠΈΠ» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, Π½Π΅ Π±Π΅ написал Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ ΠΈ Google Π½Π΅ Π³ΠΎ бСшС Π½Π°ΠΌΠ΅Ρ€ΠΈΠ», щяхмС напълно Π΄Π° сС ΠΎΠ±ΡŠΡ€ΠΊΠ°ΠΌΠ΅.

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

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

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

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

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€

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

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

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

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€

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

content_by_lua_block – Ρ‚ΠΎΠ²Π° Π΅ Π±Π»ΠΎΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΌΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Lua скрипт. Π’Π·Π΅ΠΌΠ°ΠΌΠ΅ СндТинсовата ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° 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:

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

ΠΠ°ΡˆΠ΅Ρ‚ΠΎ удостовСряванС Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€

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

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ ΠΈΠΌΠ°ΠΌΠ΅ cookie Ρ‚ΠΎΠΊΠ΅Π½. Ако нямамС, ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ Π½Π° удостовСряванС. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ са Ρ…ΠΈΡ‚Ρ€ΠΈ ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС сСтят, Ρ‡Π΅ трябва Π΄Π° поставят cookie Ρ‚ΠΎΠΊΠ΅Π½. Π—Π°Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π³ΠΎ слоТим ΠΈ Π² Redis:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€

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

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€

НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ самото удостовСряванС:

OpenResty: ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ NGINX Π² ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π΅Π½ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΡŠΡ€Π²ΡŠΡ€

КазвамС, Ρ‡Π΅ трябва Π΄Π° Ρ‡Π΅Ρ‚Π΅ΠΌ тялото Π½Π° заявката. ΠŸΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ POST Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, провСрявамС Π΄Π°Π»ΠΈ Π»ΠΎΠ³ΠΈΠ½ΡŠΡ‚ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π°Ρ‚Π° са ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ. Ако Π½Π΅ са ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ, ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ Π½Π° удостовСряванС. А Π°ΠΊΠΎ са ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΈ, записвамС Ρ‚ΠΎΠΊΠ΅Π½Π° Π² 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 бяха Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° няколко часа. ΠšΠΎΠ³Π°Ρ‚ΠΎ пишСш Π² списъка Π·Π° Ρ€Π°Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅, Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎ слСд няколко ΠΌΠΈΠ½ΡƒΡ‚ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρˆ ΠΊΡƒΠΏ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ, обясняват ΠΊΠ°ΠΊΠ²ΠΎ ΠΈ ΠΊΠ°ΠΊ, ΠΊΠ°ΠΊΠ²ΠΎ Π½Π° ΠΊΠ°ΠΊΠ²ΠΎ. Π’ΠΎΠ²Π° Π΅ наистина страхотно. Π—Π° съТалСниС, Π½Π΅ навсякъдС ΠΈΠΌΠ° Ρ‚Π°ΠΊΠ°Π²Π° Π΄ΠΎΠ±Ρ€Π° Π΄ΡƒΡˆΠ΅Π²Π½Π° общност.
    По ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° OpenResty ΠΈΠΌΠ° GitHub, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π°ΠΊΠΎ Π½Π΅Ρ‰ΠΎ Π΅ счупСно. Има списък Π·Π° Ρ€Π°Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π² Google Groups, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠ±ΡΡŠΠΆΠ΄Π°Ρ‚Π΅ ΠΎΠ±Ρ‰ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, ΠΈΠΌΠ° Ρ€Π°Π·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° китайски β€” ΠΊΠΎΠΉ Π·Π½Π°Π΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅Ρ‚Π΅ английски, Π° Π·Π½Π°Π΅Ρ‚Π΅ китайски.

Π˜Ρ‚ΠΎΠ³

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

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

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

Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΠΈ Π²ΠΈΠ΄Π΅ΠΎ

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

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