ΠΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½Π° ΠΈΡΡΠΎΡΠΈΡ ΡΠ΅ ΡΠ»ΡΡΠΈ Ρ Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΉ ΠΏΡΠΈΡΡΠ΅Π». ΠΠΎ ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΈ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π·Π° ΠΠΈΡ Π°ΠΈΠ», Π·Π° ΠΌΠ΅Π½ Π±Π΅ΡΠ΅ ΡΡΡΠΎ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π·Π°Π±Π°Π²Π½ΠΎ.
Π’ΡΡΠ±Π²Π° Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ ΠΌΠΎΡΡ ΠΏΡΠΈΡΡΠ΅Π» Π΅ Π΄ΠΎΡΡΠ° UNIX-ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»: ΠΌΠΎΠΆΠ΅ ΡΠ°ΠΌ Π΄Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° MySQL, PHP ΠΈ ΠΏΡΠ°Π²Π΅ΡΠ΅ ΠΏΡΠΎΡΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Nginx.
Π ΡΠΎΠΉ ΠΈΠΌΠ° Π΄ΡΠ·ΠΈΠ½Π° ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠΎΠ²Π΅, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° ΡΡΡΠΎΠΈΡΠ΅Π»Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.
ΠΠ΄ΠΈΠ½ ΠΎΡ ΡΠ΅Π·ΠΈ ΡΠ°ΠΉΡΠΎΠ²Π΅, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈ Π½Π° Π²Π΅ΡΠΈΠΆΠ½ΠΈ ΡΡΠΈΠΎΠ½ΠΈ, ΡΠ΅Π΄ΠΈ ΡΠ²ΡΡΠ΄ΠΎ Π² Π’ΠΠ Π½Π° ΡΡΡΡΠ°ΡΠΊΠΈΡΠ΅. Π’ΠΎΠ·ΠΈ ΡΠ°ΠΉΡ Π΅ Π½Π΅ΠΊΠΎΠΌΠ΅ΡΡΠΈΠ°Π»Π΅Π½ ΡΠ΅ΡΠ΅Π½Π·Π΅Π½Ρ, Π½ΠΎ Π½ΡΠΊΠΎΠΉ Π΅ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ» Π½Π°Π²ΠΈΠΊΠ° Π΄Π° Π³ΠΎ Π°ΡΠ°ΠΊΡΠ²Π°. Π§Π΅ DDoS, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π³ΡΡΠ±Π° ΡΠΈΠ»Π°, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΈΡΠ°Ρ Π½Π΅ΡΠ΅Π½Π·ΡΡΠ½ΠΈ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΎΠ±ΠΈΠ΄ΠΈ ΠΊΡΠΌ Ρ
ΠΎΡΡΠΈΠ½Π³Π° ΠΈ ΠΊΡΠΌ RKN.
ΠΠ·Π²Π΅Π΄Π½ΡΠΆ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΡΠΏΠΎΠΊΠΎΠΈ ΠΈ ΡΠΎΠ²Π° ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΈΠ΅ Π½Π΅ ΡΠ΅ ΠΎΠΊΠ°Π·Π° Π΄ΠΎΠ±ΡΠΎ ΠΈ ΡΠ°ΠΉΡΡΡ Π·Π°ΠΏΠΎΡΠ½Π° ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π΄Π° Π½Π°ΠΏΡΡΠΊΠ° ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΠ΅Π΄ΠΎΠ²Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ.

Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ°ΠΌΠ°ΡΠ° ΠΈΡΡΠΎΡΠΈΡ Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ°.
ΠΠ°Π±Π»ΠΈΠΆΠ°Π²Π°ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° Π»ΡΠ³Π°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅Π»Π΅ΡΠΎΠ½ΡΡ ΠΈΠ·Π·Π²ΡΠ½Ρ: βΠ‘Π°Π½, Π½ΡΠΌΠ° Π»ΠΈ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ ΡΡΡΠ²ΡΡΠ° ΠΌΠΈ? Π‘ΡΡΡΠ²Π° ΠΌΠΈ ΡΠ΅, ΡΠ΅ Π±ΡΡ
Ρ
Π°ΠΊΠ½Π°Ρ, Π½Π΅ ΠΌΠΎΠ³Π° Π΄Π° Π³ΠΎ Π΄ΠΎΠΊΠ°ΠΆΠ°, Π½ΠΎ ΡΡΠ²ΡΡΠ²ΠΎΡΠΎ Π½Π΅ ΠΌΠ΅ Π½Π°ΠΏΡΡΠΊΠ° Π²Π΅ΡΠ΅ ΡΡΠ΅ΡΠ° ΡΠ΅Π΄ΠΌΠΈΡΠ°. ΠΠΎΠΆΠ΅ Π±ΠΈ ΠΏΡΠΎΡΡΠΎ Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΡΠ΅ Π»Π΅ΠΊΡΠ²Π°ΠΌ ΠΎΡ ΠΏΠ°ΡΠ°Π½ΠΎΡ?β
ΠΠΎΡΠ»Π΅Π΄Π²Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΡΠ°ΡΠΎΠ²Π° Π΄ΠΈΡΠΊΡΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΎΠ±ΡΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
- ΠΏΠΎΡΠ²Π°ΡΠ° Π·Π° Ρ Π°ΠΊΠ΅ΡΡΡΠ²ΠΎ Π±Π΅ΡΠ΅ Π΄ΠΎΡΡΠ° ΠΏΠ»ΠΎΠ΄ΠΎΡΠΎΠ΄Π½Π°;
- Π½Π°ΠΏΠ°Π΄Π°ΡΠ΅Π»ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΠΏΡΠ°Π²Π° Π½Π° ΡΡΠΏΠ΅ΡΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»;
- Π°ΡΠ°ΠΊΠ°ΡΠ° (Π°ΠΊΠΎ ΡΠ΅ Π΅ ΡΡΡΡΠΎΡΠ»Π°) Π΅ Π±ΠΈΠ»Π° Π½Π°ΡΠΎΡΠ΅Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΊΡΠΌ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΡ;
- ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡΠ΅ Π·ΠΎΠ½ΠΈ ΡΠ° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΈ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π΄Π°Π»ΠΈ Π΅ ΠΈΠΌΠ°Π»ΠΎ ΠΏΡΠΎΠ½ΠΈΠΊΠ²Π°Π½Π΅;
- Ρ Π°ΠΊΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΡΠ΅Π³Π½Π΅ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ°ΠΉΡΠ° ΠΈ Π±Π°Π·ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ.
ΠΡΠ½ΠΎΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΠΎΡΠΊΠ°.

