рдЬрдм 'рдП' 'рдП' рдХреЗ тАЛтАЛрдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ. рд╣реИрдХ рдХреЗ рдорджреНрджреЗрдирдЬрд░

рдореЗрд░реЗ рдПрдХ рдорд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддреНрдпрдВрдд рдЕрдкреНрд░рд┐рдп рдХрд╣рд╛рдиреА рдШрдЯреАред рд▓реЗрдХрд┐рди рдпрд╣ рдорд┐рдЦрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рдЕрдкреНрд░рд┐рдп рд╕рд╛рдмрд┐рдд рд╣реБрдЖ, рдореЗрд░реЗ рд▓рд┐рдП рдЙрддрдирд╛ рд╣реА рдордиреЛрд░рдВрдЬрдХ рдерд╛ред

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореЗрд░рд╛ рджреЛрд╕реНрдд рд╢рд╛рдВрдд рд╣реИ рдпреВрдирд┐рдХреНрд╕-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ MySQL, рдкреАрдПрдЪрдкреА рдФрд░ рд╕рд░рд▓ рд╕реЗрдЯрд┐рдВрдЧ рдХрд░реЗрдВ nginx.
рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдирд┐рд░реНрдорд╛рдг рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдПрдХ рджрд░реНрдЬрди рдпрд╛ рдбреЗрдврд╝ рд╡реЗрдмрд╕рд╛рдЗрдЯреЗрдВ рд╣реИрдВред

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

рдЬрдм 'рдП' 'рдП' рдХреЗ тАЛтАЛрдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ. рдПрдХ рд╣реИрдХ рдХреЗ рдорджреНрджреЗрдирдЬрд░

рд╡рд╣ рддреЛ рдПрдХ рдХрд╣рд╛рд╡рдд рдереА, рдлрд┐рд░ рдПрдбрдорд┐рди рдХреА рд╣реА рдХрд╣рд╛рдиреАред

рд╕реЛрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ рдЬрдм рдлреЛрди рдмрдЬрд╛: тАЬрд╕реИрди, рдХреНрдпрд╛ рддреБрдо рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдирд╣реАрдВ рджреЗрдЦреЛрдЧреЗ? рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╣реИрдХ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдПрд╣рд╕рд╛рд╕ рдиреЗ рдореБрдЭреЗ рддреАрд╕рд░реЗ рд╣рдлреНрддреЗ рддрдХ рдирд╣реАрдВ рдЫреЛрдбрд╝рд╛ рд╣реИред рд╢рд╛рдпрдж рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрд╛рдореЛрд╣ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░рд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ?"

рдЗрд╕рдХреЗ рдмрд╛рдж рдЖрдзреЗ рдШрдВрдЯреЗ рддрдХ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдЬрд┐рд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ.

рдЬрдм 'рдП' 'рдП' рдХреЗ тАЛтАЛрдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ. рдПрдХ рд╣реИрдХ рдХреЗ рдорджреНрджреЗрдирдЬрд░

рдХреЗрд╡рд▓ рд╕рдлрд╝реЗрдж рдлреНрд░рдВрдЯрдПрдВрдб рдЖрдИрдкреА рд╣реА рджреБрдирд┐рдпрд╛ рдХреА рдУрд░ рджреЗрдЦрддрд╛ рд╣реИред http(s) рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмреИрдХрдПрдВрдб рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдирд╣реАрдВ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рдкрд╛рд╕рд╡рд░реНрдб рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдХрд┐рд╕реА рдХреБрдВрдЬреА рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЧреНрд░реЗ рдкрддреЛрдВ рдкрд░, 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?
- рдЙрдареЛ, рдореБрдЭреЗ рдпрд╣ рднреА рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ!
- рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рд╕реЛ рдЬрд╛рдУ...

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 рдЖрдЗрдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреА.рдбреА.рдмреА., рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╡рд╣рд╛рдБ рдПрдХ рдХреБрдВрдЬреА рд╣реИ --рд╕рд╛рде-рд╕реАрд╕реА-рдСрдкреНрдЯ -g рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ рдФрд░ рдЖрд╢рд╛ рдХрд░реЗрдВ рдХрд┐ рдЕрдиреБрдХреВрд▓рди -рдУрей рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛. рдЙрд╕реА рд╕рдордп, рдЪреВрдБрдХрд┐ рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ ngx_dump_config рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреЗрд╕ 'рдЯреА':, рд╣рдо рдЗрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗ рдХреЗрд╕ 'рдЯреА':

рдЖрдк '-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;

рдЖрдЗрдП рдХреНрд░рдо рд╕реЗ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдПрдЬреЗрдВрдЯрдХрд╛ рдпрд╛рдВрдбреЗрдХреНрд╕/рдЧреВрдЧрд▓:

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-рдкреЗрдЬ рдмрджрд▓рддреЗ рд╣реИрдВ 'рдУ' рдкрд░ 'рдУ' ╨╕ 'рдП' рдкрд░ 'рдП':

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

рдпрд╣ рд╕рд╣реА рд╣реИ, рдПрдХрдорд╛рддреНрд░ рд╕реВрдХреНрд╖реНрдорддрд╛ рдпрд╣реА рд╣реИ 'рдП' != 'рдП' рдареАрдХ рд╡реИрд╕рд╛ 'рдУ' != 'рдУ':

рдЬрдм 'рдП' 'рдП' рдХреЗ тАЛтАЛрдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ. рдПрдХ рд╣реИрдХ рдХреЗ рдорджреНрджреЗрдирдЬрд░

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЦреЛрдЬ рдЗрдВрдЬрди рдмреЙрдЯ рд╕рд╛рдорд╛рдиреНрдп 100% рд╕рд┐рд░рд┐рд▓рд┐рдХ рдкрд╛рда рдХреЗ рдмрдЬрд╛рдп, рд▓реИрдЯрд┐рди рдХреЗ рд╕рд╛рде рдкрддрд▓рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрдЪрд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ 'рдП' ╨╕ 'рдУ'. рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рд╣рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдпрд╣ рдПрд╕рдИрдУ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдХреНрд╖рд░реЛрдВ рдХреА рдРрд╕реА рдЧрдбрд╝рдмрдбрд╝реА рд╕реЗ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛ред

рдореИрдВ рдХреНрдпрд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдХрд▓реНрдкрдирд╛ рд╡рд╛рд▓реЗ рджреЛрд╕реНрддреЛрдВред

рд╕рдВрджрд░реНрднреЛрдВ

рдЬреАрдбреАрдмреА рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧрд┐рдВрдЧ
рдЬреАрдбреАрдмреА(1) - рд▓рд┐рдирдХреНрд╕ рдореИрди рдкреЗрдЬ
рд╕реНрдЯреНрд░реЗрд╕(1) - рд▓рд┐рдирдХреНрд╕ рдореИрди рдкреЗрдЬ
Nginx - рдореЙрдбреНрдпреВрд▓ ngx_http_sub_module
рдЖрд░реА, рдЪреЗрдирд╕реЙ рдФрд░ рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рдЖрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