ื•ื•ืขืŸ 'ืึท' ืื™ื– ื ื™ืฉื˜ ื’ืœื™ื™ึทืš ืฆื• 'ืึท'. ืื™ืŸ ื“ื™ ื•ื•ืขืงืŸ ืคื•ืŸ ืึท ื›ืึทืง

ื ืžืขืจืกื˜ ืคึผืจื™ืงืจืข ื’ืขืฉื™ื›ื˜ืข ื’ืขื˜ืจืืคืŸ ืฆื• ืื™ื™ื ืขืจ ืคื•ืŸ ืžื™ื™ืŸ ืคืจื™ื™ื ื˜. ืึธื‘ืขืจ ื•ื•ื™ ืคึผืจื™ืงืจืข ื•ื•ื™ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืคึฟืึทืจ ืžื™ื›ืึทื™ืœ, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืคึผื•ื ืงื˜ ื•ื•ื™ ืคึฟืึทืจื•ื•ื™ื™ืœืขืจื™ืฉืข ืคึฟืึทืจ ืžื™ืจ.

ืื™ืš ืžื•ื–ืŸ ื–ืึธื’ืŸ ืึทื– ืžื™ื™ืŸ ืคืจื™ื™ึทื ื“ ืื™ื– ื’ืึทื ืฅ UNIX- ื‘ืึทื ื™ืฆืขืจ: ืงืขื ืขืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืกื™ืกื˜ืขื ื–ื™ืš ืžื™ืกืงืœ, PHP ืื•ืŸ ืžืึทื›ืŸ ืคึผืฉื•ื˜ ืกืขื˜ื˜ื™ื ื’ืก ื ื’ื™ื ืงืก.
ืื•ืŸ ืขืจ ื”ืื˜ ืึท ื˜ื•ืฅ ืึธื“ืขืจ ืื™ื™ืŸ ืื•ืŸ ืึท ื”ืึทืœื‘ ื•ื•ืขื‘ืกื™ื˜ืขืก ื“ืขื“ืึทืงื™ื™ื˜ืึทื“ ืฆื• ืงืึทื ืกื˜ืจืึทืงืฉืึทืŸ ืžื›ืฉื™ืจื™ื.

ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื–ื™ื™ื˜ืœืขืš ื“ืขื“ืึทืงื™ื™ื˜ืึทื“ ืฆื• ื˜ืฉืึทื™ื ืกืึทื– ื–ื™ืฆื˜ ืคืขืกื˜ ืื™ืŸ ื“ื™ ืฉืคึผื™ืฅ ืคื•ืŸ ื–ื•ื›ืŸ ืขื ื“ื–ืฉืึทื ื–. ื“ืขืจ ืคึผืœืึทืฅ ืื™ื– ืึท ื ื™ื˜-ื’ืขืฉืขืคื˜ ืจื™ื•ื•ื™ื•ืขืจ, ืึธื‘ืขืจ ืขืžืขืฆืขืจ ื”ืื˜ ืึท ืžื™ื“ืข ืฆื• ื‘ืึทืคืึทืœืŸ ืขืก. ืึทื– ื“ื“ืึธืก, ื“ืขืžืืœื˜ืก ื‘ืจื•ื˜ืข ืงืจืืคื˜, ื“ืืŸ ืฉืจื™ื™ื‘ืŸ ื–ื™ื™ ืžื’ื•ื ื” ืชื’ื•ื‘ื•ืช ืื•ืŸ ืฉื™ืงืŸ ื–ื™ื“ืœืขืŸ ืฆื• ื“ื™ ื”ืึธืกื˜ื™ื ื’ ืื•ืŸ ืฆื•ื ืจืงืŸ.
ืคึผืœื•ืฆืขื ื”ืึธื˜ ื–ื™ืš ืึทืœืฅ ื‘ืึทืจื•ื™ึดืงื˜ ืื•ืŸ ื“ืขืจ ืจื•ืื™ื’ืงื™ื™ื˜ ื”ืึธื˜ ื–ื™ืš ืึทืจื•ื™ืกื’ืขื•ื•ื™ื–ืŸ ื ื™ืฉื˜ ื’ื•ื˜, ืื•ืŸ ื“ืขืจ ืคึผืœืึทืฅ ื”ืึธื˜ ื‘ื™ืกืœืขื›ื•ื•ืฒึทื– ืึธื ื’ืขื”ื•ื™ื‘ืŸ ืคึฟืึทืจืœืึธื–ืŸ ื“ื™ ืฉืคึผื™ืฅ ืฉื•ืจื•ืช ืคึฟื•ืŸ ื“ื™ ื–ื•ืšึพืจืขื–ื•ืœื˜ืึทื˜ืŸ.

