рдЬрдм 'a' 'a' рдХреЛ рдмрд░рд╛рдмрд░ рд╣реБрдБрджреИрдиред рдПрдХ рд╣реНрдпрд╛рдХ рдХреЛ рдХрд╛рд░рдг рдорд╛

рдореЗрд░реЛ рдПрдХ рд╕рд╛рдереАрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рдЕрдкреНрд░рд┐рдп рдХрдерд╛ рднрдпреЛред рддрд░ рдпреЛ рдорд┐рдЦрд╛рдЗрд▓рдХреЛ рд▓рд╛рдЧрд┐ рдЬрддрд┐ рдЕрдкреНрд░рд┐рдп рднрдпреЛ, рдпреЛ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рддреНрдпрддреНрддрд┐рдХреИ рд░рдорд╛рдЗрд▓реЛ рдерд┐рдпреЛред

рдореИрд▓реЗ рднрдиреНрдиреИ рдкрд░реНрдЫ рдХрд┐ рдореЗрд░реЛ рд╕рд╛рдереА рдПрдХрджрдо рд░рд╛рдореНрд░реЛ рдЫ рдпреБрдирд┐рдХреНрд╕-рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛: рдкреНрд░рдгрд╛рд▓реА рдЖрдлреИрдВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ MySQL, PHP рд░ рд╕рд░рд▓ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН nginx.
рд░ рдЙрд╣рд╛рдБрд╕рдБрдЧ рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛ рд╕рдорд░реНрдкрд┐рдд рдПрдХ рджрд░реНрдЬрди рд╡рд╛ рдбреЗрдв рд╡реЗрдмрд╕рд╛рдЗрдЯрд╣рд░реВ рдЫрдиреНред

рдЪреЗрдирд╕рд╛рдорд╛ рд╕рдорд░реНрдкрд┐рдд рдпреА рд╕рд╛рдЗрдЯрд╣рд░реВ рдордзреНрдпреЗ рдПрдЙрдЯрд╛ рдЦреЛрдЬ рдЗрдиреНрдЬрд┐рдирд╣рд░реВрдХреЛ рд╢реАрд░реНрд╖рдорд╛ рджреГрдврддрд╛рдкреВрд░реНрд╡рдХ рдмрд╕реНрджрдЫред рдпреЛ рд╕рд╛рдЗрдЯ рдПрдХ рдЧреИрд░-рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдореАрдХреНрд╖рдХ рд╣реЛ, рддрд░ рдХрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЖрдХреНрд░рдордг рдЧрд░реНрдиреЗ рдмрд╛рдиреАрдорд╛ рдкрд░реНрдпреЛред рддреНрдпреЛ DDoS, рддреНрдпрд╕рдкрдЫрд┐ рдХреНрд░реВрд░ рдмрд▓, рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВ рдЕрд╢реНрд▓реАрд▓ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ рд▓реЗрдЦреНрдЫрдиреН рд░ рд╣реЛрд╕реНрдЯрд┐рдЩ рд░ RKN рд▓рд╛рдИ рдЧрд╛рд▓реАрд╣рд░реВ рдкрдард╛рдЙрдБрдЫрдиреНред
рдЕрдЪрд╛рдирдХ, рд╕рдмреИ рдХреБрд░рд╛ рд╢рд╛рдиреНрдд рднрдпреЛ рд░ рдпреЛ рд╢рд╛рдиреНрдд рд░рд╛рдореНрд░реЛ рдерд┐рдПрди, рд░ рд╕рд╛рдЗрдЯрд▓реЗ рдмрд┐рд╕реНрддрд╛рд░реИ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдХреЛ рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛рд╣рд░реВ рдЫреЛрдбреНрди рдерд╛рд▓реНрдпреЛред

рдЬрдм 'a' 'a' рдХреЛ рдмрд░рд╛рдмрд░ рд╣реБрдБрджреИрдиред рдПрдХ рд╣реНрдпрд╛рдХ рдХреЛ рдХрд╛рд░рдг рдорд╛