Π‘Π°ΠΌΠΎ Π±ΡΠ»ΠΎΡΠΎ IP Π»ΠΈΡΠ΅Π²ΠΎ Π»ΠΈΡΠ΅ Π³Π»Π΅Π΄Π° ΠΊΡΠΌ ΡΠ²Π΅ΡΠ°. ΠΡΠΌΠ° ΠΎΠ±ΠΌΠ΅Π½ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π΅ΠΊΠ΅Π½Π΄Π° ΠΈ ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° ΠΎΡΠ²Π΅Π½ http(s), ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅/ΠΏΠ°ΡΠΎΠ»ΠΈΡΠ΅ ΡΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ, Π½Π΅ ΡΠ° ΡΠ°Π·ΠΌΠ΅Π½Π΅Π½ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅. ΠΠ° ΡΠΈΠ²ΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΡΠΎΠ²Π΅ Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° 80/443 ΡΠ° Π·Π°ΡΠ²ΠΎΡΠ΅Π½ΠΈ. ΠΠ΅Π»ΠΈΡΠ΅ IP Π°Π΄ΡΠ΅ΡΠΈ ΡΠ° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ ΡΠ°ΠΌΠΎ Π½Π° Π΄Π²Π°ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, Π½Π° ΠΊΠΎΠΈΡΠΎ ΠΠΈΡ
Π°ΠΈΠ» ΠΈΠΌΠ° ΠΏΡΠ»Π½ΠΎ Π΄ΠΎΠ²Π΅ΡΠΈΠ΅.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° 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
Π’ΡΡΡΡ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ Π°ΠΊ
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΌ ΡΡΡΠ²ΡΡΠ°, ΠΏΡΡΠ²ΠΈ Π²Π»ΠΈΠ·Π°ΠΌ ΡΠΏΠ°ΡΠΈΡΠ΅Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ. ΠΠΎΠ½ΡΠΈΡΠ°ΠΌ Π΄ΠΈΡΠΊΠΎΠ²Π΅ΡΠ΅ ΠΈ Π³ΠΈ ΠΏΡΠ΅Π»ΠΈΡΡΠ²Π°ΠΌ Π°Π²ΡΠΎΡ-ΡΡΡΠΏΠΈ, ΠΈΡΡΠΎΡΠΈΡ, ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Ρ.Π½., Π°ΠΊΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌ Π΄Π°ΡΠΈΡΠ΅ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»Π°, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌ, ΡΠ΅ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΠΊΡΠ°ΠΊΠ΅Ρ Π±ΠΈ βΠΏΠΎΠΌΠ΅Π»β ΡΠ»Π΅Π΄ ΡΠ΅Π±Π΅ ΡΠΈ, Π° ΠΠΈΡΠ° Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ βΠΏΠΎΡΡΠΏΠΊΠ°Π»β ΠΌΠ½ΠΎΠ³ΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ ΡΡΡΡΠ΅ΡΠ΅ .
Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΌ Π² Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ, Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΡΡΡΡΡ, ΠΈΠ·ΡΡΠ°Π²Π°ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅. ΠΡΠ΅Π΄ΠΈ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΠΌ ΠΎΡ Nginx ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎ Π½ΡΠΌΠ° Π½ΠΈΡΠΎ Π΄ΡΡΠ³ΠΎ Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π° ΠΎΡΠ²Π΅Π½ Π½Π΅Π³ΠΎ.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ ΡΠ° ΠΌΠ°Π»ΠΊΠΈ, Π΄ΠΎΠ±ΡΠ΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ Π² Π΄ΡΠ·ΠΈΠ½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΏΡΠΎΡΡΠΎ Π³ΠΈ ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°ΠΌ ΠΊΠΎΡΠΊΠ°ΠΎ Π΅Π΄ΠΈΠ½ ΠΏΠΎ Π΅Π΄ΠΈΠ½. ΠΡΠΈΡΠΊΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠΈΡΡΠΎ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΠ΅ Π·Π½Π°Π΅ Π΄Π°Π»ΠΈ ΡΡΠΌ ΠΏΡΠΎΠΏΡΡΠ½Π°Π» Π½Π΅ΡΠΎ include, ΠΏΠΎΠ·Π²ΠΎΠ»Π΅ΡΠ΅ ΠΌΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΠΏΡΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ:
$ 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
Π²ΠΈΠΊΠ°ΠΌ:
- ΠΠΈΡΠ°, Π·Π°ΡΠΎ ΡΠ΅ ΡΡΠ±ΡΠ° ΠΎΡΠ½ΠΎΠ²ΠΎ Nginx?
- Π§Π°ΠΊΠ°ΠΉ, Π΄ΠΎΡΠΈ Π½Π΅ Π·Π½Π°ΠΌ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΡΠ°Π²Ρ ΡΠΎΠ²Π°!
- ΠΠΎΠ±ΡΠ΅, Π΄ΠΎΠ±ΡΠ΅, Π·Π°ΡΠΏΠΈΠ²Π°ΠΉ...
Nginx ΡΠΎΠΉ Π΅ ΡΡΠ½ΠΎ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½ ΠΈ ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° β-Tβ Π΅ ΡΠΊΡΠΈΡ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΡΠΈΡΠΈΠ½Π°. ΠΠ΅ΡΠ΅ Π½ΡΠΌΠ° Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠΌΠ½Π΅Π½ΠΈΡ Π·Π° Ρ Π°ΠΊΠ²Π°Π½Π΅ ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π³ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ΅ΡΠ΅ ΠΈ (ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΠΈΡΠ° Π²ΡΠ΅ ΠΏΠ°ΠΊ ΡΠΌΠ΅Π½ΠΈ ΡΡΡΠ²ΡΡΠ° Ρ Π½ΠΎΠ²) Π΄Π° ΡΡΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½.
Π Π½Π°ΠΈΡΡΠΈΠ½Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΡΠΊΠΎΠΉ ΠΏΠΎΠ»ΡΡΠΈ ΠΏΡΠ°Π²Π°ΡΠ° ΠΊΠΎΡΠ΅Π½'Π°, ΡΠΎΠ³Π°Π²Π° ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΠΏΡΠ΅ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΉΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΈ Π±Π΅ΡΠ΅ Π±Π΅Π·ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΡΡΡΡΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅ Π΅ Π½Π°ΡΠ΅Π΄ ΡΠ°ΠΌ, Π½ΠΎ ΡΠΎΠ·ΠΈ ΠΏΡΡ Π»ΡΠ±ΠΎΠΏΠΈΡΡΡΠ²ΠΎΡΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈ ΡΡΠ½Ρ. ΠΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ° ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° ΡΠΊΡΠΈΡΡ ΠΎΡ Π½Π°Ρ?
ΠΠ΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌ:
$ strace nginx -T
ΠΠ»Π΅Π΄Π°ΠΌΠ΅ Π³ΠΎ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π½ΡΠΌΠ° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π»ΠΈΠ½ΠΈΠΈ Π² ΡΠ»Π΅Π΄Π°ΡΠ° Π° Π»Π°
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'ΠΠ»ΠΎΠΊΠΎΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π°ΠΊΠΎ (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;
}
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π°ΠΊΠΎ ΠΊΠΎΠ΄ΡΡ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ Π² ΡΠ°Π·ΠΈ ΡΠ°ΡΡ, Π° Π½Π΅ Π² ΡΠ»ΡΡΠ°ΠΉ "Π’":, ΡΠΎΠ³Π°Π²Π° ΠΌΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ.
Π’Π΅ΡΡΠ²Π°ΠΉΡΠ΅ 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;
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ ΡΠ΅Π΄ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΡΡΠΊ.
Π Π΅ΡΠ΅Π½ User-Agentyandex/google Π½Π°:
map $http_user_agent $sign_user_agent
{
"~*yandex.com/bots" 1;
"~*www.google.com/bot.html" 1;
default 0;
}
Π‘Π΅ΡΠ²ΠΈΠ·Π½ΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΈ ΡΠ° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈ WordPress:
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-ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠΈΡΠ΅ "Π" Π½Π° 'ΠΎ' ΠΈ "Π" Π½Π° "Π°":
sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠ°, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΡΡΠ½ΠΊΠΎΡΡ Π΅ ΡΠΎΠ²Π° 'a' != 'a' ΠΊΠ°ΠΊΡΠΎ ΠΈ 'o' != 'o':

