ΠΡ Π²Π½ΠΎΠ²Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ, ΠΌΠ΅Π½Ρ Π·ΠΎΠ²ΡΡ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡ ΠΡΠΎΡΠ°ΡΠΎΠ², Ρ ΡΠ°Π±ΠΎΡΠ°Ρ Π² Parallels. Π Π°ΡΡΠΊΠ°ΠΆΡ ΡΡΡΡ-ΡΡΡΡ ΠΎ ΡΠ΅Π±Π΅. Π’ΡΠΈ ΡΠ΅ΡΠ²Π΅ΡΡΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΆΠΈΠ·Π½ΠΈ Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΠΈΡΡ ΠΊΠΎΠ΄. Π‘ΡΠ°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ Π΄ΠΎ ΠΌΠΎΠ·Π³Π° ΠΊΠΎΡΡΠ΅ΠΉ Π² ΠΏΡΡΠΌΠΎΠΌ ΡΠΌΡΡΠ»Π΅: Ρ ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎ ΡΠ½Π΅ Π²ΠΈΠΆΡ ΠΊΠΎΠ΄. Π§Π΅ΡΠ²Π΅ΡΡΡ ΠΆΠΈΠ·Π½ΠΈΒ β ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ΄ΡΡ ΠΏΡΡΠΌΠΎ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½. ΠΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π²Π°Ρ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ³Π°Π΄ΡΠ²Π°ΡΡΡΡ ΠΎΠ± ΡΡΠΎΠΌ.
Π§ΡΠΎΠ±Ρ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΡ Π±ΡΠ»ΠΎ ΠΏΠ»ΠΎΡ ΠΎ. ΠΠΎΠ³Π΄Π° Ρ Π±ΡΠ» ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΌ Π΄ΠΆΡΠ½ΠΈΠΎΡΠΎΠΌ, Ρ ΠΏΡΠΈΡΡΠ», ΠΈ ΠΌΠ½Π΅ Π²ΡΠ΄Π°Π»ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π΄Π²ΡΡ ΡΠ΅ΡΠ°Π±Π°ΠΉΡΠ½ΡΠ΅ Π±Π°Π·Ρ. ΠΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΡΡ Ρ Π²ΡΠ΅Ρ highload. Π― Ρ ΠΎΠ΄ΠΈΠ» Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ, ΡΠΏΡΠ°ΡΠΈΠ²Π°Π»: Β«Π Π΅Π±ΡΡ, ΡΠ°ΡΡΠΊΠ°ΠΆΠΈΡΠ΅, Ρ Π²Π°Ρ big data, Π²ΡΡ ΠΊΡΡΡΠΎ? Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Ρ Π²Π°Ρ ΡΠ°ΠΌ Π±Π°Π·Ρ?Β» ΠΠ½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π»ΠΈ: Β«Π£ Π½Π°Ρ 100 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ!Β» Π― Π³ΠΎΠ²ΠΎΡΠΈΠ»: Β«ΠΡΡΡΠΎ, 100 Π³ΠΈΠ³Π°Π±Π°ΠΉΡ!Β» Π ΠΏΡΠΎ ΡΠ΅Π±Ρ Π΄ΡΠΌΠ°Π», ΠΊΠ°ΠΊ Π±Ρ Π°ΠΊΠΊΡΡΠ°ΡΠ½Π΅Π½ΡΠΊΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠΊΠ΅ΡΡΠ΅ΠΉΡ. ΠΡΠΌΠ°Π΅ΡΡ, Π΄Π°, ΡΠ΅Π±ΡΡΠ° ΠΊΡΡΡΡΠ΅, Π° ΠΏΠΎΡΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡΡ ΠΈ ΠΊΠΎΠ²ΡΡΡΠ΅ΡΡΡΡ Ρ ΡΡΠΈΠΌΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΅ΡΠ°Π±Π°ΠΉΡΠ½ΡΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ. Π ΡΡΠΎΒ β Π±ΡΠ΄ΡΡΠΈ Π΄ΠΆΡΠ½ΠΈΠΎΡΠΎΠΌ. ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΡΠ΅Π±Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠΎ ΡΠ΄Π°Ρ?
Π― Π·Π½Π°Ρ Π±ΠΎΠ»ΡΡΠ΅ 20 ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΡΠΎ, Π² ΡΡΠΌ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ. Π’Π΅Π±Π΅ Π²ΡΠ΄Π°ΡΡ ΠΊΠΎΠ΄ Π½Π° Erlang, Π½Π° 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Β β ΠΊΡΡΡΠΎΠΉ, Π·Π΄ΠΎΡΠΎΠ²ΡΠΊΠΈΠΉ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΈ ΡΠ°ΠΌ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠΉΠ΄ΡΡ Π½Π΅ ΡΠ°ΠΊ, ΡΠΎ Ρ gevent Π²Ρ ΡΠΎΠΉΠ΄ΡΡΠ΅ Ρ ΡΠΌΠ° ΡΡΠΎ Π΄Π΅Π±Π°ΠΆΠΈΡΡ. Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ» ΠΎΠΏΡΡ: ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ΅Π»ΡΡ Π΄Π²Π° Π΄Π½Ρ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΡΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΡΠ»ΠΈ Π±Ρ ΠΊΡΠΎ-ΡΠΎ Π±Ρ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΠΏΠΎΠΊΠΎΠΏΠ°Π»ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅Π΄Π΅Π»Ρ, Π½Π΅ Π½Π°ΡΠ΅Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Π» Π² ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, ΠΈ Google Π½Π΅ Π½Π°ΡΠ΅Π» Π±Ρ ΡΡΠΎΠ³ΠΎ, ΡΠΎ ΠΌΡ Π±Ρ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ²ΠΈΡ Π½ΡΠ»ΠΈΡΡ.
Π NGINX ΡΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π½Ρ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ°ΡΠΈΡΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎ-ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈ, ΡΡΠΎΠ±Ρ Ρ Π²Π°Ρ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π΅ Π·Π°ΡΠΎΡΠΌΠΎΠ·ΠΈΠ»ΠΎ, ΡΡΠΎΠ±Ρ Π²Ρ Π³Π΄Π΅-ΡΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΠ»ΠΈ. Nginx ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ, Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ, ΡΡΠΎ Π²Π·ΡΡΡΒ β WSGI, PHP-FPM, Gunicorn, Unicorn. Nginx ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ, Π°Π΄ΠΌΠΈΠ½Π°ΠΌ ΠΎΡΠ΄Π°Π»ΠΈ, ΠΎΠ½ΠΈ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ Ρ ΡΡΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Nginx ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ. Π― ΠΎΠ± ΡΡΠΎΠΌ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΠΏΠΎΠ·ΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°ΠΆΡ. ΠΠΊΡΠ°ΡΡΠ΅ Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ ΡΠ°Π·Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ½ΡΠ» Π·Π°ΠΏΡΠΎΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π» ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ΄Π°Π» ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Nginx ΠΊΡΡΡ, Π½ΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΎΠ½ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΠΈΠ±ΠΎΠΊ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ Π²ΡΠ΅Ρ ΡΠ΅Ρ ΠΊΡΡΡΡΡ ΡΠΈΡΠΊΠ°Ρ , ΡΡΠΎ ΡΠ΅Π±ΡΡΠ° Π²ΠΏΠΈΡ Π½ΡΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³, ΠΏΡΠΈ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ. ΠΡΠΎΠΉ ΠΌΠΎΡΠΈ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Π±ΡΡΠ° ΠΈΠ· Taobao ΠΊΠΎΠ³Π΄Π°-ΡΠΎ Π΄Π°Π²Π½ΠΎ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π»Π΅Ρ Π²ΠΎΡΠ΅ΠΌΡ Π½Π°Π·Π°Π΄, Π²ΡΡΡΠΎΠΈΠ»ΠΈ ΡΡΠ΄Π° Lua. Π§ΡΠΎ ΠΎΠ½ Π΄Π°ΡΡ?
- Π Π°Π·ΠΌΠ΅Ρ. ΠΠ½ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ. LuaJIT Π΄Π°Π΅Ρ Π³Π΄Π΅-ΡΠΎ 100-200 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ ΠΎΠ²Π΅ΡΡ Π΅Π΄Π° ΠΏΠΎ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ²Π΅ΡΡ Π΅Π΄ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
- Π‘ΠΊΠΎΡΠΎΡΡΡ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ LuaJIT Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Π±Π»ΠΈΠ·ΠΎΠΊ ΠΊ C, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΠΎΠ½ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°Π΅Ρ Java, Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Β β ΠΎΠ±Π³ΠΎΠ½ΡΠ΅Ρ Π΅Ρ. ΠΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ½ ΡΡΠΈΡΠ°Π»ΡΡ state of art, ΠΊΡΡΡΠ΅ΠΉΡΠΈΠΌ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. Π‘Π΅ΠΉΡΠ°Ρ Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΊΡΡΡΡΠ΅, Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΡΠ΅Π½Ρ ΡΡΠΆΠ΅Π»ΡΠ΅, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΠΎΡ ΠΆΠ΅ V8. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ JS-Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΈ Π΄ΠΆΠ°Π²ΠΎΠ²ΡΠΊΠΈΠΉ HotSpot Π² ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ ΡΠΎΡΠΊΠ°Ρ Π±ΡΡΡΡΠ΅Π΅, Π½ΠΎ Π² ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ ΠΌΠ΅ΡΡΠ°Ρ Π²ΡΡ Π΅ΡΡ ΠΏΡΠΎΠΈΠ³ΡΡΠ²Π°ΡΡ.
- ΠΡΠΎΡΡΠΎΡΠ° Π² ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° Π½Π° Perl, ΠΈ Π²Ρ Π½Π΅ Booking, Π²Ρ Π½Π΅ Π½Π°ΠΉΠ΄ΡΡΠ΅ ΠΏΠ΅ΡΠ»ΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ². ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΡ Π½Π΅Ρ, ΠΈΡ Π²ΡΠ΅Ρ Π·Π°Π±ΡΠ°Π»ΠΈ, Π° ΡΡΠΈΡΡ ΠΈΡ Π΄ΠΎΠ»Π³ΠΎ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² Π½Π° ΡΠ΅ΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡ ΡΠΎΠΆΠ΅ ΠΈΡ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠΈΠ²Π°ΡΡ, Π»ΠΈΠ±ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ. Π ΡΠ»ΡΡΠ°Π΅ Lua Π²ΡΡ ΠΏΡΠΎΡΡΠΎ. Lua ΡΡΠΈΡΡΡ Π»ΡΠ±ΡΠΌ Π΄ΠΆΡΠ½ΠΈΠΎΡΠΎΠΌ Π·Π° ΡΡΠΈ Π΄Π½Ρ. ΠΠ½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ Π³Π΄Π΅-ΡΠΎ ΡΠ°ΡΠ° Π΄Π²Π°, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ. Π§Π΅ΡΠ΅Π· Π΄Π²Π° ΡΠ°ΡΠ° Ρ ΡΠΆΠ΅ ΠΏΠΈΡΠ°Π» ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½. ΠΠ΄Π΅-ΡΠΎ ΡΠ΅ΡΠ΅Π· Π½Π΅Π΄Π΅Π»Ρ ΠΎΠ½ ΠΏΡΡΠΌΠΎ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½ ΠΈ ΡΠ΅Ρ Π°Π».
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
Π’ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅Π³ΠΎ. Π OpenResty ΡΠΎΠ±ΡΠ°Π»ΠΈ ΠΊΡΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, ΠΊΠ°ΠΊ Π»ΡΠ°ΡΠ½ΡΡ
, ΡΠ°ΠΊ ΠΈ ΡΠ½Π΄ΠΆΠΈΠ½ΡΠΎΠ²ΡΠΊΠΈΡ
. Π Ρ Π²Π°Ρ Π²ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎΠ΅Β β Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠ» ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΡΠΈΠΌΠ΅ΡΡ
Π₯Π²Π°ΡΠΈΡ Π»ΠΈΡΠΈΠΊΠΈ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΊΠΎΠ΄Ρ. ΠΠΎΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ Hello World:
Π§ΡΠΎ Π·Π΄Π΅ΡΡ Π΅ΡΡΡ? ΡΡΠΎ ΡΠ½Π΄ΠΆΠΈΠ½ΡΠΎΠ²ΡΠΊΠΈΠΉ location. ΠΡ Π½Π΅ ΠΏΠ°ΡΠΈΠΌΡΡ, Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ ΡΠ²ΠΎΠΉ ΡΠΎΡΡΠΈΠ½Π³, Π½Π΅ Π±Π΅ΡΡΠΌ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π³ΠΎΡΠΎΠ²ΡΠΉΒ β Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π² NGINX, ΠΌΡ ΠΆΠΈΠ²Π΅ΠΌ Ρ
ΠΎΡΠΎΡΠΎ ΠΈ Π»Π΅Π½ΠΈΠ²ΠΎ.
content_by_lua_block
β ΡΡΠΎ Π±Π»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ ΠΌΡ ΠΎΡΠ΄Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Lua-ΡΠΊΡΠΈΠΏΡΠ°. ΠΠ΅ΡΠ΅ΠΌ ΡΠ½Π΄ΠΆΠΈΠ½ΡΠΎΠ²ΡΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ remote_addr
ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π΅Ρ Π² string.format
. ΠΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ sprintf
, ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Lua, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ. Π ΠΎΡΠ΄Π°ΡΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
ΠΠΎ Π²Π΅ΡΠ½ΡΠΌΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΌΠΈΡ. Π ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ Hello World. Π£ Π½Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ Ρ
ΠΎΠ΄ΠΈΡ Π² Π±Π°Π·Ρ ΠΈΠ»ΠΈ Π΅ΡΡ ΠΊΡΠ΄Π°-ΡΠΎ ΠΈ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠ΄ΡΡ ΠΎΡΠ²Π΅ΡΠ°.
ΠΡΠΎΡΡΠΎ ΡΠΈΠ΄ΠΈΡ ΠΈ ΠΆΠ΄ΡΡ. ΠΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ
ΠΎΡΠΎΡΠΎ. ΠΠΎΠ³Π΄Π° ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ 100.000 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½Π°ΠΌ ΠΎΡΠ΅Π½Ρ ΡΡΠΆΠΊΠΎ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°ΠΊΠΈΠ΄Π°Π΅ΠΌ ΠΏΡΠΎΡΡΠ΅Π½ΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠ΄Π΅ΠΌ ΠΈΡΠΊΠ°ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΈΠΊΠΎΠ². Π’ΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ ΠΈΡΠΊΠ°ΡΡ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΈΡΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π° ΠΈ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°Π» Β«ΠΊΠΎΡΡΡΠ°Β», ΠΌΡ Π΅ΠΌΡ Π½Π°ΠΉΠ΄ΡΠΌ ΠΊΠΎΡΠΈΠΊΠΎΠ², ΠΏΡΡΠΈΡΡΠΈΠΊΠΎΠ² ΠΈ ΠΏΡΠΎΡΠ΅Π΅. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° Π±ΡΠΊΠ΅Π½Π΄Π΅. ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΠΎ ΡΠ°ΠΊ:
ΠΠ²Π΅ ΡΡΡΠΎΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π°ΠΌ Π·Π°Π±ΡΠ°ΡΡ GET-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΠ°Π»ΡΡΠ΅ ΠΌΡ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Ρ ΡΠ°Π±Π»ΠΈΡΠΊΠΎΠΉ ΠΏΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΡΠ»ΠΎΠ²Ρ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΠΌ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠΌ ΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΡΡ ΠΏΡΠΎΡΡΠΎ. ΠΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΠΎ ΡΠ°ΠΊ:
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠΊΡ resty.mysql
, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅. ΠΠ°ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡ, Π²ΡΡ Π³ΠΎΡΠΎΠ²ΠΎΠ΅. Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ, ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ SQL-Π·Π°ΠΏΡΠΎΡ:
Π’ΡΡ Π½Π΅ΠΌΠ½ΠΎΠΆΠ΅ΡΠΊΠΎ ΡΡΡΠ°ΡΠ½ΠΎ, Π½ΠΎ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ΄Π΅ΡΡ 10Β β ΡΡΠΎ Π»ΠΈΠΌΠΈΡ. ΠΡ Π²ΡΡΠ°ΡΠΊΠΈΠ²Π°Π΅ΠΌ 10 Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΌΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅, Π½Π΅ Ρ
ΠΎΡΠΈΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ. Π SQL ΠΏΡΠΎ Π»ΠΈΠΌΠΈΡ Ρ Π·Π°Π±ΡΠ».
ΠΠ°Π»ΡΡΠ΅ ΠΌΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ. ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Lua-ΡΠ°Π±Π»ΠΈΡΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ reqs
, ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ ngx.location.capture_multi
.
ΠΡΠ΅ ΡΡΠΈ Π·Π°ΠΏΡΠΎΡΡ ΡΡ
ΠΎΠ΄ΡΡ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Ρ, ΠΈ Π½Π°ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΎΡΠ²Π΅ΡΡ. ΠΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΠ°Π²Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΡΠ²Π΅ΡΠ° ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ. ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π²ΡΠ΅ ΠΎΡΡΡΡΠ΅Π»ΠΈΠ²Π°ΡΡΡΡ Π·Π° 50 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄, ΠΈ ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΎΡΠ½Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΠΎ ΠΎΡΠ²Π΅Ρ Ρ Π½Π°Ρ ΠΏΡΠΈΠ΄ΡΡ Π·Π° 50 ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π»Π΅Π½ΠΈΠ²ΡΠ΅ ΠΈ Π½Π΅ Ρ
ΠΎΡΠΈΠΌ ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ HTTP ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΌΡ Π·Π°ΡΡΠ°Π²ΠΈΠΌ NGINX Π΄Π΅Π»Π°ΡΡ Π²ΡΡ Π·Π° Π½Π°Ρ. ΠΠ°ΠΊ Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΡΠ°ΠΌ Π±ΡΠ» Π·Π°ΠΏΡΠΎΡ Π½Π° url/fetch
, Π²ΠΎΡ ΠΎΠ½:
ΠΡ Π΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΉ proxy_pass
, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΠΊΡΠ΄Π° Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΈ Ρ Π½Π°Ρ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠΎ ΡΡΠΎΠ³ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, Π½Π°ΠΌ Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π‘Π°ΠΌΠ°Ρ ΠΏΡΠΎΡΡΠ°Ρ ΠΈΠ΄Π΅ΡΒ β ΡΡΠΎ Π²ΡΡ ΡΠ΅ΡΠΈΠ»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² JSON, Π»Π΅Π³ΠΊΠΎ, Π² Π΄Π²Π΅ ΡΡΡΠΎΡΠΊΠΈ. ΠΡΠ΄Π°ΡΠΌ Content-Type, ΠΎΡΠ΄Π°ΡΠΌ JSON.
ΠΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Ρ ΠΎΡΠ΅Ρ ΡΠΈΡΠ°ΡΡ JSON. ΠΠ°Π΄ΠΎ ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΡ ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π΅ΡΠΎΠ². ΠΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ½Π°ΡΠ°Π»Ρ Π΄Π΅Π»Π°ΡΡ. ΠΠ° ΠΈ ΡΠ΅ΠΎΡΠ½ΠΈΠΊΠΈ ΡΠΊΠ°ΠΆΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈΡΠ΅ΠΌ, ΡΠΎ ΠΈΠΌ Π±Π΅Π· ΡΠ°Π·Π½ΠΈΡΡ. Π Π΅ΡΠ»ΠΈ ΠΌΡ ΠΈΠΌ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΊΠΎΠ½ΡΠ΅Π½Ρ Π²ΡΠ΄Π°ΡΠΌ, ΡΠΎ ΠΎΠ½ΠΈ ΡΠΊΠ°ΠΆΡΡ, ΡΡΠΎ Ρ Π½Π°Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΡΡ.
Π§ΡΠΎ Ρ ΡΡΠΈΠΌ Π΄Π΅Π»Π°ΡΡ? Π‘Π°ΠΌΠΎ ΡΠΎΠ±ΠΎΠΉ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠ΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ HTML. ΠΠ΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΊΠ°ΠΌΠΈΒ β Π½Π΅ ΠΊΠΎΠΌΠΈΠ»ΡΡΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° lua-resty-template
.
ΠΡ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ ΡΡΠΈ ΡΡΡΠ°ΡΠ½ΡΠ΅ Π±ΡΠΊΠ²Ρ OPM. OpenResty ΠΈΠ΄Π΅Ρ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π΅ΡΡ ΠΊΡΡΡ ΡΠ°Π·Π½ΡΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, lua-resty-template
. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², Π±Π»ΠΈΠ·ΠΊΠΈΠΉ ΠΊ Django templates. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π²ΠΎΡ ΡΠ°ΠΊ:
ΠΡ Π²Π·ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΡΠ΅Π½Π΄Π΅ΡΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½ ΠΎΠΏΡΡΡ ΠΆΠ΅ Π² Π΄Π²Π΅ ΡΡΡΠΎΡΠΊΠΈ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°ΡΡΠ»ΠΈΠ², ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΊΠΎΡΠΈΠΊΠΎΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΡΠ°ΡΡΠΈΡΠΈΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ, ΠΎΠ½ Π½Π° ΠΊΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΠ» Π΅ΡΡ ΠΈ ΠΌΠΎΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΡΠΈΠΊΠ°. ΠΠ°Π»ΠΎ Π»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ, ΠΎΠ½ ΠΈΡΠΊΠ°Π» ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠΎΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ.
ΠΡΡ ΠΊΡΡΡΠΎ, Π½ΠΎ ΠΌΡ ΠΆΠ΅ Π² Π΄Π΅Π²Π΅Π»ΠΎΠΏΠΌΠ΅Π½ΡΠ΅, ΠΈ Π½Π΅ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ NGINX ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ OpenResty:
- ΠΠ΅ΡΠ²Π°Ρ ΡΠ°Π·Π°Β β access, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠ΅Π», ΠΈ ΠΌΡ Π½Π° Π½Π΅Π³ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΏΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ, ΠΏΠΎ IP-Π°Π΄ΡΠ΅ΡΡ, ΠΏΠΎ ΠΏΡΠΎΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ. ΠΠΎΠΆΠ½ΠΎ ΡΡΠ°Π·Ρ ΠΎΡΡΡΠ±ΠΈΡΡ Π΅Π³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΡΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, Π»ΠΈΠ±ΠΎ, Π΅ΡΠ»ΠΈ Π½Π°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ Π»Π΅Π³ΠΊΠΎ ΡΡΠ±ΠΈΡΡ Π½Π° ΡΡΠΎΠΉ ΡΠ°Π·Π΅.
- rewrite. ΠΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΠ°.
- content. ΠΡΠ΄Π°ΡΠΌ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- headers filter. ΠΠΎΠ΄ΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΎΡΠ²Π΅ΡΠ°. ΠΡΠ»ΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ
proxy_pass
, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΡΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. - body filter. ΠΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π»ΠΎ.
- logΒ β Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈ Π² elasticsearch Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡ.
ΠΠ°ΡΠ° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
ΠΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΡΠΎ Π² ΡΠΎΡ location
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ, ΠΈ Π·Π°ΡΡΠ½Π΅ΠΌ ΡΡΠ΄Π° ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:
ΠΡ ΡΠΌΠΎΡΡΠΈΠΌ, Π΅ΡΡΡ Π»ΠΈ Ρ Π½Π°Ρ cookie token. ΠΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ ΠΊΠΈΠ΄Π°Π΅ΠΌ Π½Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Ρ
ΠΈΡΡΡΠ΅ ΠΈ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΠ³Π°Π΄Π°ΡΡΡΡ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ cookie token. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΅ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π΅Ρ Π² Redis:
ΠΠΎΠ΄ ΡΠ°Π±ΠΎΡΡ Ρ Redis ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ Π½ΠΈΡΠ΅ΠΌ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ
ΡΠ·ΡΠΊΠΎΠ². ΠΡΠΈ ΡΡΠΎΠΌ Π²Π΅ΡΡ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ ΡΡΠΎ ΡΠ°ΠΌ, ΡΡΠΎ Π·Π΄Π΅ΡΡ, ΠΎΠ½ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ. ΠΡΠ»ΠΈ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ. ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΊΠ°ΠΊ Ρ gevent, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Ρ
ΠΎΡΠΎΡΠΎ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΡΠ°ΠΌΡ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ:
ΠΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΈΡΠ°ΡΡ ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ POST-Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅. ΠΡΠ»ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅, ΡΠΎ ΠΊΠΈΠ΄Π°Π΅ΠΌ Π½Π° Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ. Π Π΅ΡΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅, ΡΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ token Π² Redis:
ΠΠ΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ cookie, ΡΡΠΎ ΡΠΎΠΆΠ΅ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² Π΄Π²Π΅ ΡΡΡΠΎΡΠΊΠΈ:
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ, ΡΠΌΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ. ΠΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π»ΡΠ΄ΡΠΌ ΠΊΠΎΡΠΈΠΊΠΎΠ². Π₯ΠΎΡΡ ΠΊΡΠΎ Π½Π°Ρ Π·Π½Π°Π΅Ρ. ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠΉΠ΄ΡΠΌΡΡ ΠΏΠΎ ΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½Π΅.
- ΠΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΡΠΉ Π±ΡΠΊΠ΅Π½Π΄. ΠΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΌ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π² Π±ΡΠΊΠ΅Π½Π΄ Π²ΡΠ΄Π°ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΡΡΡ-ΡΡΡΡ Π΄Π°Π½Π½ΡΡ : Π³Π΄Π΅-ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π°ΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΡ, Π³Π΄Π΅-ΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ²Π΅ΡΡΠΈ, ΡΠΊΠ°Π·Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΠ°ΠΉΡΠ΅, ΠΏΡΠΈΠΊΡΡΡΠΈΡΡ ΡΡΡΡΡΠΈΠΊ ΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ. Π§ΡΠΎ-ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅. ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΊΡΡΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠ° ΡΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ Π±ΡΡΡΡΠΎ, Π»Π΅Π³ΠΊΠΎ ΠΈ Π·Π΄ΠΎΡΠΎΠ²ΠΎ.
- ΠΡΠ΅ΠΏΡΠΎΡΠ΅ΡΡΠΈΠ½Π³ Π΄Π°Π½Π½ΡΡ . ΠΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΌ Ρ ΠΎΡΠ΅ΡΡΡ Π²ΡΡΡΠΎΠΈΡΡ Π² Π½Π°ΡΡ ΡΡΡΠ°Π½ΠΈΡΠΊΡ ΡΠ΅ΠΊΠ»Π°ΠΌΡ, ΠΏΡΠΈΡΡΠΌ ΡΡΡ ΡΠ΅ΠΊΠ»Π°ΠΌΡ ΠΌΡ Π±Π΅ΡΡΠΌ 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++ ΠΈ ΡΡΠ»ΡΡΠ°Π», ΡΡΠΎ Π½Π° Lua Π½Π°ΠΏΠΈΡΠ°Π½ ΡΠΎΠ»ΡΠΊΠΎ Tarantool. ΠΡΠΎ Π½Π΅ ΡΠ°ΠΊ, Π½Π° Lua ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ. ΠΡΠΈΠΌΠ΅ΡΡ: OpenResty, XMPP-ΡΠ΅ΡΠ²Π΅Ρ Prosody, ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Love2D, Lua ΡΠΊΡΠΈΠΏΡΡΠ΅ΡΡΡ Π² Warcraft ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ . Lua-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΈ ΠΎΡΠ·ΡΠ²ΡΠΈΠ²ΠΎΠ΅ ΠΊΠΎΠΌΠΌΡΡΠ½ΠΈΡΠΈ. ΠΡΠ΅ ΠΌΠΎΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ Lua ΡΠ΅ΡΠ°Π»ΠΈΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΡΠΎΠ². ΠΠΎΠ³Π΄Π° ΠΏΠΈΡΠ΅ΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΡΡΠ»ΠΊΠΈ, Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ ΡΠΆΠ΅ ΠΊΡΡΠ° ΠΎΡΠ²Π΅ΡΠΎΠ², ΡΠ°ΡΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΠΎ ΠΈ ΠΊΠ°ΠΊ, ΡΡΠΎ ΠΊ ΡΠ΅ΠΌΡ. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ Π²Π΅Π·Π΄Π΅ ΡΠ°ΠΊΠΎΠ΅ Π΄ΠΎΠ±ΡΠΎΠ΅ Π΄ΡΡΠ΅Π²Π½ΠΎΠ΅ ΠΊΠΎΠΌΠΌΡΡΠ½ΠΈΡΠΈ.
ΠΠΎ OpenResty Π΅ΡΡΡ GitHub, ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈ issue, Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ ΡΠ»ΠΎΠΌΠ°Π»ΠΎΡΡ. ΠΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΡΡΠ»ΠΊΠΈ Π½Π° Google Groups, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΎΠ±ΡΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, Π΅ΡΡΡ ΡΠ°ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΊΠΈΡΠ°ΠΉΡΠΊΠΎΠΌΒ β ΠΌΠ°Π»ΠΎ Π»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ, Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΌ Π²Ρ Π½Π΅ Π²Π»Π°Π΄Π΅Π΅ΡΠ΅, Π° Π·Π½Π°Π½ΠΈΡ ΠΊΠΈΡΠ°ΠΉΡΠΊΠΎΠ³ΠΎ Π΅ΡΡΡ.
ΠΡΠΎΠ³ΠΈ
- ΠΠ°Π΄Π΅ΡΡΡ ΡΠΌΠΎΠ³ Π΄ΠΎΠ½Π΅ΡΡΠΈ, ΡΡΠΎ OpenRestyΒ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, Π·Π°ΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄ Π²Π΅Π±.
- Π£ Π½Π΅Π³ΠΎ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΠΎΡΠΎΠ³ Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠΎΠ΄ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΡΠΎ, Π½Π° ΡΡΠΌ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ, ΡΠ·ΡΠΊ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ΅Π½.
- ΠΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ I/O Π±Π΅Π· ΠΊΠΎΠ»Π»Π±Π΅ΠΊΠΎΠ², Ρ Π½Π°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π»Π°ΠΏΡΠΈ, ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°ΠΏΠΈΡΠ°ΡΡ Π² NodeJS.
- Π£ Π½Π΅Π³ΠΎ Π»Π΅Π³ΠΊΠΈΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ NGINX c Π½ΡΠΆΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ ΠΈ Π½Π°Ρ ΠΊΠΎΠ΄, ΠΈ Π²ΡΡ ΡΡΠ°Π·Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
- ΠΠΎΠ»ΡΡΠΎΠ΅ ΠΈ ΠΎΡΠ·ΡΠ²ΡΠΈΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ.
Π― Π½Π΅ ΡΠ°ΡΡΠΊΠ°Π·Π°Π» Π² Π΄Π΅ΡΠ°Π»ΡΡ ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ, ΡΠ°ΠΌ ΠΏΠΎΠ»ΡΡΠ°Π»ΡΡ ΠΎΡΠ΅Π½Ρ Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΠ°ΡΡΠΊΠ°Π·.
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com