Повышенная нагрузка из за редиректов

InstantCMS 2.X

Проблема с нагрузкой на сервер. Пытаюсь разобраться

#31 1 марта 2018 в 20:25
Вчера вечером снова напали на меня эти редиречики, да так что сайт лёг намертво, ничего не помогало, пришлось в файл index.php до включения всех функций сайта вставить вот такой код, вдруг кому-то пригодится.

// боремся с редиректами
// в корне сайта, в самом начале файла index.php вставляем:

if(strpos($_SERVER['REQUEST_URI'], '/redirect?url=http') !== false)
{
$is_access = 0; // нет доступа
if(!empty($_SERVER['HTTP_REFERER'])){
if(strpos($_SERVER['HTTP_REFERER'], 'http://'.$_SERVER['HTTP_HOST']) === 0)
{$is_access = 1;} // есть доступ
if(strpos($_SERVER['HTTP_REFERER'], 'https://'.$_SERVER['HTTP_HOST']) === 0)
{$is_access = 1;} // есть доступ
}
if($is_access != 1){
echo 'Переход недоступен '.$_SERVER['REQUEST_URI'];
return; // дальше не выполняем
}
}
//-----------------------------------

/**
* Константа, по которой можно отследить текущий тип запуска CMS
*/
// дальше код cms…
#32 2 марта 2018 в 16:40
Вы молодец, что делитесь такими решениями.
То есть HTTP_REFERER они пока генерировать не научились?
#33 2 марта 2018 в 19:43

Вчера вечером снова напали на меня эти редиречики, да так что сайт лёг намертво, ничего не помогало, пришлось в файл index.php до включения всех функций сайта вставить вот такой код, вдруг кому-то пригодится.

Alex
Мне это не помогло! Есть какой то иной способ редиректа, когда сам сайт не используется вообще достаточно прописанного на ВПС домена. Брейни пишут, что у них есть идеи как это победить, но практического решения еще не нашли.
#34 3 марта 2018 в 11:55

Есть какой то иной способ редиректа, когда сам сайт не используется вообще достаточно прописанного на ВПС домена. Брейни пишут, что у них есть идеи как это победить, но практического решения еще не нашли.

vikont
А есть ли анализ с каких IP идут паразитные запросы?
В качестве временной меры можно блокировать по IP, пока Брейни думают.
#35 3 марта 2018 в 12:29


То есть HTTP_REFERER они пока генерировать не научились?

@IamB
Наверно могут, поэтому скорее всего у vikont мой код не сработал, но в моём случае большинство редиректов идёт не напрямую "источник->мой_сайт->целевой_сайт" а через цепочку, примерно так "источник->ещё_сайт->мой_сайт->целевой_сайт", и у меня HTTP_REFERER моего сервера отслеживается.
vikont попробуйте отсечь вообще все редиректы:
if(strpos($_SERVER['REQUEST_URI'], '/redirect?url=http') !== false) { return;}
Так думаю точно хулиганы не пролезут, но есть минус — компонент "redirect" у вас на сайте вообще работать не будет.
#36 3 марта 2018 в 12:52
Самое печальное в данной проблеме как на первой так и на второй ветке что данные ссылки еще и прекрасно индексируются, а проставляют их валом, как следствие взрыв ссылочной массы, резкий рост позиций сайта, а затем как и положено медленное сползание сайта в выдаче



По редиректам у себя сделал так:
В конфиге nginx для домена прописал
location /go/ {
return 444;
}
В логах чисто, нагрузка на сервак упала, но, да, редиректы не работают.
#37 3 марта 2018 в 13:05
Про "ссылочную массу" так всё и есть, весь этот мусор индексируется, очень печально.
#38 3 марта 2018 в 13:20


Про "ссылочную массу" так всё и есть, весь этот мусор индексируется, очень печально.

Alex
Это не просто печально, это беда, это проблема, получается что вся твоя работа по продвижению сайта на инстант коту под хвост, т.к. сайт можно запросто завалить проставлением массы ссылок на ГС через редирект + через тот же редирект создание доп нагрузки на сервак/хостинг.
#39 3 марта 2018 в 14:21

vikont попробуйте отсечь вообще все редиректы:
if(strpos($_SERVER['REQUEST_URI'], '/redirect?url=http') !== false) { return;}
Так думаю точно хулиганы не пролезут, но есть минус — компонент "redirect" у вас на сайте вообще работать не будет.

Alex
Это где прописывать? В index.php? Не поможет, я полностью скрипт сайта удалял, оставлял пустую доменную папку, а редиректы шли! Единственная разница, что при этом в редиректах отсутствовали ссылки на статьи.
#40 3 марта 2018 в 14:37

В конфиге nginx для домена прописал
location /go/ {
return 444;
}

Василий Сергеевич
Прописал, не работает! Можно ваш конфиг посмотреть, может быть не так прописываю?

В качестве временной меры можно блокировать по IP, пока Брейни думают.

@IamB
Будете смеяться, сам не поверил, но прописал кучу IP на блокировку, а редиректы с них продолжают идти.
#41 3 марта 2018 в 14:47


В конфиге nginx для домена прописал
location /go/ {
return 444;
}

Василий Сергеевич
Прописал, не работает! Можно ваш конфиг посмотреть, может быть не так прописываю?

В качестве временной меры можно блокировать по IP, пока Брейни думают.

@IamB
Будете смеяться, сам не поверил, но прописал кучу IP на блокировку, а редиректы с них продолжают идти.

vikont