ื•ื•ืขืŸ 'ืึท' ืื™ื– ื ื™ืฉื˜ ื’ืœื™ื™ึทืš ืฆื• 'ืึท'. ืื™ืŸ ื“ื™ ื•ื•ืขืงืŸ ืคื•ืŸ ืึท ื›ืึทืง

ื“ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื–ืื’ืŸ, ื“ืขืžืึธืœื˜ ื“ืขืจ ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื“ืขืจ ืึทื“ืžื™ื ื™ืกื˜ืจืึทื˜ืึธืจ ื–ื™ืš.

ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื ืึธืขื ื˜ ืฆื• ื‘ืขื“ื˜ื™ื™ื ื•ื•ืขืŸ ื“ืขืจ ื˜ืขืœืขืคืึธืŸ ืจืึทื ื’: "ืกืึทืŸ, ื•ื•ืขื˜ ืื™ืจ ื ื™ืฉื˜ ืงื•ืงืŸ ืื•ื™ืฃ ืžื™ื™ืŸ ืกืขืจื•ื•ืขืจ? ืขืก ืžื™ื™ื ื˜ ืฆื• ืžื™ืจ ืึทื– ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ื›ืึทืงื˜, ืื™ืš ืงืขืŸ ื ื™ืฉื˜ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืขืก, ืึธื‘ืขืจ ื“ื™ ื’ืขืคื™ืœ ื”ืื˜ ื ื™ืฉื˜ ืœืึธื–ืŸ ืžื™ืจ ืคึฟืึทืจ ื“ื™ ื“ืจื™ื˜ ื•ื•ืึธืš. ืืคึฟืฉืจ ืขืก ืื™ื– ื ืึธืจ ืฆื™ื™ื˜ ืคึฟืึทืจ ืžื™ืจ ืฆื• ื‘ืึทืงื•ืžืขืŸ ื‘ืึทื”ืึทื ื“ืœื•ื ื’ ืคึฟืึทืจ ืคึผืึทืจืึทื ืึธื™ืึท?

ื•ื•ืึธืก ืื™ื– ื ืื›ื’ืขื’ืื ื’ืขืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื”ืึทืœื‘-ืฉืขื” ื“ื™ืกืงื•ืกื™ืข ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืกืึทืžืขืจื™ื™ื–ื“ ื•ื•ื™ ื’ื™ื™ื˜:

  • ื“ืขืจ ื‘ืึธื“ืŸ ืคึฟืึทืจ ื›ืึทืงื™ื ื’ ืื™ื– ื’ืึทื ืฅ ืคืจื•ื›ื˜ื‘ืึทืจ;
  • ืึท ืึทื˜ืึทืงืขืจ ืงืขืŸ ื’ืขื•ื•ื™ื ืขืŸ ืกื•ืคึผืขืจื™ื•ื–ืขืจ ืจืขื›ื˜;
  • ื“ื™ ื‘ืึทืคืึทืœืŸ (ืื•ื™ื‘ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ) ืื™ื– ื’ืขื•ื•ืขืŸ ื˜ืึทืจื’ืขื˜ืขื“ ืกืคึผืึทืกื™ืคื™ืงืœื™ ืื•ื™ืฃ ื“ืขื ืคึผืœืึทืฅ;
  • ืคึผืจืึธื‘ืœืขื ื’ืขื‘ื™ื˜ืŸ ื–ืขื ืขืŸ ืงืขืจืขืงื˜ืึทื“ ืื•ืŸ ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืฆื™ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืงื™ื™ืŸ ื“ื•ืจื›ื“ืจื•ื ื’;
  • ื“ื™ ื›ืึทืง ืงืขืŸ ื ื™ืฉื˜ ื•ื•ื™ืจืงืŸ ื“ื™ ืคึผืœืึทืฅ ืงืึธื“ ืื•ืŸ ื“ืึทื˜ืึทื‘ื™ื™ืกื™ื–.

