αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› 'a' αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 'a' αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžš hack αž˜αž½αž™αŸ”

αžšαžΏαž„β€‹αž˜αž·αž“β€‹αžŸαž”αŸ’αž”αžΆαž™β€‹αž…αž·αžαŸ’αžβ€‹αž”αŸ†αž•αž»αžβ€‹αž”αžΆαž“β€‹αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αž…αŸ†αž–αŸ„αŸ‡β€‹αž˜αž·αžαŸ’αžβ€‹αž—αž€αŸ’αžαž·β€‹αžšαž”αžŸαŸ‹β€‹αžαŸ’αž‰αž»αŸ†β€‹αž˜αŸ’αž“αžΆαž€αŸ‹αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαžΌαž…αž‡αžΆαž˜αž·αž“αžŸαž”αŸ’αž”αžΆαž™αž…αž·αžαŸ’αžαžŠαžΌαž…αžŠαŸ‚αž›αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Mikhail αžœαžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž€αžΆαžšαž€αž˜αŸ’αžŸαžΆαž“αŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ†αŸ”

αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžαŸ‚αž“αž·αž™αžΆαž™αžαžΆαž˜αž·αžαŸ’αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‚αžΊαž›αŸ’αž’αžŽαžΆαžŸαŸ‹ αž™αžΌαž“αžΈαž€αŸ”-user: αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αž›αž½αž“αž―αž„αž”αžΆαž“αŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ MySQL, αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ PHP αž“αž·αž„αž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŸαžΆαž˜αž‰αŸ’αž‰ nginx.
αž αžΎαž™αž‚αžΆαžαŸ‹αž˜αžΆαž“αž‚αŸαž αž‘αŸ†αž–αŸαžšαžšαžΆαž”αŸ‹αžŸαž·αž” αž¬αž˜αž½αž™αž€αž“αŸ’αž›αŸ‡ αžŠαŸ‚αž›αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹αž§αž”αž€αžšαžŽαŸαžŸαŸ†αžŽαž„αŸ‹αŸ”

αž‚αŸαž αž‘αŸ†αž–αŸαžšαž˜αž½αž™αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž‚αŸαž αž‘αŸ†αž–αŸαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŠαŸ‚αž›αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹ sawsaws αžŸαŸ’αžαž·αžαž“αŸ…αž™αŸ‰αžΆαž„αžšαžΉαž„αž˜αžΆαŸ†αž“αŸ…αž€αŸ’αž“αž»αž„ TOP αž“αŸƒαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŸαŸ’αžœαŸ‚αž„αžšαž€αŸ” αž‚αŸαž αž‘αŸ†αž–αŸαžšβ€‹αž“αŸαŸ‡β€‹αž‚αžΊβ€‹αž‡αžΆβ€‹αž’αŸ’αž“αž€β€‹αž–αž·αž“αž·αžαŸ’αž™β€‹αž˜αžΎαž›β€‹αž˜αž·αž“β€‹αž˜αŸ‚αž“β€‹αž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜ αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž˜αžΆαž“β€‹αž“αžšαžŽαžΆβ€‹αž˜αŸ’αž“αžΆαž€αŸ‹β€‹αž…αžΌαž›β€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž‘αž˜αŸ’αž›αžΆαž”αŸ‹β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αžœαžΆαž™β€‹αž”αŸ’αžšαž αžΆαžšβ€‹αžœαžΆβ€‹αŸ” αž“αŸ„αŸ‡αŸ” DDoSαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž€αž˜αŸ’αž›αžΆαŸ†αž„αžŸαžΆαž αžΆαžœ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž–αž½αž€αž‚αŸαžŸαžšαžŸαŸαžšαž˜αžαž·αž’αžΆαžŸαž’αžΆαž—αžΆαžŸ αž αžΎαž™αž•αŸ’αž‰αžΎαž€αžΆαžšαž”αŸ†αž–αžΆαž“αž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αž”αž„αŸ’αž αŸ„αŸ‡ αž“αž·αž„αž‘αŸ… RKN αŸ”
αžšαŸ†αž–αŸαž…αž“αŸ„αŸ‡ αž’αŸ’αžœαžΈαŸ—αž”αžΆαž“αžŸαŸ’αž„αž”αŸ‹αž‘αŸ…αžœαž·αž‰ αž αžΎαž™αž—αžΆαž–αžŸαŸ’αž„αž”αŸ‹αžŸαŸ’αž„αžΆαžαŸ‹αž“αŸαŸ‡αž”αžΆαž“αž”αŸ’αžšαŸ‚αž‘αŸ…αž‡αžΆαž˜αž·αž“αž›αŸ’αž’ αž αžΎαž™αž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αŸαŸ‡αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αž“αŸ’αžαž·αž…αž˜αŸ’αžαž„ αŸ— αž…αžΆαž€αž…αŸαž‰αž–αžΈαž”αž“αŸ’αž‘αžΆαžαŸ‹αž€αŸ†αž–αžΌαž›αž“αŸƒαž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αžœαŸ‚αž„αžšαž€αŸ”

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› 'a' αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 'a' αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž˜αžΆαž“αž€αžΆαžšαž›αž½αž…αž…αžΌαž›

