ื ืืขืจืกื ืคึผืจืืงืจืข ืืขืฉืืืืข ืืขืืจืืคื ืฆื ืืืื ืขืจ ืคืื ืืืื ืคืจืืื ื. ืึธืืขืจ ืืื ืคึผืจืืงืจืข ืืื ืขืก ืืื ืืขืืืขื ืคึฟืึทืจ ืืืืึทืื, ืขืก ืืื ืืขืืืขื ืคึผืื ืงื ืืื ืคึฟืึทืจืืืืืืขืจืืฉืข ืคึฟืึทืจ ืืืจ.
ืืื ืืืื ืืึธืื ืึทื ืืืื ืคืจืืึทื ื ืืื ืืึทื ืฅ 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 ืคึผืจืึทื ืืืืฃ ืฉืืขืืขืก ืืื ืื ืืืื ืจืขืืืืืึทืื.
ืืืึธืก ืงืขื ืืื ืืึธืื, ืืืื ืืื ืคืึทื ืืึทืืืข.
ืจืขืคึฟืขืจืขื ืฆื
ืืงืืจ: www.habr.com