ื•ื•ืขื’ืŸ ื“ื™ ืœืขืฆื˜ืข ืคื•ื ื˜.

ื•ื•ืขืŸ 'ืึท' ืื™ื– ื ื™ืฉื˜ ื’ืœื™ื™ึทืš ืฆื• 'ืึท'. ืื™ืŸ ื“ื™ ื•ื•ืขืงืŸ ืคื•ืŸ ืึท ื›ืึทืง

ื‘ืœื•ื™ื– ื“ื™ ื•ื•ื™ื™ึทืก ืคืจืึธื ื˜ืขื ื“ IP ืงื•ืงื˜ ืื•ื™ืก ืื™ืŸ ื“ืขืจ ื•ื•ืขืœื˜. ืขืก ืื™ื– ืงื™ื™ืŸ ื•ื•ืขืงืกืœ ืฆื•ื•ื™ืฉืŸ ื“ื™ ื‘ืึทืงืขื ื“ื– ืื•ืŸ ื“ื™ ืคืจืึธื ื˜ืขื ื“ ืึทื—ื•ืฅ http (s), ื“ื™ ื ื™ืฆืขืจืก / ืคึผืึทืกื•ื•ืขืจื“ื– ื–ืขื ืขืŸ ืึทื ื“ืขืจืฉ, ืงื™ื™ืŸ ืฉืœื™ืกืœืขืŸ ื–ืขื ืขืŸ ืคืืจื‘ื™ื˜ืŸ. ืื•ื™ืฃ ื’ืจื•ื™ ืึทื“ืจืขืกืขืก, ืึทืœืข ืคึผืึธืจืฅ ืึทื—ื•ืฅ 80/443 ื–ืขื ืขืŸ ืคึฟืึทืจืžืึทื›ื˜. ื•ื•ื™ื™ึทืก ื‘ืึทืงืขื ื“ ื™ืคึผืก ื–ืขื ืขืŸ ื‘ืืงืื ื˜ ื‘ืœื•ื™ื– ืฆื• ืฆื•ื•ื™ื™ ื™ื•ื–ืขืจื–, ื•ื•ืึธืก ืžื™ื›ืึทื™ืœ ื’ืึธืจ ื˜ืจืึทืกืฅ.

ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ื™ืฃ ื“ื™ ืคืจืึธื ื˜ืขื ื“ ื“ืขื‘ื™ืึทืŸ ืงืกื ื•ืžืงืก ืื•ืŸ ื‘ื™ื™ ื“ื™ ืฆื™ื™ื˜ ื•ื•ืขืŸ ื“ื™ ืจื•ืคืŸ ื•ื•ืขืจื˜ ื’ืขืžืื›ื˜, ื•ื•ืขืจื˜ ื“ื™ ืกื™ืกื˜ืขื ืืคื’ืขื–ื•ื ื“ืขืจื˜ ืคื•ืŸ ื“ืขืจ ื•ื•ืขืœื˜ ื“ื•ืจืš ืืŸ ืขืงืกื˜ืขืจืข ืคื™ื™ืจื•ื•ืืœ ืื•ืŸ ืืคื’ืขืฉื˜ืขืœื˜.

"ืึธื•ืงื™ื™, ื’ืขื‘ืŸ ืžื™ืจ ืฆื•ื˜ืจื™ื˜," ืื™ืš ื‘ืึทืฉืœื™ืกืŸ ืฆื• ืฉื˜ืขืœืŸ ืึทื•ื•ืขืง ืฉืœืึธืคืŸ ืคึฟืึทืจ ืึท ืฉืขื”. "ืื™ืš ื•ื•ืขืœ ื–ืขืŸ ืžื™ื˜ ืžื™ื™ืŸ ืื™ื™ื’ืขื ืข ืื•ื™ื’ืŸ."

ื“ืึธ ืื•ืŸ ื•ื•ื™ื™ื˜ืขืจ:

$ 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 -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