αž“αŸαŸ‡β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž›αžΎαž€β€‹αž‘αžΎαž„β€‹αžšαž”αžŸαŸ‹β€‹ Admin αž•αŸ’αž‘αžΆαž›αŸ‹αŸ”

αž‡αž·αžβ€‹αžŠαž›αŸ‹β€‹αž˜αŸ‰αŸ„αž„β€‹αž…αžΌαž›β€‹αž‚αŸαž„β€‹αž αžΎαž™β€‹αž–αŸαž›β€‹αž‘αžΌαžšαžŸαž–αŸ’αž‘β€‹αž”αž“αŸ’αž›αžΊβ€‹αž‘αžΎαž„αŸ– β€œαžŸαžΆαž“ αž―αž„β€‹αž˜αž·αž“β€‹αž˜αžΎαž›β€‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“β€‹αž”αž˜αŸ’αžšαžΎβ€‹αžαŸ’αž‰αž»αŸ†β€‹αž‘αŸ? αžœαžΆαž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžαŸ’αž‰αž»αŸ†αžαžΆαžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž›αž½αž…αž…αžΌαž› αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αž”αž„αŸ’αž αžΆαž‰αžœαžΆαž”αžΆαž“αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž˜αž·αž“αž”αžΆαž“αž…αžΆαž€αž…αŸαž‰αž–αžΈαžαŸ’αž‰αž»αŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž”αŸ’αžαžΆαž αŸαž‘αžΈαž”αžΈαž“αŸ„αŸ‡αž‘αŸαŸ” αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αžŠαž›αŸ‹β€‹αž–αŸαž›β€‹αž αžΎαž™β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αžαŸ’αž‰αž»αŸ†β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž€αžΆαžšβ€‹αž–αŸ’αž™αžΆαž”αžΆαž›β€‹αž‡αŸ†αž„αžΊβ€‹αž†αŸ’αž€αž½αžβ€‹αž‡αŸ’αžšαžΌαž€?

αž’αŸ’αžœαžΈβ€‹αžŠαŸ‚αž›β€‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž‚αžΊβ€‹αž€αžΆαžšβ€‹αž–αž·αž—αžΆαž€αŸ’αžŸαžΆβ€‹αžšαž™αŸˆαž–αŸαž›β€‹αž€αž“αŸ’αž›αŸ‡β€‹αž˜αŸ‰αŸ„αž„β€‹αžŠαŸ‚αž›β€‹αž’αžΆαž…β€‹αžŸαž„αŸ’αžαŸαž”β€‹αžŠαžΌαž…β€‹αžαžΆαž„β€‹αž€αŸ’αžšαŸ„αž˜αŸ–

  • αžŠαžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž›αž½αž…αž…αžΌαž›αž˜αžΆαž“αž‡αžΈαž‡αžΆαžαž·αžŽαžΆαžŸαŸ‹αŸ”
  • αž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž“αŸ‹αžαŸ’αž–αžŸαŸ‹αŸ”
  • αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžš (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžœαžΆαž”αžΆαž“αž€αžΎαžαž‘αžΎαž„) αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‚αŸ„αž›αžŠαŸ…αž‡αžΆαž–αž·αžŸαŸαžŸαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž“αŸαŸ‡;
  • αžαŸ†αž”αž“αŸ‹αž”αž‰αŸ’αž αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ‚αžαž˜αŸ’αžšαžΌαžœ αž αžΎαž™αž’αŸ’αž“αž€αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž™αž›αŸ‹αžαžΆαžαžΎαž˜αžΆαž“αž€αžΆαžšαž‡αŸ’αžšαŸ€αžαž…αžΌαž›αž¬αž’αžαŸ‹αŸ”
  • αž€αžΆαžš hack αž˜αž·αž“αž’αžΆαž…αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹αž€αžΌαžŠαž‚αŸαž αž‘αŸ†αž–αŸαžš αž“αž·αž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸαŸ”

αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž…αŸ†αžŽαž»αž…αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ”

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› 'a' αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 'a' αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž˜αžΆαž“αž€αžΆαžšαž›αž½αž…αž…αžΌαž›

αž˜αžΆαž“αžαŸ‚ IP frontend αž–αžŽαŸŒαžŸαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αžŠαŸ‚αž›αž˜αžΎαž›αž‘αŸ…αž›αžΎαž–αž·αž—αž–αž›αŸ„αž€αŸ” αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžšαžœαžΆαž„ backends αž“αž·αž„ frontend αž‘αŸ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚ http(s) αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹/passwords αžαž»αžŸαž‚αŸ’αž“αžΆ αž‚αŸ’αž˜αžΆαž“ keys αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸαŸ” αž“αŸ…αž›αžΎαž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αž–αžŽαŸŒαž”αŸ’αžšαž•αŸαŸ‡ αž…αŸ’αžšαž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚ 80/443 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘αŸ” IP backend αž–αžŽαŸŒαžŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αžαŸ‚αž…αŸ†αž–αŸ„αŸ‡αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αžΈαžšαž“αžΆαž€αŸ‹αžŠαŸ‚αž› Mikhail αž‡αžΏαž‡αžΆαž€αŸ‹αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ”

αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αž»αž Debian 9 αž αžΎαž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž αŸ…αž‘αžΌαžšαžŸαŸαž–αŸ’αž‘αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„ αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž…αŸ‹αž†αŸ’αž„αžΆαž™αž–αžΈαž–αž·αž—αž–αž›αŸ„αž€αžŠαŸ„αž™αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αžαžΆαž„αž€αŸ’αžšαŸ… αž αžΎαž™αž”αžΆαž“αž”αž‰αŸ’αžˆαž”αŸ‹αŸ”

β€œαž™αž›αŸ‹αž–αŸ’αžšαž˜ αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αž…αžΌαž›αž”αŸ’αžšαžΎβ€ αžαŸ’αž‰αž»αŸ†αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αž·αž‘αžŠαŸ†αžŽαŸαž€αžšαž™αŸˆαž–αŸαž›αž˜αž½αž™αž˜αŸ‰αŸ„αž„αŸ” "αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžƒαžΎαž‰αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž—αŸ’αž“αŸ‚αž€" αŸ”

αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αž·αž„αž…αŸ’αžšαžΎαž“αž‘αŸ€αžαŸ–

