แงแแแแแแ แฃแกแแแแแแแ แแแแแแ แแแฎแแ แฉแแแก แแ แ-แแ แ แแแแแแแ แก. แแแแ แแ แ แแแแแแแแแช แฃแกแแแแแแแ แแฆแแแฉแแแ แแแฎแแแแแกแแแแก, แแกแแแแแ แแแกแแ แแแแ แแงแ แฉแแแแแแก.
แฃแแแ แแแฅแแ, แ แแ แฉแแแ แแแแแแแ แ แกแแแแแแ UNIX-แแแแฎแแแ แแแแแ: แจแแฃแซแแแ แแแแแ แแแแแแกแขแแแแ แแก แกแแกแขแแแ mysql, php แแ แแแแแแแ แแแ แขแแแ แแแ แแแแขแ แแแ nginx.
แแ แแแก แแฅแแก แแแแฃแแ แแ แแ แแแแฎแแแแ แ แแแแแแแ แแ, แ แแแแแแช แแซแฆแแแแแ แกแแแจแแแแแแ แแแกแขแ แฃแแแแขแแแก.
แแ แ-แแ แแ แแกแแแ แกแแแขแ, แ แแแแแแช แแซแฆแแแแแ แฏแแญแแแก แฎแแ แฎแแแก, แแงแแ แแ แแแแก แกแแซแแแแ แกแแกแขแแแแแแก TOP-แจแ. แแก แกแแแขแ แแ แแก แแ แแแแแแ แชแแฃแแ แแแแแแฎแแแแแแ, แแแแ แแ แแแฆแแชแแ แแแกแแ แแแแแแกแฎแแแก แฉแแแแ แแแแฆแ. แ แแ DDoS, แจแแแแแ แฃแฎแแจแ แซแแแ, แจแแแแแ แฌแแ แแ แฃแฎแแแก แแแแแแขแแ แแแก แแ แฃแแแแแแแแ แจแแฃแ แแชแฎแงแแคแแก แฐแแกแขแแแแก แแ RKN-แก.
แฃแชแแ แงแแแแแคแแ แ แแแฌแงแแแ แแ แแ แแก แกแแแจแแแแ แแ แแงแ แแแ แแ แแ แกแแแขแแ แแแแแแแแ แแแแฌแงแ แซแแแแแก แจแแแแแแแแก แแแแ แฎแแแแก แแแขแแแแแ.
แแก แแงแ แแแแแแแแฅแแแแ, แจแแแแแ แแแแแ แแแแแแแก แแฆแแแแ แ.
แซแแแแก แแ แ แแงแ, แ แแชแ แขแแแแคแแแแ แแแ แแแ: โแกแแ, แฉแแแก แกแแ แแแ แก แแ แฃแงแฃแ แแ? แแแฉแแแแแแ, แ แแ แแแขแแฎแแก, แแแแก แแแ แแแแขแแแชแแ, แแแแ แแ แแ แซแแแแ แฃแแแ แแแกแแแ แแแแ แแ แแ แแขแแแแแก. แแฅแแแ แแ แแ แแแแแฆแ แแแ แแแแแแก แแแฃแ แแแแแแ?โ
แ แแกแแช แแแฐแงแแ แแแฎแแแแ แกแแแแแแแ แแแกแแฃแกแแ, แ แแแแแแช แจแแแซแแแแ แจแแฏแแแแแก แจแแแแแแแแแ แแ:
- แแแขแแฎแแแก แแแแแแแ แกแแแแแแ แแแงแแคแแแ แ แแงแ;
- แแแแแแแกแฎแแแแก แจแแแซแแ แกแฃแแแ แแแแฎแแแ แแแแแก แฃแคแแแแแแแก แแแแแแแแ;
- แแแแแแกแฎแแ (แแฃ แแก แแแฎแแ) แแงแ แแแแแแแฃแแ แแแแแ แแขแฃแแแ แแ แกแแแขแแ;
- แแ แแแแแแฃแ แ แแแแแแแแ แแแแแกแฌแแ แแแฃแแแ แแ แแฅแแแ แฃแแ แแแแ แฃแแแ แแแกแแแแแ แแงแ แแฃ แแ แ แ แแแแ แจแแฆแฌแแแ;
- แฐแแแแ แแ แแแ แแแแฅแแแแ แกแแแขแแก แแแแกแ แแ แแแแแชแแแแ แแแแแแแ.
แ แแช แจแแแฎแแแ แแแแ แแฃแแฅแขแก.
แแฎแแแแ แแแแ แ แฌแแแ แแฎแแ แแก IP แฃแงแฃแ แแแก แกแแแงแแ แแก. แแแฅแแแแแแกแ แแ แคแ แแแขแแแแก แจแแ แแก แแ แฎแแแแ แแแชแแแ http(s) แแแ แแ, แแแแฎแแแ แแแแแแ/แแแ แแแแแ แแแแกแฎแแแแแแฃแแแ, แแ แชแแ แแ แแแกแแฆแแแแแ แแ แแ แแก แแแชแแแแแ. แแแชแ แแกแคแแ แแแกแแแแ แแแแแ, 80/443-แแก แแแ แแ แงแแแแ แแแ แขแ แแแฎแฃแ แฃแแแ. แแแแ แ backend IP-แแแ แชแแแแแแแ แแฎแแแแ แแ แ แแแแฎแแแ แแแแแกแแแแก, แ แแแแแแกแแช แแแฎแแแแ แแแแแแแแ แแแแแแ.
แแแแแแขแแแแแฃแแแ แฌแแแ แแฎแแ แแก 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
แแแซแแแ แจแแกแแซแแ แฐแแแแ แก
แแ แแแฌแงแแ แกแแ แแแ แก, แแแ แแแ แ แแแจแ แกแแแแจแแแแ แ แแแแแ. แแแแแแ แแ แแแกแแแแก แแ แแแคแฃแ แชแแแ แแแ แแแขแแ แแแแชแแ -แแแ แแแ, แแกแขแแ แแ, แกแแกแขแแแแก แแฃแ แแแแแแ แแ แ.แจ., แจแแซแแแแแกแแแแแแ แแ, แแแแแฌแแแ แคแแแแแก แจแแฅแแแแก แแแ แแฆแแแก, แแฃแแชแ แแแกแแแก, แ แแ แแแ แแแแฃแ แ แแ แแแแ แ แแแแแก แแแแแ "แแแแซแ แแแ" แแ แแแจแแ แฃแแแ แแแแ แ "แแแแแแฏแ" แกแแแแ แกแแแฃแแแ แแแแก แแซแแแแ. .
แแแฌแงแแ แแแ แแแแฃแ แ แแแแแจแ, แฏแแ แแ แแแกแแแก, แ แ แแแซแแแ, แแกแฌแแแแแ แแแแคแแแฃแ แแชแแแแก. แแแ แแแ แ แแแจแ แแแแแขแแ แแกแแแก 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?
- แแแแฆแแแซแ, แแ แแ แช แแ แแแชแ แ แแแแ แแแแแแแแ แแก!
- แแแ แแ, แแแแซแแแ...
แแแแแฅแกแ แแก แแจแแแ แแ แแฆแแแแแแแแ แแ แฉแแแแแแแแแแแก แแแแแแแแแแ โ-Tโ-แแก แแแแแงแแแแแแ แแแแแแฃแแแ แแแแแแแก แแแแ. แฐแแแแ แแแแแ แแญแแ แแฆแแ แแแแแ แแแ แแ แจแแแแซแแแ แฃแแ แแแแ แแแแฆแ แแ (แ แแแแแ แแแจแแ แกแแ แแแ แ แแแแแช แจแแชแแแแ แแฎแแแ) แแ แแแแแแ แแแแแแ แแแฃแแแ แฉแแแแแแ.
แแ แแแ แแแแช, แ แแแแแ แแแฆแแชแแ แแแแฆแ แฃแคแแแแแแ rootแแฐ, แแแจแแ แแฎแแแแ แแแแก แแแแแแแแแก แแแ แ แแฅแแก แกแแกแขแแแแก แฎแแแแฎแแ แแแกแขแแแแชแแ, แแ แฃแแแ แ แแงแ แแแแก แซแแแแ, แ แ แแงแ แแฅ, แแแแ แแ แแแฏแแ แแ แชแแแแแกแแแงแแแ แแแแแ แแแแแแ แชแฎแ แซแแแ. แ แแแแ แแแแแ แแแแแ, แ แแกแ แแแแแแแ แกแฃแ แแแ แฉแแแแแแ?
แจแแแแชแแแแ แแแแงแแแ:
$ 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 แแชแแแแ แแแกแ แแแงแแแแแ แแแ, แกแแแแแแแแ แแ แแ แแก แแแกแแฆแแแ -- แแ แแแ-cc-opt -g แฌแแ แแแแแแแแแก แแ แแแแแ แแแฅแแก, แ แแ แแแขแแแแแแชแแ -O2 แแก แแ แแแแแแจแแแแแก. แแแแแ แแ แแก, แ แแแแแ แแ แแแชแ แ แแแแ ngx_dump_config แจแแแซแแแแ แแแแฃแจแแแแแก แจแแแแฎแแแแ 'T':, แฉแแแ แแ แแแแแ แฅแแแแ แแ แแแแแก, แแแแ แแ แแแแแแกแขแแแแ แแ แแแกแ แแแแแงแแแแแแ แจแแแแฎแแแแ 't':
แ แแขแแ แจแแแแซแแแแ แแแแแแงแแแแ '-t' แแกแแแ '-T'แแแแแแก แแแแฃแจแแแแแ 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แแ แแแแแแแก แแฅแกแแแ แแแแแขแฃแแแ แแแแแญแ แแก แจแแแแแ แแแแแแแแ, แ แแ แแแแแ แแ แแแ แแแแก แแฃแจแแแแแกแแแแก แกแแญแแ แแ แแแแแแแแฃแ แ แแแแคแแแฃแ แแชแแ. 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;
แแแแแ แจแแแฎแแแแ แ แ แฎแแแแ แแฅ แแแแแแแแแแ แแแแ.
แฒแแแกแแแฆแแ แฃแแ แแแแฎแแแ แแแแแก แแแแแขแ's 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- แแแแ แแแแ แแชแแแแแ 'แ' on "แ" ะธ 'A' on "แ":
sub_filter_once off;
sub_filter 'ะพ' $sign_o;
sub_filter 'ะฐ' $sign_a;
แแแ แแแแแ, แแ แแแแแ แแ แแแฎแแแฌแแแแแ แแก แแ แแก 'a' != 'a' แ แแแแ แช 'แ' != 'แ':
แแแ แแแแ, แกแแซแแแแ แกแแกแขแแแแก แแแขแแแ, แฉแแแฃแแแแ แแแ 100% แแแ แแแแชแแก แขแแฅแกแขแแก แแแชแแแแ, แแแแแแฃแ แแ แแแแแแแแฃแ แจแแชแแแแ แแแแแแก แแฆแแแแ. "แ" ะธ "แ". แแ แแ แแแแแแ แแแแแแฎแแแ, แแฃ แ แแแแ แแแกแแฎแแแ แแก SEO-แแ, แแแแ แแ แแแแแแแแ แกแแแแ แแฃแแแ, แ แแ แแกแแแแแก แแกแแแแ แจแแ แแแแ แแแแแแแแ แแแแแแแ แแฅแแแแแก แแแแแชแแแแแ แซแแแแแก แจแแแแแแแจแ.
แ แ แแแฅแแ, แคแแแขแแแแแก แแฅแแแ แแแญแแแ.
แแแขแแ แแขแฃแ แ
แฌแงแแ แ: www.habr.com