ืื™ืš ืจื•ืฃ:
โ€• ืžื™ืฉืข, ืฐืึธืก ื”ืึธืกื˜ื• ื–ื™ืš ืฐื™ื“ืขืจ ืืฒึทื ื’ืขื–ืึทืžืœื˜ ื ื’ื™ื ืงืก?
- ื•ื•ืึทืจื˜ืŸ, ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ืืคื™ืœื• ื•ื•ื™ืกืŸ ื•ื•ื™ ืฆื• ื˜ืึธืŸ ื“ืึธืก!
โ€” ืืงืขื™, ื ื•, ื’ื™ื™ ืฉืœืืคืŸ...

ื ื’ื™ื ืงืก ืขืก ืื™ื– ืงืœืืจ ืจื™ื‘ื™ืœื˜ ืื•ืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืคื•ืŸ ื“ื™ ืœื™ืกื˜ื™ื ื’ ื ื™ืฆืŸ "-ื˜" ืื™ื– ืคืึทืจื‘ืึธืจื’ืŸ ืคึฟืึทืจ ืึท ืกื™ื‘ื”. ืขืก ื–ืขื ืขืŸ ืžืขืจ ืงื™ื™ืŸ ืกืคืงื•ืช ื•ื•ืขื’ืŸ ื›ืึทืงื™ื ื’ ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืคืฉื•ื˜ ืึธื ื ืขืžืขืŸ ืขืก ืื•ืŸ (ื–ื™ื ื˜ ืžื™ืฉืึท ืจื™ืคึผืœื™ื™ืกื˜ ื“ื™ ืกืขืจื•ื•ืขืจ ืžื™ื˜ ืึท ื ื™ื™ึท ืื™ื™ื ืขืจ ืกื™ื™ึท ื•ื•ื™ ืกื™ื™ึท) ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื ืกืึทืœื•ื•ื“.

ืื•ืŸ ื˜ืึทืงืข ื–ื™ื ื˜ ืขืžืขืฆืขืจ ื’ืึทื˜ ื“ื™ ืจืขื›ื˜ ื•ื•ืึธืจืฆืœ'ืึทื”, ื“ืขืžืึธืœื˜ ืขืก ื ืึธืจ ืžืื›ื˜ ื–ื™ื ืขืŸ ืฆื• ื˜ืึธืŸ ืกื™ืกื˜ืขื ืจื™ื™ื ืกื˜ืึทืœ, ืื• ืŸ ืข ืก ืื™ ื– ื’ืขืฐืข ืŸ ืื•ืžื–ื™ืกื˜ , ืฆ ื• ื–ื•ื›ืŸ , ืฐื ืก ืื™ ื– ื“ืืจ ื˜ ื’ืขืฐืข ืŸ ืื•ืžืจืขื›ื˜ , ืื‘ืข ืจ ื“ื ืก ืžื ืœ ื”ื ื˜ ื“ ื™ ื ืฒื’ืขืจื™ ืง ื‘ืื–ื™ื’ื˜ . ื•ื•ื™ ืงืขื ืขืŸ ืžื™ืจ ื’ืขืคื™ื ืขืŸ ืื•ื™ืก ื•ื•ืึธืก ื–ื™ื™ ื’ืขื•ื•ืืœื˜ ืฆื• ื‘ืึทื”ืึทืœื˜ืŸ ืคื•ืŸ ืื•ื ื“ื–?

ื–ืืœ ืก ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืฉืคึผื•ืจ:

$ 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;

ื“ืขืจื™ื‘ืขืจ ื“ื™ ืœื™ืกื˜ื™ื ื’ ื“ื•ืจืš "-ื˜" ืื™ื– ื ื™ืฉื˜ ื’ืขื•ื•ื™ื–ืŸ.

ืึธื‘ืขืจ ื•ื•ื™ ืงืขื ืขืŸ ืžื™ืจ ื–ืขืŸ ืื•ื ื“ื–ืขืจ ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธืŸ?