рддреНрдпреЛ рднрдирд╛рдЗ рдерд┐рдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рд╢рд╛рд╕рдХрдХреЛ рдХрдерд╛ред

рд╕реБрддреНрдиреЗ рд╕рдордп рдирдЬрд┐рдХреИ рдерд┐рдпреЛ рдЬрдм рдлреЛрдирдХреЛ рдШрдгреНрдЯреА рдмрдЬреНрдпреЛ: тАЬрд╕рд╛рди, рдореЗрд░реЛ рд╕рд░реНрднрд░ рд╣реЗрд░реНрдиреЗ рд╣реИрди? рдорд▓рд╛рдИ рд╣реНрдпрд╛рдХ рднрдПрдХреЛ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрдЫ, рдо рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХреНрджрд┐рди, рддрд░ рднрд╛рд╡рдирд╛рд▓реЗ рдорд▓рд╛рдИ рддреЗрд╕реНрд░реЛ рд╣рдкреНрддрд╛ рдкрдирд┐ рдЫреЛрдбреЗрдХреЛ рдЫреИрдиред рд╕рд╛рдпрдж рдпреЛ рдореЗрд░реЛ рд▓рд╛рдЧрд┐ рдкрд╛рдЧрд▓рдкрдирдХреЛ рдЙрдкрдЪрд╛рд░ рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛ?"

рдЖрдзрд╛ рдШрдиреНрдЯрд╛рдХреЛ рдЫрд▓рдлрд▓ рдкрдЫрд┐ рдХреЗ рднрдпреЛ рдЬрд╕рд▓рд╛рдИ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдХреНрд╖реЗрдк рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:

  • рд╣реНрдпрд╛рдХрд┐рдВрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдЯреЛ рдзреЗрд░реИ рдЙрд░реНрд╡рд░ рдерд┐рдпреЛ;
  • рдПрдХ рдЖрдХреНрд░рдордгрдХрд╛рд░реАрд▓реЗ рд╕реБрдкрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдЫ;
  • рдЖрдХреНрд░рдордг (рдпрджрд┐ рдпреЛ рднрдПрдХреЛ рдерд┐рдпреЛ) рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдпрд╕ рд╕рд╛рдЗрдЯрдорд╛ рд▓рдХреНрд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ;
  • рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╕рдЪреНрдпрд╛рдЗрдПрдХрд╛ рдЫрдиреН рд░ рддрдкрд╛рдИрдВрд▓реЗ рдХреЗрд╡рд▓ рдмреБрдЭреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдХрд┐ рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдкреНрд░рд╡реЗрд╢ рдерд┐рдпреЛ рдХрд┐ рдЫреИрди;
  • рд╣реНрдпрд╛рдХрд▓реЗ рд╕рд╛рдЗрдЯ рдХреЛрдб рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрди рд╕рдХреЗрдиред

рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ред

рдЬрдм 'a' 'a' рдХреЛ рдмрд░рд╛рдмрд░ рд╣реБрдБрджреИрдиред рдПрдХ рд╣реНрдпрд╛рдХ рдХреЛ рдХрд╛рд░рдг рдорд╛

рдХреЗрд╡рд▓ рд╕реЗрддреЛ рдлреНрд░рдиреНрдЯрдПрдиреНрдб рдЖрдИрдкреА рд╕рдВрд╕рд╛рд░рдорд╛ рдмрд╛рд╣рд┐рд░ рджреЗрдЦрд┐рдиреНрдЫред http(рд╣рд░реВ) рдмрд╛рд╣реЗрдХ рдмреНрдпрд╛рдХрдПрдиреНрдб рд░ рдлреНрд░рдиреНрдЯрдПрдиреНрдб рдмреАрдЪ рдХреБрдиреИ рдЖрджрд╛рдирдкреНрд░рджрд╛рди рдЫреИрди, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ/рдкрд╛рд╕рд╡рд░реНрдбрд╣рд░реВ рдлрд░рдХ рдЫрдиреН, рдХреБрдиреИ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдЖрджрд╛рдирдкреНрд░рджрд╛рди рднрдПрдирдиреНред рдЦреИрд░реЛ рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдорд╛, 80/443 рдмрд╛рд╣реЗрдХ рд╕рдмреИ рдкреЛрд░реНрдЯрд╣рд░реВ рдмрдиреНрдж рдЫрдиреНред рд╕реЗрддреЛ рдмреНрдпрд╛рдХрдЗрдиреНрдб рдЖрдИрдкреАрд╣рд░реВ рдХреЗрд╡рд▓ рджреБрдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рдЬрд╕рд▓рд╛рдИ рдорд┐рдЦрд╛рдЗрд▓рд▓реЗ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрджрдЫред

рдлреНрд░рдиреНрдЯрдПрдиреНрдбрдорд╛ рд╕реНрдерд╛рдкрд┐рдд рдбреЗрдмрд┐рдпрди 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 рдХрд┐рдирдХрд┐, рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рддреНрдпрд╣рд╛рдБ рдмрд╛рд╣реЗрдХ рдлреНрд░рдиреНрдЯрдПрдиреНрдбрдорд╛ рдЕрд░реВ рдХреЗрд╣рд┐ рдЫреИрдиред
рдХрдиреНрдлрд┐рдЧрд╣рд░реВ рд╕рд╛рдирд╛ рдЫрдиреН, рдПрдХ рджрд░реНрдЬрди рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рд╕рдВрд░рдЪрд┐рдд рдЫрдиреН, рдо рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╣реЗрд░реНрдЫреБ рдмрд┐рд░рд╛рд▓реЛрдУрд╣ рдПрдХ рдПрдХ рдЧрд░реЗрд░ред рд╕рдмреИ рдХреБрд░рд╛ рд╕рдлрд╛ рджреЗрдЦрд┐рдиреНрдЫ, рддрд░ рдореИрд▓реЗ рдХреЗрд╣рд┐ рдЫреБрдЯреЗрдХреЛ рднрдП рддрдкрд╛рдИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫреИрди рд╕рдорд╛рд╡реЗрд╢, рдорд▓рд╛рдИ рдкреВрд░реНрдг рд╕реВрдЪреА рдмрдирд╛рдЙрди рджрд┐рдиреБрд╣реЛрд╕реН:

$ 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?
- рдкрд░реНрдЦрдиреБрд╣реЛрд╕реН, рдорд▓рд╛рдИ рдпреЛ рдХрд╕рд░реА рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдкрдирд┐ рдерд╛рд╣рд╛ рдЫреИрди!
- рдареАрдХ рдЫ, рд╕реБрддреНрдиреБрд╣реЛрд╕реН ...

рдирд┐рдЬрд┐рдирдХреНрд╕ рдпреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдкреБрди: рдирд┐рд░реНрдорд╛рдг рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ "-T" рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реВрдЪреАрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд▓реБрдХреЗрдХреЛ рдЫред рд╣реНрдпрд╛рдХрд┐рдЩрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЕрдм рдХреБрдиреИ рд╢рдЩреНрдХрд╛ рдЫреИрди рд░ рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ рд╕рдЬрд┐рд▓реИ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ (рдЬрд╕рд░реА рдкрдирд┐ рдорд┐рд╢рд╛рд▓реЗ рд╕рд░реНрднрд░рд▓рд╛рдИ рдирдпрд╛рдБрд▓реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реЗрдХреЛ рдЫ) рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рднрдПрдХреЛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рд░ рд╡рд╛рд╕реНрддрд╡рдорд╛, рдХрд╕реИрд▓реЗ рдЕрдзрд┐рдХрд╛рд░ рдкрд╛рдПрдкрдЫрд┐ рдореВрд▓'рдЕрд╣, рддреНрдпрд╕реЛрднрдП рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдЕрд░реНрде рд╣реБрдиреНрдЫ рдкреНрд░рдгрд╛рд▓реА рдкреБрди: рд╕реНрдерд╛рдкрдирд╛, рд░ рддреНрдпрд╣рд╛рдБ рдХреЗ рдЧрд▓реНрддреА рдЫ рднрдиреЗрд░ рдЦреЛрдЬреНрдиреБ рдмреЗрдХрд╛рд░ рдерд┐рдпреЛ, рддрд░ рдпрд╕ рдкрдЯрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛рд▓реЗ рдирд┐рджреНрд░рд╛рд▓рд╛рдИ рдкрд░рд╛рдЬрд┐рдд рдЧрд░реНрдпреЛред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╣рд╛рдореАрдмрд╛рдЯ рд▓реБрдХрд╛рдЙрди рдЪрд╛рд╣реЗрдХреЛ рдХреБрд░рд╛ рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдЫреМрдВ?