$ grep -F PRETTY_NAME /etc/*releas*
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
$ `echo $SHELL` --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
$ nginx -v
nginx version: nginx/1.10.3
$ gdb --version
GNU gdb (Debian 8.2.1-2) 8.2.1

αž€αŸ†αž–αž»αž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž€αžΆαžš hack αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“

αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž‡αžΆαžŠαŸ†αž”αžΌαž„αž“αŸ…αž€αŸ’αž“αž»αž„ αžšαž”αŸ€αž”αžŸαž„αŸ’αž‚αŸ’αžšαŸ„αŸ‡. αžαŸ’αž‰αž»αŸ†β€‹αžŠαžΆαž€αŸ‹β€‹αžαžΆαžŸβ€‹αž αžΎαž™β€‹αžαŸ’αžšαž‘αž”αŸ‹β€‹αž˜αž€β€‹αžœαž·αž‰αŸ” αžŸαž·αž‘αŸ’αž’αž·-αž€αŸ†αžŽαžαŸ‹αž αŸαžαž», αž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαžΆαžŸαŸ’αžšαŸ’αžαž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαž–αŸαž“αŸ’αž’ αŸ”αž›αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“ αžαŸ’αž‰αž»αŸ†αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžš αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžαŸ’αž‰αž»αŸ†αž™αž›αŸ‹αžαžΆ αž“αŸ†αž€αŸ‚αž€αžƒαžΊαž’αž˜αŸ’αž˜αžαžΆαž“αžΉαž„ "αž‘αžΎαž„" αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžαŸ’αž›αž½αž“αž‚αžΆαžαŸ‹αž€αŸαžŠαŸ„αž™ αž αžΎαž™ Misha αž”αžΆαž“ "αž‡αžΆαž“αŸ‹αžˆαŸ’αž›αžΈ" αž…αŸ’αžšαžΎαž“αžšαž½αž…αž‘αŸ…αž αžΎαž™ αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αž‚αžΆαžαŸ‹αž€αŸ†αž–αž»αž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αžαŸ’αž›αž½αž“αž―αž„αŸ” .

αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αŸ’αž“αž»αž„αžšαž”αŸ€αž”αž’αž˜αŸ’αž˜αžαžΆ αž˜αž·αž“αž‘αžΆαž“αŸ‹αž™αž›αŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžšαž€αž˜αžΎαž› αžαŸ’αž‰αž»αŸ†αžŸαž·αž€αŸ’αžŸαžΆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αŸ” αžŠαŸ†αž”αžΌαž„αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ nginx αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈ αž‡αžΆαž‘αžΌαž‘αŸ… αž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž›αžΎαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αž»αžαž‘αŸ αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αžœαžΆαŸ”
αž€αžΆαžšβ€‹αž€αŸ†αžŽαžαŸ‹β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αž˜αžΆαž“β€‹αž‘αŸ†αž αŸ†β€‹αžαžΌαž… αž˜αžΆαž“β€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αž›αŸ’αž’β€‹αž‡αžΆβ€‹αž―αž€αžŸαžΆαžšβ€‹αžšαžΆαž”αŸ‹β€‹αžŸαž·αž” αžαŸ’αž‰αž»αŸ†β€‹αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αž˜αžΎαž›β€‹αžαžΆαž˜β€‹αž–αž½αž€β€‹αžœαžΆβ€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž†αŸ’αž˜αžΆ'αž’αžΌαž˜αŸ’αžαž„αž˜αž½αž™αŸ—αŸ” αž’αŸ’αžœαžΈαŸ—αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžŸαŸ’αž’αžΆαžαžŸαŸ’αž’αŸ† αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž˜αž·αž“αžŠαžΉαž„αžαžΆαžαŸ’αž‰αž»αŸ†αžαž€αžαžΆαž“αž’αŸ’αžœαžΈαž“αŸ„αŸ‡αž‘αŸαŸ” αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‘αžΆαŸ†αž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αž’αŸ’αžœαžΎαž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰:

$ nginx -T
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž™αž›αŸ‹αž‘αŸαŸ– "αžαžΎαž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž“αŸ…αž―αžŽαžΆ?"

$ nginx -V
nginx version: nginx/1.10.3
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2' --with-ld-opt='-Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_sub_module --with-stream=dynamic --with-stream_ssl_module --with-mail=dynamic --with-mail_ssl_module

αžŸαŸ†αžŽαž½αžšαž‘αžΈαž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ…αžŸαŸ†αžŽαž½αžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈ: "αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž€αŸ†αžŽαŸ‚αž”αž»αžšαžΆαžŽαž“αŸƒ nginx αž”αŸ‚αž”αž“αŸαŸ‡?"

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‡αžΏαž‡αžΆαž€αŸ‹αžαžΆαž€αŸ†αžŽαŸ‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αž‘αžΎαž„:

$ dpkg -l nginx | grep "[n]ginx"
ii  nginx          1.14.2-2+deb10u1 all          small, powerful, scalable web/proxy server

αžαŸ’αž‰αž»αŸ†αž€αŸ†αž–αž»αž„αž αŸ…αŸ–
- Misha αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž’αŸ’αž“αž€αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž‘αžΎαž„αžœαž·αž‰ nginx?
- αž…αžΆαŸ†αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžŠαžΉαž„αž’αŸ’αžœαžΎαž™αŸ‰αžΆαž„αž˜αŸ‰αŸαž…!
- ធូខេ αž‚αŸαž„αž‘αŸ…...

Nginx αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‚αŸβ€‹αž”αž„αŸ’αž€αžΎαžβ€‹αž‘αžΎαž„β€‹αžœαž·αž‰β€‹αž™αŸ‰αžΆαž„β€‹αž…αŸ’αž”αžΆαžŸαŸ‹ αž αžΎαž™β€‹αž›αž‘αŸ’αž’αž•αž›β€‹αž“αŸƒβ€‹αž€αžΆαžšβ€‹αž…αž»αŸ‡β€‹αž”αž‰αŸ’αž‡αžΈβ€‹αžŠαŸ„αž™β€‹αž”αŸ’αžšαžΎ β€œ-T” αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž›αžΆαž€αŸ‹β€‹αžŠαŸ„αž™β€‹αž αŸαžαž»αž•αž›αŸ” αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαžŸαž„αŸ’αžŸαŸαž™αž‘αŸ€αžαž‘αŸαž’αŸ†αž–αžΈαž€αžΆαžšαž›αž½αž…αž…αžΌαž› αž αžΎαž™αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž™αž€αžœαžΆαžŠαŸ„αž™αžŸαžΆαž˜αž‰αŸ’αž‰ αž αžΎαž™ (αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈ Misha αž”αžΆαž“αž‡αŸ†αž“αž½αžŸαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ„αž™αžαŸ’αž˜αžΈαž˜αž½αž™) αž–αž·αž…αžΆαžšαžŽαžΆαž”αž‰αŸ’αž αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ”

αž αžΎαž™αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αž”αžΆαž“αž‘αž‘αž½αž›αžŸαž·αž‘αŸ’αž’αž· αž‡αžΆ root'ធអ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαžŸαž˜αž αŸαžαž»αž•αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎ αžŠαŸ†αž‘αžΎαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‘αžΎαž„αžœαž·αž‰αž αžΎαž™αžœαžΆαž‚αŸ’αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαž»αžŸαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž›αžΎαž€αž“αŸαŸ‡αž€αžΆαžšαž…αž„αŸ‹αžŠαžΉαž„αž…αž„αŸ‹αžƒαžΎαž‰αž”αžΆαž“αž™αž€αžˆαŸ’αž“αŸ‡αž€αžΆαžšαž‚αŸαž„αŸ” αžαžΎαž™αžΎαž„αž’αžΆαž…αžšαž€αžƒαžΎαž‰αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž…αž„αŸ‹αž›αžΆαž€αŸ‹αž–αžΈαž™αžΎαž„αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ?

αžαŸ„αŸ‡αž–αŸ’αž™αžΆαž™αžΆαž˜αžαžΆαž˜αžŠαžΆαž“αŸ–

$ strace nginx -T

αž™αžΎαž„αž˜αžΎαž›αž‘αŸ…αžœαžΆαž…αŸ’αž”αžΆαžŸαŸ‹αžŽαžΆαžŸαŸ‹αžαžΆαž˜αž·αž“αž˜αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ trace a la

write(1, "/etc/nginx/nginx.conf", 21/etc/nginx/nginx.conf)   = 21
write(1, "...
write(1, "n", 1

αž‚αŸ’αžšαžΆαž“αŸ‹β€‹αžαŸ‚β€‹αž‡αžΆβ€‹αž€αžΆαžšβ€‹αž›αŸαž„β€‹αžŸαžΎαž… αžŸαžΌαž˜β€‹αž”αŸ’αžšαŸ€αž”αž’αŸ€αž”β€‹αž€αžΆαžšβ€‹αžšαž€β€‹αžƒαžΎαž‰αŸ”

$ strace nginx -T 2>&1 | wc -l
264
$ strace nginx -t 2>&1 | wc -l
264

αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž€αžΌαžŠ /src/core/nginx.c

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 1;
                break;

αžαŸ’αžšαžΌαžœαž”αžΆαž“αž“αžΆαŸ†αž™αž€αž‘αŸ…αž‘αž˜αŸ’αžšαž„αŸ‹:

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                //ngx_dump_config = 1;
                break;

ឬ

            case 't':
                ngx_test_config = 1;
                break;

            case 'T':
                ngx_test_config = 1;
                ngx_dump_config = 0;
                break;

αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž€αžΆαžšαž…αž»αŸ‡αž”αž‰αŸ’αž‡αžΈαžŠαŸ„αž™ "-T" αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αž‘αŸαŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαžΎαž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ?

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž αžΎαž™αž”αž‰αŸ’αž αžΆαž‚αžΊαž˜αžΆαž“αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” ngx_dump_config αžαŸ„αŸ‡αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ†αž‘αžΎαž„αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ gdbαž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’αž˜αžΆαž“αž€αžΌαž“αžŸαŸ„αž˜αž½αž™αŸ” --with-cc-opt -g αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“ αž αžΎαž™αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž“αŸ„αŸ‡αŸ” -O2 αžœαžΆαž“αžΉαž„αž˜αž·αž“αž’αŸ’αžœαžΎαž±αŸ’αž™αž™αžΎαž„αžˆαžΊαž…αžΆαž”αŸ‹αž‘αŸαŸ” αž‘αž“αŸ’αž‘αžΉαž˜β€‹αž“αžΉαž„β€‹αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αžŠαžΉαž„β€‹αž™αŸ‰αžΆαž„β€‹αž˜αŸ‰αŸαž…β€‹αž‘αŸαŸ” ngx_dump_config αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ αž€αžšαžŽαžΈ 'T':αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž αŸ…αž”αŸ’αž›αž»αž€αž“αŸαŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžŠαŸ†αž‘αžΎαž„αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ αž€αžšαžŽαžΈ 't':

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ '-t' αž€αŸαžŠαžΌαž…αž‡αžΆ '-T'αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹ αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (ngx_dump_config) αž€αžΎαžαž‘αžΎαž„αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ αž”αŸ’αžšαžŸαž·αž“αž”αžΎ (ngx_test_config):

    if (ngx_test_config) {
        if (!ngx_quiet_mode) {
            ngx_log_stderr(0, "configuration file %s test is successful",
                           cycle->conf_file.data);
        }

        if (ngx_dump_config) {
            cd = cycle->config_dump.elts;

            for (i = 0; i < cycle->config_dump.nelts; i++) {

                ngx_write_stdout("# configuration file ");
                (void) ngx_write_fd(ngx_stdout, cd[i].name.data,
                                    cd[i].name.len);
                ngx_write_stdout(":" NGX_LINEFEED);

                b = cd[i].buffer;

                (void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos);
                ngx_write_stdout(NGX_LINEFEED);
            }
        }

        return 0;
    }

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž›αŸαžαž€αžΌαžŠαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸαŸ‡αž“αž·αž„αž˜αž·αž“αž“αŸ…αž€αŸ’αž“αž»αž„ αž€αžšαžŽαžΈ 'T':αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸαŸ”

αžŸαžΆαž€αž›αŸ’αž”αž„ nginx.confαžŠαŸ„αž™αž”αžΆαž“αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŠαŸ„αž™αž–αž·αžŸαŸ„αž’αž“αŸαžšαž½αž…αž αžΎαž™ αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžαžΆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž’αž”αŸ’αž”αž”αžšαž˜αžΆαž‚αžΊαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸαžšαŸ„αž‚αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš nginx αž”αŸ’αžšαž—αŸαž‘αŸ–

events {
}

http {
	include /etc/nginx/sites-enabled/*;
}

αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαž„αŸ’αžαŸαž”αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αŸ”

αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸ

$ gdb --silent --args nginx -t
Reading symbols from nginx...done.
(gdb) break main
Breakpoint 1 at 0x1f390: file src/core/nginx.c, line 188.
(gdb) run
Starting program: nginx -t
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Breakpoint 1, main (argc=2, argv=0x7fffffffebc8) at src/core/nginx.c:188
188     src/core/nginx.c: No such file or directory.
(gdb) print ngx_dump_config=1
$1 = 1
(gdb) continue
Continuing.
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
events {
}

http {
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map ΠΎ:$sign_user_agent:$sign_uri $sign_o
{
ΠΎ:1:0 o;
default ΠΎ;
}

map Π°:$sign_user_agent:$sign_uri $sign_a
{
Π°:1:0 a;
default Π°;
}

sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;

        include /etc/nginx/sites-enabled/*;
}
# configuration file /etc/nginx/sites-enabled/default:

[Inferior 1 (process 32581) exited normally]
(gdb) quit

αž˜αŸ’αžαž„β€‹αž˜αž½αž™β€‹αž‡αŸ†αž αžΆαž“:

  • αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαž»αž…αžˆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžš មេ ()
  • αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ
  • αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαž˜αŸ’αž›αŸƒαž“αŸƒαž’αžαŸαžšαžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ ngx_dump_config=1
  • αž”αž“αŸ’αž / αž”αž‰αŸ’αž…αž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ

αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αž˜αžΎαž›αžƒαžΎαž‰ αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžαž»αžŸαž–αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ†αžŽαŸ‚αž€αž”αŸ‰αžΆαžšαŸ‰αžΆαžŸαŸŠαžΈαžαž–αžΈαžœαžΆαŸ–

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

map ΠΎ:$sign_user_agent:$sign_uri $sign_o
{
ΠΎ:1:0 o;
default ΠΎ;
}

map Π°:$sign_user_agent:$sign_uri $sign_a
{
Π°:1:0 a;
default Π°;
}

sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž‘αžΈαž“αŸαŸ‡αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αŸ”

αž€αŸ†αžŽαžαŸ‹ αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”αžšαž”αžŸαŸ‹ yandex/googleαŸ–

map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}

αž‘αŸ†αž–αŸαžšαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαž€αž…αŸαž‰ αž”αŸ’αž›αž€, αžšαžΌαž”αž—αžΆαž–:

map $uri $sign_uri
{
"~*/wp-" 1;
default 0;
}