server {
listen 111.111.111.111:80;
server_name сайт.com www.сайт.com;
error_log /var/log/apache2/domains/сайт.com.error.log error;

location / {
proxy_pass 111.111.111.111:8080;
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
root /home/admin/web/сайт.com/public_html;
access_log /var/log/apache2/domains/сайт.com.log combined;
access_log /var/log/apache2/domains/сайт.com.bytes bytes;
expires max;
try_files $uri @fallback;
}
}

location /error/ {
alias /home/admin/web/сайт.com/document_errors/;
}

location @fallback {
proxy_pass 111.111.111.111:8080;
}

location /go/ {
return 444;
}

location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}

include /home/admin/conf/web/nginx.сайт.com.conf*;
}
Внимание на отступы при прописывании директив location !
После изменений конфига не забываем перезагрузить nginx!
#43 3 марта 2018 в 14:58

vikont:

Василий Сергеевич:
В конфиге nginx для домена прописал
location /go/ {
return 444;
}
Прописал, не работает! Можно ваш конфиг посмотреть, может быть не так прописываю?
@IamB:
В качестве временной меры можно блокировать по IP, пока Брейни думают.
Будете смеяться, сам не поверил, но прописал кучу IP на блокировку, а редиректы с них продолжают идти.

Спойлер
Внимание на отступы при прописывании директив location !
После изменений конфига не забываем перезагрузить nginx !

Василий Сергеевич

Вот мой общий конфиг, куда не вставляю, ошибка конфига
user nginx;
worker_processes 3;

pcre_jit on;

error_log /var/log/nginx/error.log;
#error_log /var/log/nginx/error.log notice;
#error_log /var/log/nginx/error.log info;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr — $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'cs=$upstream_cache_status';
charset utf-8;
access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
reset_timedout_connection on;
keepalive_timeout 30;
server_tokens off;
server_names_hash_max_size 128;
server_names_hash_bucket_size 256;
client_max_body_size 1024m;

#gzip on;

#proxy_temp_path /var/lib/nginx/proxy 1 2;
#proxy_cache_valid 20s;
#proxy_cache_key $scheme$proxy_host$request_uri$cookie_user;
#proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:400m inactive=120m max_size=500M;
#proxy_cache_min_uses 2;


proxy_cache_valid 10s;
proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=one:100m max_size=300M;
proxy_cache_path /var/lib/nginx/cache1 levels=1:2 keys_zone=two:100m max_size=300M;

proxy_temp_path /var/lib/nginx/proxy 1 2;
proxy_ignore_headers Expires Cache-Control;
proxy_cache_use_stale error timeout invalid_header http_502;
proxy_cache_bypass $cookie_session;
proxy_no_cache $cookie_session;
proxy_cache_min_uses 2;

limit_conn_zone $binary_remote_addr zone=lone:10m;
limit_req_zone $binary_remote_addr zone=ltwo:10m rate=5r/s;
limit_req_zone $binary_remote_addr zone=lstrict:10m rate=1r/s;
limit_req_zone $binary_remote_addr zone=highspeed:10m rate=10r/s;

fastcgi_cache_path /var/lib/nginx/fpm levels=1:2 keys_zone=fcgi:32m max_size=100m;
fastcgi_cache_path /var/lib/nginx/fpm2 levels=1:2 keys_zone=fcgi2:32m max_size=100m;
#fastcgi_cache_key "$scheme$request_method$host$request_uri$cookie_user";
fastcgi_temp_path /var/lib/nginx/fastcgi 1 2;
fastcgi_ignore_headers Expires Cache-Control;
fastcgi_cache_use_stale error timeout invalid_header;

limit_conn_zone $binary_remote_addr zone=lfcgi:10m;
limit_req_zone $binary_remote_addr zone=lfsci2:10m rate=5r/s;

resolver 8.8.8.8 8.8.4.4 valid=300s ipv6=off;
resolver_timeout 5s;

map $http_accept $webp_suffix {
"~*webp" ".webp";
}



# Load modular configuration files from the /etc/nginx/conf.d directory.
# See nginx.org/en/docs/ngx_core_module.html#include
# for more information.
ModSecurityEnabled off;
ModSecurityConfig modsecurity.conf;
include /etc/nginx/conf.d/*.conf;

index index.php index.html index.htm;

server {
root /var/www/html;
access_log /etc/nginx/vhost_logs/default_access;
error_log /etc/nginx/vhost_logs/default_error;
location / {
root /var/www/html;
index index.php index.html index.htm;
}
}



include /etc/nginx/sites-available/*.conf;

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# root html;

# location / {
# }
#}

# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# root html;

# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_timeout 5m;

# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# }
#}

}

#44 3 марта 2018 в 15:04
Конечно будет выдавать ошибку, пишем в конфиг домена, они у вас примерно по пути /home/admin/conf/web/
Имена такие: сайт.com.nginx.conf
#45 3 марта 2018 в 15:08


Не поможет, я полностью скрипт сайта удалял, оставлял пустую доменную папку, а редиректы шли! Единственная разница, что при этом в редиректах отсутствовали ссылки на статьи.

vikont
Как такое может быть? Скорее всего у вас на сервере работает сохранённая в cache версия сайта. Если на сайте физически нет компонента "redirect" который выполняет переход по ссылке, и вообще никаких скриптов нет, то и исполнять конструкцию "/redirect?url=http" просто нечему, ничего не произойдёт. Значит где-то лежит копия сайта, которая и живёт своей отдельной жизнью )). Вам её найти надо и что-то с ней сделать.
Или я вас неправильно понял? и вы говорите о том, что на ваш сервер при удалённых скриптах всё равно поступают запросы типа "/redirect?url=http://кокойто_гс"?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.