рдЬреЗрд╡реНрд╣рд╛ 'рдЕ' рдмрд░реЛрдмрд░ 'рдЕ' рдирд╕рддреЗ. рдЦрд╛рдЪрдЦрд│рдЧреНрдпрд╛рдЪреНрдпрд╛ рдирд┐рдорд┐рддреНрддрд╛рдиреЗ

рдорд╛рдЭреНрдпрд╛ рдПрдХрд╛ рдорд┐рддреНрд░рд╛рдЪреА рдПрдХ рдЕрддреНрдпрдВрдд рдЕрдкреНрд░рд┐рдп рдЧреЛрд╖реНрдЯ рдШрдбрд▓реА. рдкрдг рдорд┐рдЦрд╛рдИрд▓рд╕рд╛рдареА рддреЗ рдЬрд┐рддрдХреЗ рдЕрдкреНрд░рд┐рдп рдард░рд▓реЗ рддрд┐рддрдХреЗрдЪ рддреЗ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдордиреЛрд░рдВрдЬрдХ рд╣реЛрддреЗ.

рдореА рдореНрд╣рдгрд╛рдпрд▓рд╛рдЪ рдкрд╛рд╣рд┐рдЬреЗ рдХреА рдорд╛рдЭрд╛ рдорд┐рддреНрд░ рдЪрд╛рдВрдЧрд▓рд╛ рдЖрд╣реЗ рдпреБрдирд┐рдХреНрд╕-рд╡рд╛рдкрд░рдХрд░реНрддрд╛: рд╕рд┐рд╕реНрдЯрдо рд╕реНрд╡рддрдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддреЛ mysql, php рдЖрдгрд┐ рд╕реЛрдкреА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХрд░рд╛ nginx.
рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдмрд╛рдВрдзрдХрд╛рдо рд╕рд╛рдзрдирд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рдбрдЭрди рдХрд┐рдВрд╡рд╛ рджреАрдб рд╡реЗрдмрд╕рд╛рдЗрдЯреНрд╕ рдЖрд╣реЗрдд.

рдЪреЗрдирд╕реЙрд╕рд╛рдареА рд╕рдорд░реНрдкрд┐рдд рдпрд╛рдкреИрдХреА рдПрдХ рд╕рд╛рдЗрдЯ рд╢реЛрдз рдЗрдВрдЬрд┐рдирдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдард╛рдордкрдгреЗ рдмрд╕рддреЗ. рд╣реА рд╕рд╛рдЗрдЯ рдПрдХ рдЧреИрд░-рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрдирдХрд░реНрддрд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдХреЛрдгреАрддрд░реА рддреНрдпрд╛рд╡рд░ рд╣рд▓реНрд▓рд╛ рдХрд░рдгреНрдпрд╛рдЪреА рд╕рд╡рдп рд▓рд╛рд╡рд▓реА рдЖрд╣реЗ. рддреЗ рдЖрд╣рд░рдг, рдирдВрддрд░ рдХреНрд░реВрд░ рдлреЛрд░реНрд╕, рдирдВрддрд░ рддреЗ рдЕрд╢реНрд▓реАрд▓ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд▓рд┐рд╣рд┐рддрд╛рдд рдЖрдгрд┐ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЖрдгрд┐ RKN рд▓рд╛ рд╢рд┐рд╡реНрдпрд╛ рдкрд╛рдард╡рддрд╛рдд.
рдЕрдЪрд╛рдирдХ, рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╢рд╛рдВрдд рдЭрд╛рд▓реЗ рдЖрдгрд┐ рд╣реА рд╢рд╛рдВрддрддрд╛ рдЪрд╛рдВрдЧрд▓реА рдирд╛рд╣реА рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдЖрдгрд┐ рд╕рд╛рдЗрдЯрдиреЗ рд╣рд│реВрд╣рд│реВ рд╢реЛрдз рдкрд░рд┐рдгрд╛рдорд╛рдВрдЪреНрдпрд╛ рд╢реАрд░реНрд╖ рдУрд│реА рд╕реЛрдбрдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА.

рдЬреЗрд╡реНрд╣рд╛ 'рдЕ' рдмрд░реЛрдмрд░ 'рдЕ' рдирд╕рддреЗ. рдПрдХрд╛ рдЦрд╛рдЪрдЦрд│рдЧреНрдпрд╛рдЪреНрдпрд╛ рдирд┐рдорд┐рддреНрддрд╛рдиреЗ

рддреА рдПрдХ рдореНрд╣рдг рд╣реЛрддреА, рдордЧ рдкреНрд░рд╢рд╛рд╕рдХрд╛рдЪреАрдЪ рдЧреЛрд╖реНрдЯ.

рдЭреЛрдкрдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЬрд╡рд│ рдЖрд▓реА рд╣реЛрддреА рддреЗрд╡реНрд╣рд╛ рдлреЛрди рд╡рд╛рдЬрд▓рд╛: тАЬрд╕реЕрди, рддреВ рдорд╛рдЭрд╛ рд╕рд░реНрд╡реНрд╣рд░ рдкрд╛рд╣рдгрд╛рд░ рдирд╛рд╣реАрд╕ рдХрд╛? рдорд▓рд╛ рдЕрд╕реЗ рд╡рд╛рдЯрддреЗ рдХреА рдорд▓рд╛ рд╣реЕрдХ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдореА рддреЗ рд╕рд┐рджреНрдз рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдпрд╛ рднрд╛рд╡рдирд╛рдиреЗ рдорд▓рд╛ рддрд┐рд╕рд▒реНрдпрд╛ рдЖрдард╡рдбреНрдпрд╛рдд рд╕реЛрдбрд▓реЗ рдирд╛рд╣реА. рдХрджрд╛рдЪрд┐рдд рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдкреЕрд░рд╛рдиреЛрдИрдпрд╛рд╡рд░ рдЙрдкрдЪрд╛рд░ рдШреЗрдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ?"