ืื•ื™ื‘ ืžื™ื™ืŸ ื’ืขื“ืึทื ืง ืื™ื– ืจื™ื›ื˜ื™ืง ืื•ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื ืื™ื– ื‘ืœื•ื™ื– ืื™ืŸ ื“ื™ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ngx_dump_config ืœืึธืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืขืก ื ื™ืฆืŸ ื’ื“ื‘, ืฆื•ืž ื’ืœื™ืง ืขืก ืื™ื– ืึท ืฉืœื™ืกืœ --ืžื™ื˜-ืงืง-ืึธืคึผื˜ -g ืคืึธืจืฉื˜ืขืœืŸ ืื•ืŸ ื”ืึธืคึฟืŸ ืึทื– ืึทืคึผื˜ืึทืžืึทื–ื™ื™ืฉืึทืŸ -ืึธ2 ืขืก ื•ื•ืขื˜ ืื•ื ื“ื– ื ื™ืฉื˜ ืฉืึทื˜ืŸ. ืื™ืŸ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืฆื™ื™ื˜, ื–ื™ื ื˜ ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ืกืŸ ื•ื•ื™ 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;
    }

ืคื•ืŸ ืงื•ืจืก, ืื•ื™ื‘ ื“ื™ ืงืึธื“ ืื™ื– ื’ืขื‘ื™ื˜ืŸ ืื™ืŸ ื“ืขื ื˜ื™ื™ืœ ืื•ืŸ ื ื™ืฉื˜ ืื™ืŸ ืคืึทืœ 'T':, ื“ืขืžืึธืœื˜ ืžื™ื™ืŸ ืื•ืคึฟืŸ ื•ื•ืขื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ.

ื˜ืขืกื˜ nginx.confื ืึธืš ื™ืงืกืคึผืขืจืžืขื ืึทืœื™ ืกืึทืœื•ื•ื“ ื“ืขื ืคึผืจืึธื‘ืœืขื, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขื’ืจื™ื ื“ืขื˜ ืึทื– ืึท ืžื™ื ื™ืžื•ื ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ื– ืคืืจืœืื ื’ื˜ ืคึฟืึทืจ ื“ื™ ืžืึทืœื•ื•ืึทืจืข ืฆื• ืึทืจื‘ืขื˜ืŸ ื ื’ื™ื ืงืก ื˜ื™ืคึผ:

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% ืงื™ืจื™ืœืœื™ืง ื˜ืขืงืกื˜, ืžืึทื“ืึทืคื™ื™ื“ ืžื™ืกื˜ ื“ื™ื™ืœื•ื˜ืึทื“ ืžื™ื˜ ืœืึทื˜ื™ื™ึทืŸ 'ื' ะธ 'ืื•'. ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ืึทืจื•ื™ืกืคืึธื“ืขืจืŸ ืฆื• ื“ื™ืกืงื•ื˜ื™ืจืŸ ื•ื•ื™ ื“ืึธืก ืึทืคืขืงืฅ ืกืขืึธ, ืึธื‘ืขืจ ืขืก ืื™ื– ืึทื ืœื™ื™ืงืœื™ ืึทื– ืึทื–ืึท ืึท ื“ื–ืฉืึทืžื‘ืึทืœ ืคื•ืŸ ืื•ืชื™ื•ืช ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืึท positive ืคึผืจืึทืœ ืื•ื™ืฃ ืฉื˜ืขืœืขืก ืื™ืŸ ื“ื™ ื–ื•ื›ืŸ ืจืขื–ื•ืœื˜ืึทื˜ืŸ.

ื•ื•ืึธืก ืงืขืŸ ืื™ืš ื–ืึธื’ืŸ, ื’ื™ื™ื– ืžื™ื˜ ืคืึทื ื˜ืึทื–ื™ืข.

ืจืขืคึฟืขืจืขื ืฆืŸ

ื“ื™ื‘ืึทื’ื™ื ื’ ืžื™ื˜ GDB
gdb (1) - ืœื™ื ื•ืงืก ืžืขื ื˜ืฉ ื‘ืœืึทื˜
ืกื˜ืจืึทืกืข (1) - ืœื™ื ื•ืงืก ืžืขื ื˜ืฉ ื‘ืœืึทื˜
ื ื’ื™ื ืงืก - ืžืึธื“ื•ืœืข ngx_http_sub_module
ืฐืขื’ ืŸ ื–ืขื’ , ืงืขืฆืฆืฐืขื’ ืŸ ืื• ืŸ ืขืœืขืงื˜ืจื™ืฉ ืข ื–ืขื’

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’