αž αžΎαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž’αŸ’αž›αžΆαž€αŸ‹αž€αŸ’αžšαŸ„αž˜αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž‘αžΆαŸ†αž„αž–αžΈαžšαžαžΆαž„αž›αžΎ

map ΠΎ:$sign_user_agent:$sign_uri $sign_o
{
ΠΎ:1:0 o;
default ΠΎ;
}

map Π°:$sign_user_agent:$sign_uri $sign_a
{
Π°:1:0 a;
default Π°;
}

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘ html- αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ†αž–αŸαžš 'ធូ' αž“αŸ…αž›αžΎ 'o' ΠΈ 'A' αž“αŸ…αž›αžΎ 'a':

sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;

αž‡αžΆαž€αžΆαžšαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž—αžΆαž–αž‘αž“αŸ‹αž—αŸ’αž›αž“αŸ‹αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž‚αžΊαžαžΆ 'a' != 'a' αž€αŸαžŠαžΌαž…αž‡αžΆ 'o' != 'o':

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› 'a' αž˜αž·αž“αžŸαŸ’αž˜αžΎαž“αžΉαž„ 'a' αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž˜αžΆαž“αž€αžΆαžšαž›αž½αž…αž…αžΌαž›

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŸαŸ’αžœαŸ‚αž„αžšαž€ bots αž‘αž‘αž½αž›αž”αžΆαž“ αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž’αžαŸ’αžαž”αž‘ Cyrillic αž’αž˜αŸ’αž˜αžαžΆ 100% αžŸαŸ†αžšαžΆαž˜αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚ diluted αž‡αžΆαž˜αž½αž™αž‘αžΆαžαžΆαŸ†αž„ 'a' ΠΈ 'o'. αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž αŸŠαžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαž›αŸ‹ SEO αž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αž‘αŸ†αž“αž„αžŠαŸ‚αž›αžαžΆαž€αžΆαžšαž›αŸ„αžαž’αž€αŸ’αžŸαžšαž”αŸ‚αž”αž“αŸαŸ‡αž“αžΉαž„αž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž‘αŸ…αž›αžΎαž˜αž»αžαžαŸ†αžŽαŸ‚αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž‘αŸ’αž’αž•αž›αžŸαŸ’αžœαŸ‚αž„αžšαž€αž“αŸ„αŸ‡αž‘αŸαŸ”

αžαžΎαžαŸ’αž‰αž»αŸ†αž’αžΆαž…αž“αž·αž™αžΆαž™αž’αŸ’αžœαžΈαž”αžΆαž“αž”αž»αžšαžŸαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαžŸαŸ’αžšαž˜αžΎαž›αžŸαŸ’αžšαž˜αŸƒαŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαž™αŸ„αž„

αž€αžΆαžšαž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸαž‡αžΆαž˜αž½αž™ GDB
gdb(1) β€” αž‘αŸ†αž–αŸαžšαž”αž»αžšαžŸαž›αžΈαž“αž»αž…
αž•αŸ’αž›αžΌαžœ (1) β€” αž‘αŸ†αž–αŸαžšαž”αž»αžšαžŸαž›αžΈαž“αž»αž…
Nginx - αž˜αŸ‰αžΌαžŒαž»αž› ngx_http_sub_module
αž’αŸ†αž–αžΈ saws, chainsaws αž“αž·αž„ saws αž’αž‚αŸ’αž‚αž·αžŸαž“αžΈ

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