ΠΡΠ΅Π½Π΅ΠΏΡΠΈΡΡΠ½Π΅ΠΉΡΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ ΡΠ»ΡΡΠΈΠ»Π°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΌΠΎΠΈΠΌ Π·Π½Π°ΠΊΠΎΠΌΡΠΌ. ΠΠΎ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ½Π° ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΠΈΡ Π°ΠΈΠ»Π° Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΌΠ΅Π½Ρ.
ΠΠ°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΈΡΡΠ΅Π»Ρ ΠΌΠΎΠΉ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π±Π΅ UNIX-ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ: ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ mysql, php ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ nginx.
Π Π΅ΡΡΡ Ρ Π½Π΅Π³ΠΎ Π΄Π΅ΡΡΡΠΎΠΊ-ΠΏΠΎΠ»ΡΠΎΡΠ° ΡΠ°ΠΉΡΠΎΠ² ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΡ
ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ.
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΊΠΈΡ
ΡΠ°ΠΉΡΠΎΠ² ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΠΉ Π±Π΅Π½Π·ΠΎΠΏΠΈΠ»Π°ΠΌ ΠΏΠ»ΠΎΡΠ½Π΅Π½ΡΠΊΠΎ ΡΠΈΠ΄ΠΈΡ Π² Π’ΠΠe ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΈΠΊΠΎΠ². Π‘Π°ΠΉΡ ΡΡΠΎΡ β Π½Π΅ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡΠ½ΠΈΠΊ, Π½ΠΎ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΠΎΠΏΠ΅ΡΠ΅ΠΊ Π³ΠΎΡΠ»Π° ΠΈ ΠΏΠΎΠ²Π°Π΄ΠΈΠ»ΠΈΡΡ Π΅Π³ΠΎ Π°ΡΠ°ΠΊΠΎΠ²Π°ΡΡ. Π’ΠΎ DDoS, ΡΠΎ Π±ΡΡΡΡΠΎΡΡ, ΡΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΡ Π½Π°ΠΏΠΈΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π±Π½ΡΠ΅ ΠΈ ΡΠ»ΡΡ Π°Π±ΡΠ·Ρ Π½Π° Ρ
ΠΎΡΡΠΈΠ½Π³ ΠΈ Π² Π ΠΠ.
ΠΠ΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ Π²ΡΡ ΡΡΠΈΡ
Π»ΠΎ ΠΈ ΡΡΠΎ Π·Π°ΡΠΈΡΡΠ΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π΅ ΠΊ Π΄ΠΎΠ±ΡΡ, Π° ΡΠ°ΠΉΡ Π½Π°ΡΠ°Π» ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ ΠΏΠΎΠΊΠΈΠ΄Π°ΡΡ Π²Π΅ΡΡ
Π½ΠΈΠ΅ ΡΡΡΠΎΡΠΊΠΈ Π²ΡΠ΄Π°ΡΠΈ.
Π’ΠΎ Π±ΡΠ»Π° ΠΏΡΠΈΡΠΊΠ°Π·ΠΊΠ°, Π΄Π°Π»ΡΡΠ΅ ΡΠ°ΠΌΠ° Π°Π΄ΠΌΠΈΠ½ΡΠΊΠ°Ρ Π±Π°ΠΉΠΊΠ°.
ΠΡΠ΅ΠΌΡ Π±Π»ΠΈΠ·ΠΈΠ»ΠΎΡΡ ΠΊΠΎ ΡΠ½Ρ ΠΊΠΎΠ³Π΄Π° ΡΠ°Π·Π΄Π°Π»ΡΡ Π·Π²ΠΎΠ½ΠΎΠΊ ΡΠ΅Π»Π΅ΡΠΎΠ½Π°: Β«Π‘Π°Π½Ρ, ΡΡ Π½Π΅ Π³Π»ΡΠ½Π΅ΡΡ ΠΌΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ? ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ΅Π½Ρ Ρ
Π°ΠΊΠ½ΡΠ»ΠΈ, Π΄ΠΎΠΊΠ°Π·Π°ΡΡ Π½Π΅ ΠΌΠΎΠ³Ρ, Π½ΠΎ ΠΎΡΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ ΡΠΆΠ΅ ΡΡΠ΅ΡΡΡ Π½Π΅Π΄Π΅Π»Ρ. ΠΠΎΠΆΠ΅Ρ ΠΌΠ½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠ° Π»Π΅ΡΠΈΡΡΡΡ ΠΎΡ ΠΏΠ°ΡΠ°Π½ΠΎΠΉΠΈ?Β»
ΠΠ°Π»Π΅Π΅ ΠΏΠΎΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΡΠ°ΡΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π»ΠΎΠΆΠΈΡΡ ΡΠ°ΠΊ:
- ΠΏΠΎΡΠ²Π° Π΄Π»Ρ Π²Π·Π»ΠΎΠΌΠ° Π±ΡΠ»Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΎΡΠΎΠ΄Π½ΠΎΠΉ;
- Π²Π·Π»ΠΎΠΌΡΠΈΠΊ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ°Π²Π° ΡΡΠΏΠ΅ΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ;
- Π°ΡΠ°ΠΊΠ° (Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΈΠΌΠ΅Π»Π° ΠΌΠ΅ΡΡΠΎ) Π±ΡΠ»Π° ΡΠ΅Π»Π΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΡΡΠΎΡ ΡΠ°ΠΉΡ;
- ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Ρ ΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ½ΡΡΡ Π±ΡΠ» Π»ΠΈ ΡΠ°ΠΊΡ ΠΏΡΠΎΠ½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ;
- Π²Π·Π»ΠΎΠΌ Π½Π΅ ΠΌΠΎΠ³ ΠΊΠΎΡΠ½ΡΡΡΡΡ ΠΊΠΎΠ΄Π° ΡΠ°ΠΉΡΠ° ΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ .
ΠΠ°ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΡΠ½ΠΊΡΠ°.
Π ΠΌΠΈΡ ΡΠΌΠΎΡΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π±Π΅Π»ΡΠΉ IP ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°. ΠΠ΅ΠΆΠ΄Ρ Π±Π°ΠΊΠ΅Π½Π΄Π°ΠΌΠΈ ΠΈ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΠΎΠΌ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΡΠΎΠΌΠ΅ http(s), ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ/ΠΏΠ°ΡΠΎΠ»ΠΈ ΡΠ°Π·Π½ΡΠ΅, ΠΊΠ»ΡΡΠ°ΠΌΠΈ Π½Π΅ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π»ΠΈΡΡ. ΠΠ° ΡΠ΅ΡΡΡ
Π°Π΄ΡΠ΅ΡΠ°Ρ
Π²ΡΠ΅ ΠΏΠΎΡΡΡ ΠΊΡΠΎΠΌΠ΅ 80/443 Π·Π°ΠΊΡΡΡΡ. ΠΠ΅Π»ΡΠ΅ IP Π±Π°ΠΊΠ΅Π½Π΄ΠΎΠ² ΠΈΠ·Π²Π΅ΡΡΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΌ ΠΠΈΡ
Π°ΠΈΠ» Π²ΡΠ΅ΡΠ΅Π»ΠΎ Π΄ΠΎΠ²Π΅ΡΡΠ΅Ρ.
ΠΠ° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Debian 9 ΠΈ ΠΊ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π·Π²ΠΎΠ½ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π° ΠΎΡ ΠΌΠΈΡΠ° Π²Π½Π΅ΡΠ½ΠΈΠΌ firewall’ΠΎΠΌ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°.
Β«Ok, Π΄Π°Π²Π°ΠΉ Π΄ΠΎΡΡΡΠΏΡ, β ΡΠ΅ΡΠ°Ρ ΠΎΡΠ»ΠΎΠΆΠΈΡΡ ΡΠΎΠ½ Π½Π° ΡΠ°ΡΠΎΠΊ. β ΠΠΎΡΠΌΠΎΡΡΡ ΡΠ²ΠΎΠΈΠΌ Π³Π»Π°Π·ΠΎΠΌΒ».
ΠΠ΄Π΅ΡΡ ΠΈ Π΄Π°Π»Π΅Π΅:
$ 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
Π ΠΏΠΎΠΈΡΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π²Π·Π»ΠΎΠΌΠ°
ΠΠ°ΠΏΡΡΠΊΠ°Ρ ΡΠ΅ΡΠ²Π΅Ρ, ΡΠ½Π°ΡΠ°Π»Π° Π² rescue-mode. ΠΠΎΠ½ΡΠΈΡΡΡ Π΄ΠΈΡΠΊΠΈ, ΠΏΡΠΎΠ»ΠΈΡΡΡΠ²Π°Ρ auth-Π»ΠΎΠ³ΠΈ, history, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π»ΠΎΠ³ΠΈ ΠΈ Ρ.ΠΏ., ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡ Π΄Π°ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², Ρ ΠΎΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΡΠΉ Π²Π·Π»ΠΎΠΌΡΠΈΠΊ Β«ΠΏΠΎΠ΄ΠΌΠ΅Π»Β» Π±Ρ Π·Π° ΡΠΎΠ±ΠΎΠΉ, Π΄Π° ΠΈ ΠΠΈΡΠ° ΡΠΆΠ΅ Π·Π½Π°ΡΠ½ΠΎ Β«Π½Π°ΡΠΎΠΏΡΠ°Π»Β» ΠΏΠΎΠΊΠ° ΠΈΡΠΊΠ°Π» ΡΠ°ΠΌ.
Π‘ΡΠ°ΡΡΡΡ Π² Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΎΡΠΎΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΡΡΠΎ ΠΈΡΠΊΠ°ΡΡ, ΠΈΠ·ΡΡΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ. Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ nginx ΡΠ°ΠΊ ΠΊΠ°ΠΊ, Π² ΠΎΠ±ΡΠ΅ΠΌ-ΡΠΎ, Π½Π° ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π΅ ΠΊΡΠΎΠΌΠ΅ Π½Π΅Π³ΠΎ ΠΈ Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ.
ΠΠΎΠ½ΡΠΈΠ³ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅, Ρ
ΠΎΡΠΎΡΠΎ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΡΠ΅ Π² Π΄Π΅ΡΡΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΠΈΡ
ΠΏΡΠΎΡΡΠΎ cat’ΠΎΠΌ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΡΠΎΠ΄Π΅ Π²ΡΡ ΡΠΈΡΡΠΎ, Π½ΠΎ ΠΌΠ°Π»ΠΎ-Π»ΠΈ ΡΠΏΡΡΡΠΈΠ» ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ 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?
β ΠΠΊΡΡΠΈΡΡ, Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°Ρ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ!
β Ok, Π½Ρ, ΡΠΏΠΈβ¦
Nginx ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°Π½ ΠΈ Π²ΡΠ²ΠΎΠ΄ Π»ΠΈΡΡΠΈΠ½Π³Π° ΠΏΠΎ «-T» ΡΠΊΡΡΡ Π½Π΅ΡΠΏΡΠΎΡΡΠ°. Π‘ΠΎΠΌΠ½Π΅Π½ΠΈΠΉ Π²ΠΎ Π²Π·Π»ΠΎΠΌΠ΅ ΡΠΆΠ΅ Π½Π΅Ρ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΠΈ (ΡΠ°Π· ΡΠΆ ΠΠΈΡΠ° Π²ΡΡ-ΡΠ°Π²Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΠ» ΡΠ΅ΡΠ²Π΅Ρ Π½ΠΎΠ²ΡΠΌ) ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΡΠ΅Π½Π½ΠΎΠΉ.
Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΠ°Π· ΡΠΆ Π½Π΅ΠΊΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΏΡΠ°Π²Π° root‘Π°, ΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π΄Π΅Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ system reinstall, Π° ΠΈΡΠΊΠ°ΡΡ, ΡΡΠΎ ΡΠ°ΠΌ Π±ΡΠ»ΠΎ Π½Π°Π±Π΅Π΄ΠΎΠΊΡΡΠ΅Π½ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½ΠΎ Π² ΡΡΠΎΡ ΡΠ°Π· Π»ΡΠ±ΠΎΠΏΡΡΡΡΠ²ΠΎ ΠΏΠΎΠ±Π΅Π΄ΠΈΠ»ΠΎ ΡΠΎΠ½. ΠΠ°ΠΊ ΠΆΠ΅ ΡΠ·Π½Π°ΡΡ ΡΡΠΎ ΠΎΡ Π½Π°Ρ Ρ ΠΎΡΠ΅Π»ΠΈ ΡΠΊΡΡΡΡ?
ΠΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΎΡΡΡΠ°ΡΡΠΈΡΠΎΠ²Π°ΡΡ:
$ 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 ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π΅Ρ c ΠΏΠΎΠΌΠΎΡΡΡ gdb, Π±Π»Π°Π³ΠΎ ΠΊΠ»ΡΡΠΈΠΊ —with-cc-opt -g ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ Π½Π°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ -O2 Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ. ΠΡΠΈ ΡΡΠΎΠΌ, ΡΠ°Π· Ρ Π½Π΅ Π·Π½Π°Ρ ΠΊΠ°ΠΊ ngx_dump_config ΠΌΠΎΠ³Π»Π° Π±ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π° Π² case ‘T’:, Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠΎΡ Π±Π»ΠΎΠΊ, Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ case ‘t’:
ΠΠΎΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ‘-t’ Π½Π°ΡΠ°Π²Π½Π΅ Ρ ‘-T’ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π±Π»ΠΎΠΊΠ° if(ngx_dump_config) ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²Π½ΡΡΡΠΈ if(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;
}
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Π² ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ, Π° Π½Π΅ Π² case ‘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
ΠΠΎ ΡΠ°Π³Π°ΠΌ:
- ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π° Π² ΡΡΠ½ΠΊΡΠΈΠΈ main()
- Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
- ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠ΅ΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΊΠΎΠ½ΡΠΈΠ³Π° 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-Agent‘Ρ yandex/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-ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ‘ΠΎ’ Π½Π° ‘o’ ΠΈ ‘Π°’ Π½Π° ‘a’:
sub_filter_once off;
sub_filter 'ΠΎ' $sign_o;
sub_filter 'Π°' $sign_a;
ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ, ΡΠΎΠ½ΠΊΠΎΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΡΠΎ ‘Π°’ != ‘a’ ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ ‘ΠΎ’ != ‘o’:
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π±ΠΎΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ
ΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ 100%-ΠΊΠΈΡΠΈΠ»Π»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΡΡΠΎΡ ΡΠ°Π·Π±Π°Π²Π»Π΅Π½Π½ΡΠΉ Π»Π°ΡΠΈΠ½ΡΠΊΠΈΠΌΠΈ ‘a’ ΠΈ ‘o’. ΠΠ΅ Π±Π΅ΡΡΡΡ ΡΠ°ΡΡΡΠΆΠ΄Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° SEO, Π½ΠΎ Π²ΡΡΠ΄ Π»ΠΈ ΡΠ°ΠΊΠ°Ρ Π±ΡΠΊΠ²Π΅Π½Π½Π°Ρ ΠΌΠ΅ΡΠ°Π½ΠΈΠ½Π° ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΠΎ ΡΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΠΏΠΎΠ·ΠΈΡΠΈΡΡ
Π² Π²ΡΠ΄Π°ΡΠ΅.
Π§ΡΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΠ΅Π±ΡΡΠ° Ρ ΡΠ°Π½ΡΠ°Π·ΠΈΠ΅ΠΉ.
Π‘ΡΡΠ»ΠΊΠΈ
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com