рдЯреНрд░реЗрд╕ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ:

$ strace nginx -T

рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╣реЗрд░реНрдЫреМрдВ, рдЯреНрд░реЗрд╕ 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;
}

рд╕реЗрд╡рд╛ рдкреГрд╖реНрдард╣рд░реВ рдмрд╣рд┐рд╖реНрдХреГрдд рдЫрдиреН 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- рдкреГрд╖реНрдард╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди 'рдУ' рдорд╛ 'рдУ' ╨╕ 'рдП' рдорд╛ 'a':

sub_filter_once off;
sub_filter '╨╛' $sign_o;
sub_filter '╨░' $sign_a;

рдпреЛ рд╕рд╣реА рдЫ, рдПрдХрдорд╛рддреНрд░ рд╕реВрдХреНрд╖реНрдорддрд╛ рдпреЛ рд╣реЛ 'a' ! = 'a' рдЬрд╕реНрддреИ 'рдУ' ! = 'рдУ':

рдЬрдм 'a' 'a' рдХреЛ рдмрд░рд╛рдмрд░ рд╣реБрдБрджреИрдиред рдПрдХ рд╣реНрдпрд╛рдХ рдХреЛ рдХрд╛рд░рдг рдорд╛

рдпрд╕рд░реА, рдЦреЛрдЬ рдЗрдиреНрдЬрд┐рди рдмрдЯрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ, рд╕рд╛рдорд╛рдиреНрдп 100% рд╕рд┐рд░рд┐рд▓рд┐рдХ рдкрд╛рдардХреЛ рд╕рдЯреНрдЯрд╛, рд▓реНрдпрд╛рдЯрд┐рдирдорд╛ рдкрд╛рддрд▓реЛ рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рдлреЛрд╣реЛрд░ 'a' ╨╕ 'рдУ'ред рдпрд╕рд▓реЗ рдПрд╕рдИрдУрд▓рд╛рдИ рдХрд╕рд░реА рдЕрд╕рд░ рдЧрд░реНрдЫ рднрдиреЗрд░ рдо рдЫрд▓рдлрд▓ рдЧрд░реНрди рд╣рд┐рдореНрдордд рдЧрд░реНрджрд┐рди, рддрд░ рдпреЛ рд╕рдореНрднрд╡ рдЫреИрди рдХрд┐ рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рдпрд╕реНрддреЛ рдЧрдбрдмрдбреАрд▓реЗ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдорд╛ рд╕реНрдерд┐рддрд┐рд╣рд░реВрдорд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫред

рдо рдХреЗ рднрдиреНрди рд╕рдХреНрдЫреБ, рдХрд▓реНрдкрдирд╛ рд╕рдВрдЧ рдХреЗрдЯрд╛рд╣рд░реБред

рд╕рдиреНрджрд░реНрдн

GDB рд╕рдБрдЧ рдбрд┐рдмрдЧ рдЧрд░реНрджреИ
gdb (1) - рд▓рд┐рдирдХреНрд╕ рдореНрдпрд╛рди рдкреГрд╖реНрда
strace(1) тАФ рд▓рд┐рдирдХреНрд╕ рдореНрдпрд╛рди рдкреГрд╖реНрда
Nginx - рдореЛрдбреНрдпреБрд▓ ngx_http_sub_module
рдЖрд░рд╛, тАЛтАЛрдЪреЗрдирд╕рд╛ рд░ рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рдЖрд░рд╛ рдмрд╛рд░реЗ

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди