Writing /home/user/smartcj.com/wiki/data/cache/c/cb4f68b7c5486fae5ce81c790071ac88.i failed
Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.
Writing /home/user/smartcj.com/wiki/data/cache/c/cb4f68b7c5486fae5ce81c790071ac88.metadata failed
ru:faq
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| ru:faq [2024/03/05 15:15] – [URL variables] admin | ru:faq [2026/06/22 17:23] (current) – [How to test script] admin | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== FAQ ====== | ||
| + | |||
| + | ====== How to send traffic ====== | ||
| + | |||
| + | Стандартная практика - слать прямо на корень домена те | ||
| + | http:// | ||
| + | скрипт берет домен трэйдера из рефера. | ||
| + | |||
| + | Но, при необходимости, | ||
| + | |||
| + | http:// | ||
| + | |||
| + | , где trader.com - это домен трейдера. | ||
| + | |||
| + | |||
| + | ===== Skimming 101 ===== | ||
| + | |||
| + | В сетингах есть понятие скиминга 101. Ясно что скимить больше 100% невозможно. 101 означает " | ||
| + | |||
| + | |||
| + | ===== Skimming params ===== | ||
| + | |||
| + | В скиминге можно указывать дополнительные параметры в виде skim# | ||
| + | |||
| + | Если у вас включен tube_embeded_switch_rules то первый клик должен уходить на спонсора. Это удобно, | ||
| + | |||
| + | 100# | ||
| + | | ||
| + | В этом случае будет 100% на контент, | ||
| + | |||
| + | Если вам надо что бы правило действовало только на первый клик, то можно указать ским как | ||
| + | |||
| + | 100# | ||
| + | | ||
| + | те tube_embed_switch_rules выключен только для первого клика. | ||
| + | |||
| + | ===== Skim Priority by Entity ===== | ||
| + | |||
| + | По умолчанию Ским указанный в урле имеет приоритет над всеми остальными вариантами. | ||
| + | Если ским в урле не указан - проверяются персональные сетинги трейдеров. | ||
| + | Если и тут ским не указан - используется дефолтный ским из сетингов.(CJSettings - Content Settings - Default skimming) | ||
| + | |||
| + | При желании это поведение можно менять, | ||
| + | Можно таскать параметры вверх вниз, меняя порядок приоритета. | ||
| + | |||
| + | |||
| + | ===== Skimming list ===== | ||
| + | |||
| + | Можно выставить ским на каждый клик. Например, | ||
| + | |||
| + | |||
| + | Прямо в перечислении можно указывать трейдеров, | ||
| + | |||
| + | 100, | ||
| + | |||
| + | 2й клик пойдет на трейдера, | ||
| + | |||
| + | |||
| + | Так же можно указывать некоторые параметры например | ||
| + | |||
| + | 100# | ||
| + | |||
| + | тут надо обратить внимание на # | ||
| + | |||
| + | |||
| + | ===== URL variables ===== | ||
| + | |||
| + | Во всех урлах трейдеров, | ||
| + | |||
| + | Или например хотите передавать с какой страницы клик: out.php? | ||
| + | |||
| + | |||
| + | Пример с реврайтом | ||
| + | У вас урл http:// | ||
| + | Реальный урл - http:// | ||
| + | |||
| + | Вы продаете траф на http:// | ||
| + | Для этого меняем урл брокера на http:// | ||
| + | при клике {GET_slug} будет заменен на cool_gallery и клик уйдет на урл http:// | ||
| + | |||
| + | |||
| + | ===== Real Skimming ===== | ||
| + | |||
| + | Показывает соотношение между кликами которые в реальности ушли на галеры к кликам которые ушли на трейд. | ||
| + | Real Skimming может отличаться от установленного скиминга как в большую так и в меньшую сторону. | ||
| + | Например, | ||
| + | Тоже самое актуально и в обратную сторону. Например если у вас на индексе тумбы категорий, | ||
| + | |||
| + | ===== Last Clicks ===== | ||
| + | Это параметр который показывается какой % пользователей после ухода на этого трейдера больше не кликал на вашем сайте. | ||
| + | Технически можно представить как показатель внешней проды. | ||
| + | |||
| + | |||
| + | ===== First Click ===== | ||
| + | |||
| + | Что бы первый клик уходил всегда на контент надо поставить ским например 100,50 - это значит первый клик ским 100 2й и следующие - 50 | ||
| + | ===== Mysql Settings ===== | ||
| + | базы находятся в scj/ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Подлив Траффика ===== | ||
| + | если вы покупаете траффик на подлив (например на трафикхолдер) то для проверки его качества добавьте условного трейдера podliv.com и сделайте его неактивным (Active - No). И после этого сливайте траффик с параметром /? | ||
| + | |||
| + | Многие покупают траф для подлива, | ||
| + | |||
| + | Есть хороший вариант небольшой автоматизации данного процесса. Покупайте траф БЕЗ id=, те просто шлите на http:// | ||
| + | |||
| + | В Settings - Processed Data - Add Notrade as Inactive Traders | ||
| + | |||
| + | Скрипт будет добавлять все новые рефы как трейдеров, | ||
| + | |||
| + | Условно покупаем 10к просто вашей ниши, потом смотрим с какого сайта была хорошая прода и далее покупаем целенаправленно только с него. | ||
| + | |||
| + | |||
| + | ===== Я забыл пароль в админку, | ||
| + | |||
| + | Восстановить пароль никак, можно только поменять, | ||
| + | |||
| + | Вариант 1, если у вас обычная авторизация, | ||
| + | |||
| + | - переименовать / | ||
| + | - открыть админку (сейчас у вас не будет спрашивать пароль) | ||
| + | - поменять пароль | ||
| + | - переименовать / | ||
| + | |||
| + | Это если у вас апач. Если nginx то он не читает .htaccess, все прописано в конфиге nginx. Вы можете либо переписать .htpasswd с того сайта где знаете пароль, | ||
| + | |||
| + | |||
| + | Вариант 2, если жали на " | ||
| + | |||
| + | - в каталоге /scj/admin/ создать файл reset.php следующего содержания | ||
| + | - < | ||
| + | require(' | ||
| + | db_query(" | ||
| + | echo ' | ||
| + | - открыть в браузере / | ||
| + | - удалить reset.php | ||
| + | |||
| + | |||
| + | **Ошибки** | ||
| + | Вы нажали на " | ||
| + | |||
| + | тут 2 варианта. | ||
| + | |||
| + | 1. Каталог закрыт например nginx и пароль стоит там. | ||
| + | |||
| + | Проверка - открываем / | ||
| + | |||
| + | Решение - просите админа убрать эту авторизацию. | ||
| + | |||
| + | 2. Хост работает через php_fpm | ||
| + | |||
| + | Проверка - делаем файл scj/ | ||
| + | |||
| + | < | ||
| + | |||
| + | <? | ||
| + | if (isset($_SERVER[' | ||
| + | print_r($_SERVER); | ||
| + | } else { | ||
| + | |||
| + | header(' | ||
| + | header(' | ||
| + | echo ' | ||
| + | exit; | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | И открываем в браузере. Должно спросить пароль и отобразить его на экране. Если продолжает спрашивать пароль - значит оно. | ||
| + | |||
| + | Решение: | ||
| + | |||
| + | Либо отключить мультиавторизацию | ||
| + | |||
| + | - в каталоге /scj/admin/ создать файл reset.php следующего содержания | ||
| + | - < | ||
| + | require(' | ||
| + | db_query(" | ||
| + | echo ' | ||
| + | - открыть в браузере / | ||
| + | - удалить reset.php | ||
| + | |||
| + | ===== У меня изменился ИП, а в админке ограничен доступ по ИП ===== | ||
| + | |||
| + | Что бы сделать ресет списка надо: | ||
| + | |||
| + | - в каталоге /scj/admin/ создать файл reset.php следующего содержания | ||
| + | - < | ||
| + | require(' | ||
| + | db_query(" | ||
| + | echo ' | ||
| + | - открыть в браузере / | ||
| + | - удалить reset.php | ||
| + | |||
| + | |||
| + | ===== Как сделать неактивного трейдера, | ||
| + | |||
| + | A. добавть трейдера, | ||
| + | |||
| + | |||
| + | ===== Как импортить трэйдеров из других скриптов ? ===== | ||
| + | |||
| + | A. Maintanance -> Import Traders : есть импорт из наиболее популярных скриптов, | ||
| + | |||
| + | ===== Что такое поле Bookmarks ? ===== | ||
| + | |||
| + | A. Теоретически это % серферов трейдера, | ||
| + | |||
| + | |||
| + | ===== Как устроить трейд через SmartCJ, сохранив при этом " | ||
| + | |||
| + | **Для простых линков на галеры или внутренние страницы сайта: | ||
| + | |||
| + | Допустим у нас есть следующий линк | ||
| + | |||
| + | <a href="/ | ||
| + | |||
| + | мы добавляем небольшой JS в страницу | ||
| + | |||
| + | <script type=" | ||
| + | function scj_click(out_param, | ||
| + | var a = new Image; | ||
| + | a.src=" | ||
| + | return true; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | а в саму линку добавляем следующий код | ||
| + | |||
| + | <a href="/ | ||
| + | |||
| + | **Для топлиста трейдеров** надо добавить такой же JS однако вид линки должен быть немного другим | ||
| + | |||
| + | <a href=" | ||
| + | где trader.com - это домен трейдера. | ||
| + | |||
| + | |||
| + | ===== Как сделать полный дапм баз (mysqldump) ===== | ||
| + | |||
| + | Надо зайти в шел (ssh) и дать сл команду | ||
| + | mysqldump -uLOGIN -pPASS DBNAME > dump.sql | ||
| + | |||
| + | где LOGIN, PASS and DBNAME соотв. ваши данные доступа к мускл. | ||
| + | После этого, дабы было меньше скачивать, | ||
| + | gzip dump.sql | ||
| + | |||
| + | |||
| + | |||
| + | Загрузить бекап | ||
| + | |||
| + | mysql -uLOGIN -pPASS DBNAME < dump.sql | ||
| + | |||
| + | ===== How to move to another server ===== | ||
| + | |||
| + | Проще всего : | ||
| + | - проапдейтить на старом серваке до последнего апа | ||
| + | - поставить с 0 на новом | ||
| + | - перенести дамп мускл | ||
| + | - скопировать сами тумбы | ||
| + | |||
| + | Если вам все же нравится копирование, | ||
| + | - скопировать с пермишенами | ||
| + | - проверить пути и пароли в scj/ | ||
| + | |||
| + | **Master - Slave** | ||
| + | |||
| + | Обратите внимание, | ||
| + | |||
| + | |||
| + | keywords: перенос скрипта | ||
| + | |||
| + | |||
| + | ===== Как переименовать папку скрипта ===== | ||
| + | |||
| + | Если у вас новый инсталл то имя для папки выбирается при инсталле. | ||
| + | |||
| + | Если скрипт уже стоит то можно переименовать папку, но при этом надо не забыть поменять пути в | ||
| + | |||
| + | * includes/ | ||
| + | * **все** common.php | ||
| + | * admin/ | ||
| + | * rewrites - если у вас Apache то htaccess, если nginx то в его конфиге | ||
| + | |||
| + | |||
| + | |||
| + | ===== Античит при продаже трафа | ||
| + | |||
| + | Тестовое решение для фильтрации читового трафа при продаже. Фильтруем по наличию JS и загрузке картинок. Если JS нет - будем слать 100% на урл (гали). | ||
| + | |||
| + | - Настраиваем [[User Vars]] " | ||
| + | - CJ Settings - other settings - Traffic Check : Cheat Hit - cookie doesnt exists - пишем user_var. Теперь, | ||
| + | - В сетингах Sys. Traders - cheat_clicks - ставим персональный ским 100 - значит все читклики всегда на гали | ||
| + | - Traffic Sell ставим продажу _только_ с trade кликов. Учитывая что продажа будет только с трейд кликов - на трейд станет уходить немного меньше хитов, возможно надо будет уменьшить общий ским. | ||
| + | |||
| + | |||
| + | |||
| + | Если вам дают список ИП с читом, а вы не можете найти их - скорее всего причина в том, что по дефолту скрипт хранит данные за последние 24 часа. Это время можно увеличить в сетингах Keep Links, hours | ||
| + | |||
| + | |||
| + | |||
| + | ===== Как сделать " | ||
| + | |||
| + | Например, | ||
| + | * создаем файл например trader.php на корне домена | ||
| + | < | ||
| + | <? | ||
| + | $pages = array( | ||
| + | '/ | ||
| + | '/ | ||
| + | ); | ||
| + | |||
| + | include($pages[rand(0, | ||
| + | </ | ||
| + | * прописываем ПУТЬ (!!!) к trader.php как персональную страницу трейдера | ||
| + | |||
| + | |||
| + | ===== Какая разница между Trade by country и Quality settings ===== | ||
| + | |||
| + | Это 2 отдельные системы управления качеством траффика. Quality settings - это скидки для определенных стран. Например, | ||
| + | |||
| + | Trade by country - это возможность трейдеру слать теже страны (по качеству), | ||
| + | |||
| + | Те если включены обе системы то трейдеру условно будет возвращать Китай да еще и меньше чем он нам прислал. | ||
| + | |||
| + | Имеет ли смысл использовать сразу обе - надо проверять на конкретном сайте на практике. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Можно ли трейдить с топами ===== | ||
| + | |||
| + | Да, безресетный топ это практический классический сидж. | ||
| + | Для ресетных топов существует удобная фича для определения времени, | ||
| + | |||
| + | ===== Почему нет вебинсталла и почему апдейты не ставяться от рута ===== | ||
| + | |||
| + | Вебинсталл: | ||
| + | |||
| + | Апдейты и рут: попытка нести хорошее в люди :) Если вы спросите у любого админа он вам скажет, | ||
| + | |||
| + | |||
| + | ===== Можно ли запускать кроны не каждую минуту ===== | ||
| + | |||
| + | Ин\аут не работают с базой, дабы нагрузка на мускл никак не отражалась на трейде, | ||
| + | |||
| + | Крон можно запускать как угодно редко, хоть раз в день | ||
| + | При запуске крон делает следующее: | ||
| + | |||
| + | * расчитывает приоритеты трейдеров ( те если раз в день то будет расчет раз в день и тд) | ||
| + | * за 1 запуск создается тумба для 1 трейдера | ||
| + | * создается топлист трейдеров | ||
| + | |||
| + | |||
| + | В целом ничего необратимого не происходит, | ||
| + | |||
| + | |||
| + | |||
| + | ===== Сколько сайтов потянет сервер такой-то ... ? ===== | ||
| + | |||
| + | Вопрос из разряда " | ||
| + | |||
| + | |||
| + | Например, | ||
| + | |||
| + | 10М галер в базе с 3 вида сортировки , 500 категорий, | ||
| + | |||
| + | Оставить поиск на mysql - одна нагрузка, | ||
| + | ===== Mysql Backup ===== | ||
| + | |||
| + | Скрипт делает бекап автоматически раз в сутки, сохраняет последние 3 дня и удаляет старые. | ||
| + | |||
| + | Время бекапа скрипт пытается поставить на рендомное время, что бы если на серваке несколько копий то они не делали бекап все одновременно. Однако если базы большие или время рендомно пересеклось, | ||
| + | |||
| + | Если у вас такое кол-во скриптов или такой размер баз, что бекапы нагружают сервак, | ||
| + | |||
| + | Из общий рекомендаций: | ||
| + | 1. ставить бекап на время когда нагрузка наименьшая | ||
| + | 2. делать бекапы по очереди, | ||
| + | 3. делать бекап физически на другой винт относительно того где находятся сами базы. | ||
| + | ===== Abnormally high notrade prod ===== | ||
| + | |||
| + | У notrade может быть очень высокая прода, те много кликов при малом количестве инов. | ||
| + | |||
| + | Вопрос заключается в том, что часто в notrade клики попадают хиты сделанные через переводчик гугла. Ситуация получается примрено следующая: | ||
| + | |||
| + | * юзер пришел от от трейдера, | ||
| + | * на индексе (или категории, | ||
| + | * юзер соглашается - с этого момента весь траффик начинает приходить с googleusercontent.com и IP гугла | ||
| + | |||
| + | Как тут видно в этот момент мы получаем 2 проблемы: | ||
| + | - notrade показывает нереальную продуктивность | ||
| + | - появляется ошибка в проде трейдеров | ||
| + | |||
| + | Теоретически, | ||
| + | |||
| + | Что бы этого избежать надо в код добавить | ||
| + | |||
| + | <meta name=" | ||
| + | | ||
| + | Судя по документации гугла это должно помочь. | ||
| + | |||
| + | |||
| + | ===== Feeders ===== | ||
| + | |||
| + | Как считать траффик от фидеров: | ||
| + | |||
| + | 1. самый простой варинат - создаем трейдера условно feeder.com и шлем как http:// | ||
| + | |||
| + | 2. Траф приходит из разных источников и они меняются. Такой траффик по дефолту считается в notrade. Но можно его автоматически делить. В сеттингах | ||
| + | |||
| + | Тут есть 2 варианта: | ||
| + | |||
| + | - as separate trader - каждый будет как отдельный трейдер, | ||
| + | - as subfeeder - тут надо слать http:// | ||
| + | |||
| + | |||
| + | **Если траф приходит без рефа или реф изменен** то обычно в урле передается какой-то параметр. Тогда достаточно превратить этот параметр в реф и заработают указанные выше способы. | ||
| + | |||
| + | Например, | ||
| + | |||
| + | Добавляем в common.php | ||
| + | |||
| + | < | ||
| + | if (isset($_GET[' | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | те реф в этом случае будет http:// | ||
| + | |||
| + | $_SERVER[' | ||
| + | |||
| + | |||
| + | создав такой реф, что б по нему было ясно откуда пришел траффик | ||
| + | |||
| + | |||
| + | ===== Recaptcha check ===== | ||
| + | |||
| + | Есть интересный вариант проверки качества трафа с использованием речапчи от гугла. Суть в том, что гугл пишет какой % трафа он считает нормальным, | ||
| + | |||
| + | 1. Идем на https:// | ||
| + | Recaptcha V3 Site key | ||
| + | Recaptcha V3 Secret key | ||
| + | |||
| + | |||
| + | 2. вписываем эти значения в Rotation - Settings - Social | ||
| + | |||
| + | 3. на любой странице, | ||
| + | |||
| + | < | ||
| + | <script src=" | ||
| + | <script src=" | ||
| + | |||
| + | < | ||
| + | req_flag = false; | ||
| + | recaptcha_code = ''; | ||
| + | |||
| + | |||
| + | if ('< | ||
| + | if (Math.random() > '< | ||
| + | } | ||
| + | |||
| + | |||
| + | grecaptcha.ready(function() { | ||
| + | grecaptcha.execute('< | ||
| + | | ||
| + | }); | ||
| + | }); | ||
| + | |||
| + | |||
| + | $(document).ready(function(){ | ||
| + | $(' | ||
| + | $(this).click(function(){ | ||
| + | if (req_flag || recaptcha_code === '' | ||
| + | req_flag = true; | ||
| + | |||
| + | $.post('/', | ||
| + | { | ||
| + | ' | ||
| + | ' | ||
| + | }, | ||
| + | function (data) { | ||
| + | | ||
| + | } | ||
| + | ); | ||
| + | | ||
| + | }); | ||
| + | }); | ||
| + | |||
| + | |||
| + | }); | ||
| + | |||
| + | |||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | на линках на галеры или категории добавляем class=' | ||
| + | |||
| + | |||
| + | < | ||
| + | <thumb num=1-10> | ||
| + | <a class=' | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | можно конечно gallery_link заменить на что угодно, | ||
| + | |||
| + | |||
| + | 4. в админке идем в Settings - layouts - и включаем колонку Google Recaptcha | ||
| + | |||
| + | Все, теперь можно видеть процент хорошего трафа в Trade - колонка recaptcha | ||
| + | |||
| + | |||
| + | ====== PATH and URL ====== | ||
| + | |||
| + | Одна из частых проблем - это непонимание (или невнимательность ?) разницы между УРЛом и Путем. | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | Рассмотрим простой пример: | ||
| + | на диске сервера каталог с вашими доменами обычно находится примерно как / | ||
| + | УРЛ к этому же файлу http:// | ||
| + | |||
| + | |||
| + | |||
| + | Периодически возникают вопросы по относительным и абсолютным путям. Относительный путь - это путь относительно текущего положения в системе, | ||
| + | |||
| + | |||
| + | |||
| + | Это выражается например в ротаторе, | ||
| + | Вы хотите что б были не в каталоге scj (урл до тумб получается http:// | ||
| + | У вас домен в / | ||
| + | |||
| + | * ПУТЬ к сохранению тумб - это / | ||
| + | * УРЛ - http:// | ||
| + | |||
| + | |||
| + | ====== Script Update version 1 -> 2 ====== | ||
| + | |||
| + | Первая ветка скрипта (1.X) больше не развивается и в 2016 году мы полностью перешли на ветку 2. Если у вас есть скрипт версии 1, то что бы перейти на версию 2 надо | ||
| + | |||
| + | - поставить скрипт версии 2 на тот же домен (но в другую папку), | ||
| + | - проапдейтить версию 1 до последней доступной версии | ||
| + | - в шеле зайти в scj/bin и запустить php scj_1to2_db_converter.php | ||
| + | |||
| + | Скрипт спросит данные где расположена версия 1 и скопирует оттуда все данные. | ||
| + | |||
| + | Не забудьте, | ||
| + | |||
| + | ====== PHP update ====== | ||
| + | |||
| + | Из-за изменений в IonCube теперь для каждой версии пхп надо готовить отдельный файл, те написанное под 5й пхп не будет работать на 7м и тд. | ||
| + | |||
| + | Когда вы инсталите скрипт то он определяет какая у вас версия пхп и скачивает файлы под вашу версию. Если потом вы смените версию пхп то будет писать что скачанные файлы расчитаны на другую версию пхп (ту на которой был инсталл). | ||
| + | |||
| + | |||
| + | Суть что надо сделать: | ||
| + | |||
| + | Варианты как это сделать: | ||
| + | |||
| + | 1. самый простой: | ||
| + | * делаем бекап | ||
| + | * обновляем пхп | ||
| + | * ставим скрипт с 0, он скачивает файлы под нужную версию | ||
| + | * поднимаем бекап | ||
| + | |||
| + | 2. для любителей копировать файлы | ||
| + | * ставим на 1 домен версию под нужную версию пхп | ||
| + | * копируем *.php файлы на остальные домены (кроме common.php and config.php) | ||
| + | |||
| + | 3. если доменов много с трафом | ||
| + | * делаем 2 версии пхп, дефолтная - старая, | ||
| + | * ставим 7й пхп | ||
| + | * делаем копию доменов, | ||
| + | |||
| + | |||
| + | |||
| + | ====== Domain change ====== | ||
| + | |||
| + | Все данные хранятся в базе, поэтому | ||
| + | |||
| + | - инсталлим скрипт на новый домен | ||
| + | - копируем бекап на новый домен и восстанавливаем | ||
| + | - Settings - CJ Pages меняем на актуальный путь | ||
| + | |||
| + | Все. | ||
| + | |||
| + | |||
| + | |||
| + | ====== Optimize DB ====== | ||
| + | |||
| + | Пункт просто запускает команду optimize для базы, в большнстве случаев это имеет смысл для MyISAM таблиц, | ||
| + | |||
| + | Truncate удаляет все данные из таблицы. | ||
| + | |||
| + | ====== SimilarWeb Stats ====== | ||
| + | |||
| + | Скрипт может собирать статистику по вашим трейдерам с SimilarWeb. Для этого надо получить бесплатно API key | ||
| + | |||
| + | * бесплатно регистрируемся на similarweb | ||
| + | * идем в меню Account - API - Generated Keys | ||
| + | * создаем новый ключ и вписываем его в Settings - Anticheat - Similarweb Api Key | ||
| + | |||
| + | |||
| + | ====== How to hide the script ====== | ||
| + | |||
| + | 1. В папку scj кладем .htaccess | ||
| + | |||
| + | < | ||
| + | RewriteEngine On | ||
| + | RewriteCond %{REMOTE_ADDR} !^123\.255\.123\.255 | ||
| + | RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx | ||
| + | RewriteRule ^(.*)$ - [L,R=404] | ||
| + | </ | ||
| + | |||
| + | и оно будет выдавать всем, кроме указанных ИП - 404. | ||
| + | |||
| + | Если вы юзаете nginx - это прописывается в его конфиг. | ||
| + | |||
| + | Тут важно прописать сюда и ИП вашего серваке, | ||
| + | |||
| + | |||
| + | 2. Если тумбы у вас по дефолту были в scj/thumbs то надо либо физически их вынести в нужное вам место, либо сделать симлинку. | ||
| + | |||
| + | После этого надо что б скрипт был в курсе того, куда вы перенесли | ||
| + | |||
| + | - быстро: | ||
| + | - медленее - list thumbs - massedit - меняем часть урла тумб. Как обычно лишним не будет сделать бекап. | ||
| + | |||
| + | После этого в Rotation -> Setting -> Graber Settings есть поля: | ||
| + | URL to data и PATH to data | ||
| + | URL, соотво-но, | ||
| + | PATH - на / | ||
| + | |||
| + | |||
| + | ====== How to change naming of parameters in URL ====== | ||
| + | |||
| + | Допустим у нас есть параметр | ||
| + | |||
| + | & | ||
| + | |||
| + | но мы хотим как-то хитро зашифровать параметр. Для этого надо: | ||
| + | |||
| + | 1. в темплейте у нас например | ||
| + | |||
| + | & | ||
| + | |||
| + | это надо заменить на | ||
| + | |||
| + | & | ||
| + | |||
| + | 2. в результате ваша функция как-то зашифрует указанный текст и получится допустим | ||
| + | |||
| + | & | ||
| + | | ||
| + | |||
| + | 3. в коммон надо для скрипта расшифровать то что вы сделали, | ||
| + | |||
| + | if (isset($_GET[' | ||
| + | |||
| + | Все. | ||
| + | |||
| + | |||
| + | ====== Landing Pages ====== | ||
| + | |||
| + | В общей стат и стат каждого трейдера есть список урлов на которые приходит траф. | ||
| + | |||
| + | ====== Outlist and Priority ====== | ||
| + | |||
| + | В этом в целом заключается вся раздача трафика. | ||
| + | |||
| + | Трейдеры получают приоритет по расчету Trade Formula. А так же по форсам (например 1 fast force прибавляет 10000 к приоритету что бы трейдер оказался выше по приоритету). | ||
| + | |||
| + | Крон раз в минуту расставляет трейдеров по приоритету в список outlist (settings - out settings). | ||
| + | При каждом клике на аут мы пошлем на трейдера с соответствии с вероятностью в outlist. | ||
| + | |||
| + | Выводы которые надо понять: | ||
| + | |||
| + | 1. если трейдер на первой позиции outlist (и по приоритету) - не факт что он получит первый же клик | ||
| + | 2. если у вас в outlist 10 позиций, | ||
| + | 3. если вы поставили форсов больше чем позиций в листе, то они буду отданы по очереди, | ||
| + | |||
| + | |||
| + | |||
| + | ====== Page Track ====== | ||
| + | |||
| + | При перемещении по сайту можно следить на какие линки приходит траф, для этого добавляем в линк & | ||
| + | |||
| + | ====== How to test script ====== | ||
| + | |||
| + | Всегда имеет смысл проверить что все работает как задумано. | ||
| + | |||
| + | * Включите в CJ Settings | ||
| + | * если надо протестировать правила для определенной страны в common.php для своего IP можно добавить | ||
| + | |||
| + | < | ||
| + | if ($_SERVER[' | ||
| + | | ||
| + | } | ||
| + | </ | ||
| + | | ||
| + | и так можно тестировать работу правил для нужной страны. | ||
| + | |||
| + | |||
| + | ====== How to count with JS ====== | ||
| + | |||
| + | Для обратной совместимости, | ||
| + | |||
| + | Если вы хотите считать только ины то можно поставить JS счетчик следующим кодом: | ||
| + | |||
| + | < | ||
| + | <script | ||
| + | src=" | ||
| + | data-endpoint=" | ||
| + | ></ | ||
| + | </ | ||
| + | ====== Server Load ====== | ||
| + | |||
| + | Что можно отключить что б снизить нагрузку на сервер? | ||
| + | Все что вы можете отключить в админке - так же можно снова включить, | ||
| + | |||
| + | В большинстве случае не сложно догадаться, | ||
| + | |||
| + | Если есть желание смотреть дальше чем " | ||
| + | |||
| + | Нагрузку на сервер можно сравнить с ситуацией когда по одной трубе вода затекает в бассейн, | ||
| + | |||
| + | Что такое переполнение бассейна, | ||
| + | |||
| + | На серваке работает apache (вебсервер), | ||
| + | 50% памяти - кеш статики | ||
| + | 20% - апач | ||
| + | 30% - mysql | ||
| + | |||
| + | Например, | ||
| + | |||
| + | Если давать 110 то запросы будут становиться в очередь, | ||
| + | |||
| + | Это увеличивает скорость роста очереди, | ||
| + | |||
| + | Поэтому " | ||
| + | |||
| + | Иногда админ настраивает сервер немного сложнее и сервер может пропускать запросы, | ||
| + | |||
| + | |||
| + | Базово скрипт состоит из 2х частей | ||
| + | - вебчасть, | ||
| + | - то что выполняется по crontab (раз в минуту или реже) | ||
| + | |||
| + | |||
| + | **Начнем с веб части.** | ||
| + | |||
| + | Надо взять ваш любимый вариант просмотра нагрузки сервака и проверить что в основном нагружает сервер. | ||
| + | В целом есть 3 части: проц, память и диск. Есть еще пропускная способность канала, | ||
| + | |||
| + | 1. Процессор: | ||
| + | |||
| + | Кратко: | ||
| + | |||
| + | После шага 1 темплейт кешится [[new_rotation_faq# | ||
| + | |||
| + | Но часто в темплейтах есть инклуды своего пхп кода. Надо помнить что этот код выполняется на каждый запрос каждой страницы и при его | ||
| + | |||
| + | mysql: если в топе mysql, то вероятно не оптимизирован какой-то из запросов. Из того что есть тияжелое в скрипте: | ||
| + | |||
| + | Либо поиск: mysql ищет намного медленее чем sphinx (надо переходить на mysql fulltext or sphinx) | ||
| + | |||
| + | |||
| + | В целом надо зайти в mysql и проверить какие запросы висят в топе, может быть там есть rand() или like % - тогда это случаи выше. Если этого нет, то обращайтесь - будем смотреть плотнее, | ||
| + | |||
| + | |||
| + | 2. Память и Диск - связаны, | ||
| + | |||
| + | В среднем mysql пытается загрузить в память как можно больше базы, что бы не обращаться к диску за данными и, если хватает памяти, | ||
| + | |||
| + | Тут наступает вопрос приоритета: | ||
| + | |||
| + | Если траф приходит только на главную страницу, | ||
| + | |||
| + | Например, | ||
| + | |||
| + | Понятно что эти параметры не переключаются из скрипта. Тут как обычно есть 2 варианта: | ||
| + | |||
| + | |||
| + | **2. crontab** | ||
| + | |||
| + | По крону (те периодически) скрипт делает несколько действий: | ||
| + | * cron.php - пересчитывает статистику трейдеров (кому сколько должен, | ||
| + | * rotation.php - апдейтит статистику тумб в базе | ||
| + | * gallery_grabber & gallery_checker - грубит тумбы и проверяет что галеры доступны. | ||
| + | |||
| + | |||
| + | Можно ли их запускать не каждую минуту - можно хоть раз в день, но логично что если вы запустите rotation.php раз в день то весь день тумбы будут в том же положении на странице. cron.php - приоритеты трейдеров поменяются 1 раз и тп. | ||
| + | |||
| + | |||
| + | Из всего этого следует вопрос: | ||
| + | |||
| + | |||
| + | ====== How cache works ====== | ||
| + | |||
| + | Как работает кеширование в интернет | ||
| + | |||
| + | < | ||
| + | |||
| + | +------------------+ | ||
| + | | Пользователь | ||
| + | +------------------+ | ||
| + | | | ||
| + | v | ||
| + | +------------------+ | ||
| + | | | ||
| + | +------------------+ | ||
| + | | | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | Кэш браузера | ||
| + | +----------------------------------+ ни скрипт никогда не узнают что | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | CDN | Аналогично и тут, запрос еще не дошел до сервера | ||
| + | +----------------------------------+ | ||
| + | | | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | | ||
| + | | | ||
| + | +----------------------------------+ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | | ||
| + | v | ||
| + | +----------------------------------+ | ||
| + | | | ||
| + | +----------------------------------+ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | | ||
| + | v | ||
| + | +------------------+ | ||
| + | | | ||
| + | +------------------+ | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | **Как браузер получает страницу и где в интернете появляется кэш** | ||
| + | |||
| + | Когда пользователь вводит адрес сайта в браузере, | ||
| + | На самом деле браузер старается не ходить на сервер, | ||
| + | |||
| + | Вся система интернета устроена так, чтобы: | ||
| + | |||
| + | * получить ответ как можно быстрее | ||
| + | * пройти как можно меньшее расстояние | ||
| + | * задействовать как можно меньше серверов | ||
| + | |||
| + | Для этого используются кэши. | ||
| + | |||
| + | |||
| + | **Шаг 1. Браузер и кэш браузера** | ||
| + | |||
| + | После ввода адреса браузер сначала проверяет: | ||
| + | |||
| + | Браузер может хранить: | ||
| + | |||
| + | * готовую HTML-страницу | ||
| + | * стили | ||
| + | * JS скрипты | ||
| + | * изображения | ||
| + | |||
| + | Если нужные данные уже есть в кэше браузера: | ||
| + | |||
| + | * никакого запроса в интернет не происходит | ||
| + | * сервер вообще ничего не узнаёт о пользователе | ||
| + | * страница открывается мгновенно | ||
| + | |||
| + | Это самый быстрый вариант. | ||
| + | |||
| + | **Шаг 2. DNS — поиск адреса сервера** | ||
| + | |||
| + | Если браузеру всё-таки нужно идти в интернет, | ||
| + | |||
| + | «Куда идти?» | ||
| + | |||
| + | Для этого используется DNS. DNS переводит имя сайта в IP-адрес | ||
| + | |||
| + | **Шаг 3. CDN — сервер ближе к пользователю** | ||
| + | |||
| + | После DNS запрос идёт не обязательно сразу на основной сервер сайта. | ||
| + | |||
| + | Между браузером и сервером может находиться CDN — сеть серверов в разных странах. | ||
| + | |||
| + | Пример: | ||
| + | |||
| + | Если всегда обращаться в Европу: | ||
| + | |||
| + | * сигналу нужно пройти большое расстояние | ||
| + | * страница будет загружаться медленно | ||
| + | |||
| + | CDN работает так: | ||
| + | |||
| + | * первый запрос идёт на основной сервер | ||
| + | * ответ сохраняется на сервере CDN ближе к пользователю | ||
| + | * следующие пользователи получают страницу быстрее | ||
| + | |||
| + | CDN удобно использовать для контента, | ||
| + | |||
| + | * если CDN отдаёт ответ из кэша, запрос не доходит до основного сервера | ||
| + | * скрипт ничего не узнаёт о пользователе | ||
| + | |||
| + | **Шаг 4. Веб-сервер (Apache / Nginx)** | ||
| + | |||
| + | Если CDN не смог отдать страницу, | ||
| + | |||
| + | У веб-сервера есть выбор: | ||
| + | |||
| + | * отдать готовую страницу (если он откуда то знает что надо отдать) | ||
| + | * передать запрос дальше в скрипт | ||
| + | |||
| + | Если у веб-сервера есть готовый ответ: | ||
| + | |||
| + | * он сразу возвращает страницу | ||
| + | * скрипт не запускается | ||
| + | * скрипт не знает, что был запрос | ||
| + | * Apache может передать запрос скрипту 1 раз и закешировать ответ | ||
| + | |||
| + | Важный момент: | ||
| + | |||
| + | Это: | ||
| + | |||
| + | * отдельное хранилище | ||
| + | * файлы, память или Redis | ||
| + | * грубо это как отдельная коробка в которую могут складывать данные кто угодно кто работает на сервере | ||
| + | |||
| + | |||
| + | Еще раз для понимания. В серверный кеш могут писать: | ||
| + | |||
| + | * веб-сервер | ||
| + | * скрипт | ||
| + | * оба одновременно | ||
| + | |||
| + | |||
| + | Шаг 5. Скрипт (приложение) | ||
| + | |||
| + | Если запрос дошёл до скрипта: | ||
| + | |||
| + | * скрипт точно знает, что был пользователь | ||
| + | * может записать статистику | ||
| + | * может принять решения сформировать страницу снова или отдать из кеша | ||
| + | |||
| + | |||
| + | **Скрипт формирует страницу из данных.** | ||
| + | |||
| + | Важно: кэшироваться может не только вся страница, | ||
| + | |||
| + | **Пример: | ||
| + | |||
| + | * название сайта хранится в базе и почти не меняется | ||
| + | * текущая дата должна быть новой каждый раз | ||
| + | |||
| + | |||
| + | Тогда: название сайта можно взять из базы 1 раз и сохранить в кеше, а дата формируется заново каждый раз | ||
| + | |||
| + | Те закеширована не вся страница, | ||
| + | |||
| + | **Шаг 6. База данных** | ||
| + | |||
| + | Если данных нет ни в каком кэше: | ||
| + | |||
| + | * скрипт обращается к базе | ||
| + | * база читает данные (тут варианты - если хватает памяти Mysql держит данные в памяти, | ||
| + | * страница полностью формируется заново | ||
| + | |||
| + | |||
| + | |||
| + | **Что из этого всего надо понять** | ||
| + | |||
| + | * если запрос не дошел до скрипта - скрипт про него просто не узнает | ||
| + | * page cache, Redis, memcache, серверный кеш и еще куча слов - это не важно, это просто название " | ||
| + | |||
| + | |||
| + | **Как используется память под кеш** | ||
| + | |||
| + | * базово данные хранятся в файлах | ||
| + | * база данных (mysql) может данные держать в памяти если хватает памяти и достаточно выделено в конфиге mysql | ||
| + | * redis (и любой другой кеш) так же как и база стараются хранить данные в памяти но если не хватает - скидывает в файл | ||