Π’Π°ΠΊΠ° Π±ΠΎΡΠΎΠ²Π΅ΡΠ΅ Π½Π° ΡΡΡΡΠ°ΡΠΊΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»Π΅Π½ ΡΠ΅ΠΊΡΡ Π½Π° 100% ΠΊΠΈΡΠΈΠ»ΠΈΡΠ°, ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½ Π±ΠΎΠΊΠ»ΡΠΊ, ΡΠ°Π·ΡΠ΅Π΄Π΅Π½ Ρ Π»Π°ΡΠΈΠ½ΠΈΡΠ° "Π°" ΠΈ 'ΠΎ'. ΠΠ΅ ΡΠΌΠ΅Ρ Π΄Π° ΠΎΠ±ΡΡΠΆΠ΄Π°ΠΌ ΠΊΠ°ΠΊ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΡΡΠ°Π·ΡΠ²Π° Π½Π° SEO, Π½ΠΎ Π΅ ΠΌΠ°Π»ΠΊΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΠ°ΠΊΠ°Π²Π° Π±ΡΡΠΊΠΎΡΠΈΡ ΠΎΡ Π±ΡΠΊΠ²ΠΈ Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»Π΅Π½ Π΅ΡΠ΅ΠΊΡ Π²ΡΡΡ
Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈΡΠ΅ Π² ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ.
ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ°, Ρ ΠΎΡΠ° Ρ Π²ΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ·ΠΎΠ²Π°Π²Π°Π½Π΅ΡΠΎ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com
