User Tools

Site Tools


ru:troubleshooting

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
ru:troubleshooting [2018/11/16 09:51]
admin [Wrong skimming, wrong redirect, out does not work]
ru:troubleshooting [2024/03/11 11:12] (current)
admin [Server setup error, apache\nginx is running with user permissions - Warning]
Line 1: Line 1:
 +====== Troubleshooting ======
  
 +===== It doesn't work ! =====
 +
 +Я рад вам помочь, но в 95% случае начинается все с одного и того же: вопроса что именно не работает и как именно не работает. Поэтому дабы ускорить тот процесс, пожалуйста, сделайте следующее:
 +
 +  * Сделайте все апдейты, скорее всего ваша проблема уже решена.
 +  * Попробуйте найти свой вопрос в траблшутинге или факе, скорее всего ответ там уже есть
 +  * Напишите где именно проблема (урл, пункт в админке, на какой урл вы кликали и тд)
 +  * Что именно вам выдало (ошибка, варнинг, что угодно - просто скопируйте что вывел скрипт)
 +  * Если считаете что этого не достаточно - опишите что вы ожидали увидеть
 +
 +Заранее спасибо! чем больше информации - тем быстрее и качественее будет помощь :)
 +
 +===== Page does not show =====
 +
 +не показывается, белая страница и тп - значит в php.ini выключен вывод ошибок. По белому экрану я так же не могу опредлить в чем именно проблема. Надо выключить вывод ошибок и посмотреть что именно пишет.
 +
 +
 +===== Does not count traffic =====
 +
 +
 +1. Проверьте работает ли крон. Вкладка Home. Если там нет надписи "check SCJ crontab job" - следуйте к следующим пунктам. 
 +Если есть эта надпись, значит кто-то удалил нашу задачу для крона.
 +Необходимо прописать запуск каждую минуту строки вида 
 +
 +  cd /path_to_scj/scj/bin/; env HTTP_HOST=yourdomain.com /path_to_php/php -q cron.php
 +
 +
 +2. Если вы используете index.php Смарта убедитель, что в том же каталоге нет других index файлов, например index.html.
 +В зависимости от настроек сервера по умолчанию при запросе урла 
 +  http://domain.com/ 
 +он может брать файл index.php или index.shtml или index.html и тд. Те если в каталоге лежит index.html - сервер грузит его вместо index.php (файл SmartCJ), те скрипт смарта не отрабатывает и хиты не считаются.
 +
 +
 +===== How to view HTTP headers =====
 +
 +
 +Это так же вариант, как можно посмотреть, куда вас редиректит например внешний ротатор.
 +Поскольку каждый клик проходит много правил - единственный вариант узнать почему вас редиректит туда а не сюда - это хедеры.
 +Итак в протоколе HTTP, говоря простым языком, существует понятие хедеров и контента. В хедерах передается служебная информация, контент - это сама страница, картинка или например флеш.
 +99% всех редиректов происходит с использование хедера Location. Когда браузер получает от сервера такой хедер он сразу же идет по указанному урлу.
 +
 +Итак, для того что бы посмотреть куда вас редиректит скрипт надо посмотреть хедеры. Это делается следующим образом (вариантов много, но мне кажется данный наиболее простой и требующий минимальных усилий):
 +  - В settings - other включить out.php debug (Yes) (ждем минуту)
 +  - Если у вас еще не установлен, то скачать и установить FireFox 
 +  - Нажать Инструменты-Дополнения (Tools-addons), оттуда перейти на сайт аддонов для ФФ и скачать аддон Live HTTP Headers
 +  - Открыть в ФФ свой сайт, из меню Инструменты (Tools) запустить Live HTTP Headers. Откроется новое окно, в котором будут видны все хедеры. Кликаете на любой ссылке и можете наблюдать как в этом окошке бегут запросы от вас к серверу. В этом надо найти строки вида
 +
 +  Location: http://site.com/
 +
 +это редирект.
 +
 +{{:ru:http_headers.png|}}
 +
 +Так же в хедерах может быть строки типа Current-Click: и тп. Для того что бы разобрать каждую конкетную ситуацию надо именно хедеры.
 +
 +===== SmartCJ doesn't count hits properly =====
 +
 +Варианта 2:
 +
 +**1. если вы используете для подсчета кликов инклуд**
 +
 +Проверить это очень просто. Если вы используете include.php переименуйте его в include_scj.php и создайте файл include.php следующего содержания 
 +
 +  <?php
 +  $f = fopen('./log.txt', a);
 +  fputs($f, date('H:i') . " {$_SERVER["HTTP_REFERER"]} \n");
 +  fclose($f);
 +  include('include_scj.php');
 +
 +потом создайте файл log.txt и chmod его 666
 +
 +Скрипт очень простой, он просто пишет рефы в файл. Ставьте скрипт на час или сутки по желанию и в конце этого периода загрузите файл в эксель и отсортируйте - так будет проще посчитать сколько было хитов с нужным рефом и соотв узнать сколько было хитов с нужного домена.
 +
 +**2. если вы используете индекс смарта**
 +  * создайте в корне файл log.txt и chmod 666 его
 +  * оригинальный индекс (index.php смарта) переименуйте в index_scj.php
 +  * создайте index.php следующего содержания
 +
 +  <?php
 +  $f = fopen('./log.txt', a);
 +  fputs($f, date('H:i') . " {$_SERVER["HTTP_REFERER"]} \n");
 +  fclose($f);
 +  include('index_scj.php');
 +
 +
 +Все. 
 +Скрипт очень простой, он просто пишет рефы в файл. Ставьте скрипт на час или сутки по желанию и в конце этого периода загрузите файл в эксель и отсортируйте - так будет проще посчитать сколько было хитов с нужным рефом и соотв узнать сколько было хитов с нужного домена.
 +
 +**Если надо посчитать кол-во КЛИКОВ** все практически так же.
 +
 +  * out.php смарта переименовываем в scj_out.php
 +  * создаем там же файл log.txt и 666 на него
 +  * создаем out.php следующего содержания
 +<code>
 +<?php
 +
 +if ($_COOKIE['from'] == 'trader.com') {
 + $f = fopen('./log.txt', a);
 + fputs($f, date('H:i') . " {$_SERVER["REMOTE_ADDR"]} \n");
 + fclose($f);
 +}
 +
 +include('out_scj.php');
 +
 +</code>
 +
 +где **trader.com** соответственно нужный трейдер.
 +
 +потом остается только посмотреть кол-во строк в лог файле за выбранный промежуток времени.
 +
 +===== All clicks are counted as nocookie. =====
 +
 +A: Клики считаются по кукам. При ИНЕ пользователю ставится кука, в которой записано от какого трейдера он пришел. При кликах считывается эта кука и соответствующему трейдеру зачисляется клик. Если при клике скрипт не может прочесть куку (ее нет) - скрипт записывает такие клики в nocookie.
 +
 +Технология работы кук такова, что если кука была поставлена на странице на домене www.asd.com, то на странице с домена asd.com она НЕ будет видна. Прочесть подробнее про это можно в [[http://www.faqs.org/rfcs/rfc2965.html|RFC 2965]] и [[http://www.faqs.org/rfcs/rfc2109.html|RFC 2109]].
 +
 +Что это значит в нашей ситуации: если серфер пришел к вам на страницу 
 +  http://www.site.com/ 
 +а линк к ауту 
 +  http://site.com/out.php
 +(те без www), то на аут куки переданы НЕ будут и клики будут засчитаны как нокуки. Что бы такого не было надо все линки на аут делать относительными.
 +
 +  <a href='http://site.com/out.php'>Click here</a>  - НЕПРАВИЛЬНО
 +  <a href='/out.php'>Click here</a>  - Правильно
 +
 +
 +Бывают частные случаи, например :
 +У трейдера прописана Personal Page. Трейдер шлет вам как 
 +  http://host.com/
 +, а в Personal Page прописано 
 +  http://www.host.com/trader.html 
 +, те теряется кука. Что бы избежать этого лучше прописывать персональную страницу как путь те просто trader.html (без http:/www..)
 +
 +
 +===== It redirects somewhere  =====
 +
 +Надо включить в Settings - Debug out.php, кликнуть на нужной ссылке  и посмотреть хедеры (как это сделать описано выше).
 +Обычно по хедерам в целом ясно что происходит. Если не ясно - создавайте тему на форуме с хедерами, будем разбирать.
 +
 +===== It counts 3 times more traffic then I actually have =====
 +
 +Часто сталкиваюсь со сл. ситуацией: при ошибках вебсервера (403, 404 ) редиректит на корень домена. При отсутствующей картинке на индексе браузер загружает вместо отсутствующей картинки - индекс, так мы получаем 2 ина при одном заходе.
 +
 +Вариант 2: на корне лежит индекс смарта. При этом в [[CJ Pages]] так же прописан тот же индекс, получается что индекс инклудит сам себя.
 +
 +
 +В любом случае проверить это достаточно просто.
 +
 +1. делаем тестовый темплейт где просто строка "тест"
 +2. открываем сайт как domain/?force_template=test
 +3. убеждаемся что в логе подсчета хитов только 1 запись с вашего ИП
 +4. переносим в тестовый темплейт по частям то что у вас в индексе до того момента как заметите что считает 2 раза
 +===== All traders are marked as banned by uribl.com =====
 +
 +Вероятнее всего проблема в настройках resolv сервера.
 +Скрипт проверяет наличие в бане этого сервиcа (http://www.uribl.com/about.shtml) запуском команды в шеле 
 +  host -tA trader.com.multi.uribl.com
 +
 +Если домена нет в базе сервис должен ответить что-то вроде 
 +
 +  Host trader.com.multi.uribl.com not found: 3(NXDOMAIN)
 +  
 +Если у вас отвечает например "can not connect" или "can not resolve" - надо обратиться к админу и попросить поправить resolv.conf. Как вариант показать доку (http://www.uribl.com/about.shtml) с описанием того, как это должно работать.
 +
 +
 +
 +===== It doesn't count in\out properly  =====
 +
 +
 +Проверяет очень просто: все части скрипта которые работают с траффиком инклудят файл common.php соответственно можно дописать в этот файл небольшой простой код, который будет логгировать в текстовый файл все обращения к скрипту. 
 +
 +  * создаем файл log.txt и 666 пермишены для него
 +  * в common.php добавиваем ПОСЛЕ <?php добавляем следующий код
 +
 +<code>
 +$f = fopen('полный путь до log.txt', 'a');
 +fputs($f, date('Y-m-d H:i:s') . " file {$_SERVER['REQUEST_URI']} ref {$_SERVER['HTTP_REFERER']} ip {$_SERVER['REMOTE_ADDR']}\n");
 +fclose($f);
 +</code>
 +
 +
 +Все. В скрипте как видно 3 строки, ошибиться просто негде, потом можно посчитать кол-во запросов нужных к нужному скрипту (ин\аут) и сравнить с тем что есть в скрипте. Удобно отфильтровать напрмиер в экселе.
 +
 +
 +===== It doesn't count hits from https to http  =====
 +
 +Сейчас гугл все больше любит сайты которые подписаны сертификатом (https). Вопрос трейда заключается в том, что по дефолту при переходе с https на http реферер не передается, соответственно траффик приходит как нореф.
 +
 +В этой ситуации есть 2 выхода:
 +
 +  - добавлять и слать на трейдеров с ИД. Те если у вас сайт с https то трейдеров вы добавляете как http://trader.com/?id=your_domain
 +  - Либо добавить <meta таг который скажет браузеру что в конкретной ситуации реферер передавать все же надо.
 +
 +
 +Таг добавляется в <head> вашего документа и имеет вид <meta name="referrer" content="unsafe-url">
 +
 +Есть следующие варианты значения тага:
 +  * unsafe-url - передает реферер как есть, те полностью урл как все привыкли
 +  * origin - только домен
 +  * none-when-downgrade - пустой реферер если переход на http, и реферер ка обычно если переход на https
 +  * none - ничего совсем
 +
 +Из этого нас интерисуют только origin и unsafe-url. Технически для трейда достаточно origin. Однако, учитывая что в скрипте часто используется редирет на нишу по реферу трейдера, лучше использовать unsafe-url.
 +
 +Хотелось бы отметить, что это не фича какого-то скрипта, а фича современных браузеров.
 +
 +
 +===== Wrong skimming, wrong redirect, out does not work =====
 +
 +99% проблем с аутом решаются просмотром дебаг хедеров out.php 
 +
 +  - Settings - включаем дебаг Add out.php debug comments = yes
 +  - ждем минуту пока обновится конфиг
 +  - кликаем на любом линке и смотрим хедеры (как смотреть хедеры и что это такое описано на этой же странице чуть выше)
 +
 +Обычно по хедерам сразу ясно что как и почему, если что-то не ясно - суппорт на форуме поможет разобраться.
 +
 +===== Global Admin does not work =====
 +
 +Если ГА не может скачать статистику с другого домена, то обычно это проблема на том домене. Например, домен на одном ИП, а днс показывает на другой, или админ закрывал каталог смарта от гугла, а за компанию закрыл от всего.
 +
 +Проверить: в шеле на том серваке, где ГА, делаем wget http://anotherdomain/scj_folder/bin/scj_ex.php
 +
 +и смотрим какой ответ. Должно ответить HTTP/1.1 501 Password Error, если нет - значит надо смотерть админа куда на самом деле уходит запрос.
 +
 +===== Imagemagick lib path error ===== 
 +
 +Скрипт проверяет правильность пути основных либ, в том числе imagemagick. Проверка происходит как 
 +
 +<code>
 +exec("/path/to/imagemaick/convert --version", $output, $error);
 +</code>
 +
 +если $error не 0 (те произошла какая то ошибка, то выводится предупреждение. Если админ считает что путь правильный то может сделать пхп файл 
 +
 +<code>
 +<?php
 +exec("/path/to/imagemaick/convert --version", $output, $error);
 +echo $error;
 +</code>
 +
 +и проверить выводится ли ошибка.
 +
 +===== Cloudflare =====
 +
 +В целом большинство проксей http определяются по заголовку типа X-Forwarded-For
 + (в пхп он обозначается как HTTP_FORWARDED_FOR). При подключении Cloudflare сам запрос приходит от не от релаьного юзера, а то Cloudflare. Тут возникает 2 проблемы:
 +
 +  - реальный IP который должен быть в REMOTE_ADDR - это ИП не юзера, а Cloudflare
 +  - Cloudflare добавляет хедер X-Forwarded-For и все хиты становяться проксями
 +
 +Что делать:
 +
 +  - прочесть их доку по хедерам https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers-
 +  - прочесть как восстановить реальный ИП https://support.cloudflare.com/hc/en-us/sections/200805497-Restoring-Visitor-IPs
 +
 +
 +Так же можно без модов попробовать модификацией конфига , был интересный пример для nginx 
 +
 +<code>
 +if ($http_x_forwarded_for ~ "^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}),(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$") {
 +        set $xreal $2;
 +}
 +fastcgi_param HTTP_X_FORWARDED_FOR $xreal if_not_empty;
 +
 +</code>
 +
 +
 +
 +===== PHP version mismatch =====
 +
 +Скрипт работает под управлением IonCube Optimizer,  который требует свои файлы под разные версии PHP. Когда вы в шеле запускаете установку скрипта, он определяет версию пхп с которой его запустили и скачивает файлы под нужную версию
 +
 +Но бывает что на сервере стоит несоклько версий пхп, одна из них является дефолтной. Например если просто в шеле написать 
 +
 +<code>
 +
 +user@server:~/$ php -v
 +PHP 7.0.33-0ubuntu0.16.04.16+esm4 (cli) ( NTS )
 +
 +</code>
 +
 +
 +то можно увидеть что дефолтная версия - 7.0.33, при этом для веба может быть включена другая версия.
 +
 +Открываем scj/admin/test.php - PHP Version 7.4.29
 +
 +Получается, что файлы скачали для 7.0, а запускаем с 7.4 , в этом случае IonCube работать не будет.
 +
 +Надо просить админа унифицировать версии.
 +
 +
 +===== Full description copy - Warning  =====
 +
 +По умолчанию слейв имеет те же дески, что и мастер. Фактически он использует таблицу мастера с десками. Можно рассоединить дески мастера и слейва, что бы на слейве были те же галеры, но с другими десками. Делается это на мастере , сетинги ротации, master - slave.
 +
 +
 +Иногда люди рассоединяют дески, однако не меняют дески. 
 +
 +В чем минус:
 +
 +- для слейва создается таблица с теми же десками, но она занимает место.
 +- mysql кеширует и таблицу мастера и таблицу слейва, хотя по факту это одни и те же данные - занимает место в памяти
 +
 +Поэтому если вы не меняете дески на слейве то лучше не рассоединять и экономить ресурсы сервера.
 +
 +
 +===== Server setup error, apache\nginx is running with user permissions - Warning  =====
 +
 +
 +Во всех системах есть разделение прав пользователей. Например, рут имеет право менять все файлы, пользователь - только свои. Это сделано для того что бы разграничить права в системе и не дать например пользователю накосячить с файлами других пользователей либо вообще уронить сервер из-за того что пользователь поменял настройки сервера, не понимая что конкретно он делает.
 +
 +Так же есть разграничение прав пользователя и вебсервера (апач\nginx). Например, пользователь залил скрипт (файлы) на сервер. Например, в скрипте или темполейтах есть дыра\баг и злоумышленник через эту дыру решает залить бэкдор \ эксплоит на сервак. В нормальной ситуации, когда права пользователей разделены, хакер не сможет ничего записать в файл юзера и сервер будет в безопасности, потому что по умолчанию один пользоватль (апач) не может менять файлы другого пользователя (юзера)
 +
 +Иногда, для некоторых файлов, надо дать разрешение на запись другому пользователю, например, юзер дает разрешение на запись в один конкретный файл (условно log.txt) - другим пользователям (например апач), тогда на этот конкретный файл ставят пермишены 666.
 +
 +
 +Однако, иногда сервак настраивают криво, и апач может писать в любой файл любого юзера. Таким образом, если в темплейте будет дыра, то хакер сможет подменить файл скрипта и например начать редиректить себе ваш траф.
 +
 +
 +===== You are behind proxy - Warning  =====
 +
 +Для скрипта важно правильно находится ли пользователь за прокси, тк самый простой вариант накрутить скрипт - это делать клики с разных ИП (через прокси)
 +
 +Прокси определяются по наличию хедеров в запросе (HTTP_X_FORWARDED_FOR, HTTP_FORWARDED_FOR, HTTP_CLIENT_IP).
 +
 +Но часто при настройке nginx + apache не настраивают передачу хедеров. Получается что приходит запрос с ИП 22.22.22.22 на nginx , он должен этот запрос передать апачу и "дергает" апач, но поскольку апач на том же хосте что и nginx то запрос апачу приходит уже с ИП 127.0.0.1, что бы передать реальный ИП nginx  добавляет поле HTTP_X_FORWARDED_FOR = 22.22.22.22 и апач уже думает что это запрос через прокси.
 +
 +Что б такого не было в апаче есть моды которые автоматически обрабатывают такую ситуацию (mod_remoteip, mod_rpaf) и выставляют реальный IP при запросах с 127.0.0.1 (те когда апач стоит за nginx )