рддреНрдпрд╛рдирдВрддрд░ рдЕрд░реНрдзрд╛ рддрд╛рд╕ рдЪрд░реНрдЪрд╛ рдЭрд╛рд▓реА рдЬреНрдпрд╛рдЪрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ:

  • рд╣реЕрдХрд┐рдВрдЧрд╕рд╛рдареА рдорд╛рддреА рдмрд░реАрдЪ рд╕реБрдкреАрдХ рд╣реЛрддреА;
  • рдЖрдХреНрд░рдордгрдХрд░реНрддрд╛ рд╕реБрдкрд░рдпреБрдЬрд░ рдЕрдзрд┐рдХрд╛рд░ рдорд┐рд│рд╡реВ рд╢рдХрддреЛ;
  • рд╣рд▓реНрд▓рд╛ (рдЬрд░ рддреЛ рдЭрд╛рд▓рд╛ рдЕрд╕реЗрд▓ рддрд░) рд╡рд┐рд╢реЗрд╖рдд: рдпрд╛ рд╕рд╛рдЗрдЯрд╡рд░ рд▓рдХреНрд╖реНрдп рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рд╣реЛрддрд╛;
  • рд╕рдорд╕реНрдпрд╛ рдХреНрд╖реЗрддреНрд░ рджреБрд░реБрд╕реНрдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА рддреЗрдереЗ рдХрд╛рд╣реА рдкреНрд░рд╡реЗрд╢ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА;
  • рд╣реЕрдХ рд╕рд╛рдЗрдЯ рдХреЛрдб рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА.

рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдореБрджреНрджреНрдпрд╛рдмрджреНрджрд▓.

рдЬреЗрд╡реНрд╣рд╛ 'рдЕ' рдмрд░реЛрдмрд░ 'рдЕ' рдирд╕рддреЗ. рдПрдХрд╛ рдЦрд╛рдЪрдЦрд│рдЧреНрдпрд╛рдЪреНрдпрд╛ рдирд┐рдорд┐рддреНрддрд╛рдиреЗ

рдлрдХреНрдд рдкрд╛рдВрдврд░рд╛ рдлреНрд░рдВрдЯрдПрдВрдб рдЖрдпрдкреА рдЬрдЧрд╛рдХрдбреЗ рдкрд╛рд╣рддреЛ. 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

рд╕реВрдЪреАрдЪреНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдд рджреБрд╕рд░рд╛ рдкреНрд░рд╢реНрди рдЬреЛрдбрд▓рд╛ рдЖрд╣реЗ: "рдПрдирдЬреАрдПрдирдПрдХреНрд╕рдЪреА рдЕрд╢реА рдкреНрд░рд╛рдЪреАрди рдЖрд╡реГрддреНрддреА рдХрд╛?"

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╕рд┐рд╕реНрдЯрдордЪрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ:

$ 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 рд╡рд╛рдкрд░реВрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛ рдЬреАрдбреАрдмреА, рд╕реБрджреИрд╡рд╛рдиреЗ рдПрдХ рдХрд┐рд▓реНрд▓реА рдЖрд╣реЗ --with-cc-opt -g рд╕рд╛рджрд░ рдХрд░рд╛ рдЖрдгрд┐ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди -O2 рддреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЗрдЬрд╛ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдорд▓рд╛ рдХрд╕реЗ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА 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;

рдХреНрд░рдорд╛рдиреЗ рдпреЗрдереЗ рдХрд╛рдп рдШрдбрдд рдЖрд╣реЗ рддреЗ рдкрд╛рд╣реВ рдпрд╛.

рдард░рд╡рд▓реЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдПрдЬрдВрдЯрдЪреЗ 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- рдкреГрд╖реНрдареЗ рдмрджрд▓рддрд╛рдд 'рдУ' рд╡рд░ 'рдУ' ╨╕ 'рдЕ' рд╡рд░ 'рдЕ':

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

рддреЗ рдмрд░реЛрдмрд░ рдЖрд╣реЗ, рдлрдХреНрдд рд╕реВрдХреНрд╖реНрдорддрд╛ рдЖрд╣реЗ 'a' != 'a' рдЬрд╕реЗ 'рдУ' ! = 'рдУ':

рдЬреЗрд╡реНрд╣рд╛ 'рдЕ' рдмрд░реЛрдмрд░ 'рдЕ' рдирд╕рддреЗ. рдПрдХрд╛ рдЦрд╛рдЪрдЦрд│рдЧреНрдпрд╛рдЪреНрдпрд╛ рдирд┐рдорд┐рддреНрддрд╛рдиреЗ

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

рдореА рдХрд╛рдп рд╕рд╛рдВрдЧреВ, рдЕрдЧрдВ рдХрд▓реНрдкрдирд╛рд╢рдХреНрддреА.

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

GDB рд╕рд╣ рдбреАрдмрдЧ рдХрд░рдгреЗ
gdb(1) тАФ рд▓рд┐рдирдХреНрд╕ рдореЕрди рдкреЗрдЬ
strace(1) тАФ рд▓рд┐рдирдХреНрд╕ рдореЕрди рдкреЗрдЬ
Nginx - рдореЙрдбреНрдпреВрд▓ ngx_http_sub_module
рдЖрд░реЗ, рдЪреЗрдирд╕реЙ рдЖрдгрд┐ рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рдЖрд░реЗ рдмрджреНрджрд▓

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