Installation and Updating

How to Install Keitaro TDS?

How to Install ionCube?

Read the installation instruction on the page How to install ionCube.

What are the Server Requirements??

Read about it on the page Requirements.

What Permissions are Needed for a User of the Database?


Can I Install TDS into a Subdirectory of a Domain?

Yes, but make sure that the command is specified in view of this folder at the task scheduler.

How to Install TDS on the Server With Nginx and PHP-FPM?

Read the installation instruction on the page Keitaro on Nginx/PHP-FPM.

How to Update From a Very Old Version?

  1. Export streams from each group;
  2. Transfer all TDS files in the directory /backup;
  3. Install a new TDS by the installer;
  4. Create groups with the same identifiers;
  5. Import streams in the created groups.

Automatic Update Doesn't Work

  1. Check the free space on the disk,
  2. Check access permissions for the directory TDS and files. Set permissions 775 or even 777.

If the access permissions are alright and you have the free space on the disk, you can do a manual update.

General Issues

What will Happen When the License Expires?

TDS will continue to split traffic, but the admin panel will be locked.

Is it Possible to Install Multiple TDS with One License?

Yes, if they use the same IP-address.

Can I Change the IP in the License?

You can change IP in your account on our site.

Use of Keitaro

What is Address of the Admin Panel?


Can't Log in, an Error "Authorization is locked"

The protection against brute force attacks was activated. Delete a file /var/auth/store.dat to reset the lock.

How to Recover from a Forgotten Password for TDS?

Download a script http://keitarotds.com/getfile/reset_password. Upload it via FTP in directory TDS. Open in browser http://your_tds/reset_password.php. Enter your login and a new password on the page of script. After changing the password, delete the script.

Time of License Expiration in TDS didn't Change after Extension

To force a license update in TDS delete a file /var/license/hash.lic.

How Can I Change the Key in TDS?

Enter a new key in /var/license/key.lic and delete a file /var/license/hash.lic.

Can't Delete or Edit TDS Files

If you need access to a single file create a script in the TDS directory.

<html php> chmod('file/path', 0777); </html> Replace the path to the file and open it in browser.

If you need to change the permissions for multiple files use the script http://keitarotds.com/getfile/fix_permissions. Change the path to a directory, upload it to TDS directory and open in browser.

Why are Access Permissions 777 Required in TDS Directory?

Installer and a script of updating require permissions to create and overwrite files. If the server is configured properly then attributes 775 will be enough but often the web server runs as a different user and the other group.

If you do not want to use the automatic update of TDS then set the access right 775 on directory /var and 655 on others after installation.

How to Unpack Archive tar.gz in Windows

"No Data" in Statistics and Charts are Empty

Open in browser http://your_tds/cron.php, you should see an inscription “done”. If after that the charts and data will appear in the statistics then you need to configure/reconfigure the task scheduler (Cron) http://wiki.keitarotds.com/cron.

Statistics of Search Engines and Keywords aren't Showed

These values are passed to TDS by the parameters se_referer and keyword. Here are some examples of creating URLs with parameters: http://help.keitarotds.com/usecases.

Statistics of Referrers isn't Showed

Turn it on at the settings page.

Referrers from Google aren't Passed

25 September 2013 Google enabled https on the search results page. When goes from https to http referrer isn't passed.

How to Pass the Google Adwords Moderation

Change the action for bots to “Skip”. Enable action CURL in the streams, so TDS will show a page with an offer without doing any redirects. After moderation pass, change stream actions to redirects back.

Why TDS is Marked as "Malicious site" in VirusTotal

The reason in the redirect from domain to another domain (remember Extra URL?).

To remove this status set in Extra URL any page from current domain. For groups use redirects like script, frame or FormSubmit.

How to Replace or Hide a Referrer?

Here are several ways:

  • Address TDS in the referrer. Just select one of redirects: JS-redirect, “Open in Frameset” or FormSubmit.
  • A referrer anonymizer. There are a large number of network services which make redirects through their domains. For example, anonym.to or beam.to.
  • Any referrer. Enable redirect “CURL”. A page will be loaded and the content will be shown to a user. Actually the user remains in the TDS, he will just see the content of a final page.
  • To hide a referrer you can connect to TDS a script of redirect https://gist.github.com/anonymous/fcf4c2f110e6da045333.

How to Pass a Keyword through TDS to an Affiliate Offer?

Write a parameter 'keyword' in TDS URLs: http://tds.com/?1&keyword=your_keyword. In the stream http://landingpage.com/?q={keyword}

Read more: http://wiki.keitarotds.com/FormirovanieURL.

How to Pass Parameters through TDS?

For example, you send traffic to TDS with utm-parameters: http://tds.com/?1&utm_source=site.com&utm_content=word

URL of an affiliate offer: http://landing.com/page?affid=123

In the stream add to the affiliate URL this code &utm_content={utm_content}&utm_medium={utm_medium}. You'll have URL like this: http://landing.com/page?affid=123&utm_content={utm_content}&utm_medium={utm_medium}&utm_source={utm_source}

In this way you can pass any parameters, just add param_name={param_name}.

How to Send Traffic to a Specific Stream?

In each stream add a filter for a GET-parameter. For example, in the first stream: a parameter name “stream_id”, mode “allow”, a value from 1. Similarly for others, but values: 2, 3, 4, etc.

If you need to go to a specific stream add this parameter to URL: http://example.com/?group&stream_id=1, http://example.com/?group&stream_id=2 etc.

How to Fix the Keywords Encoding?

Add a parameter charset=utf-8 to your URLs on your website or replace a value keywords_charset in /application/config/config.ini.

How to Catch Traffic with Blank Referrers?

Enable the filter “Referrers” and insert a value @empty.

How to Exclude Getting into a Stream by Keywords?

In a regular expression mode: «/(?=^((?!first keyword|second keyword).))+/»

Why the Random Stream Selection Distributes It Unevenly?

The stream selection occurs randomly. When the selected stream does not take a visitor (because of filters) the visitor is sent to the other randomly selected stream. If the filters are disabled then the distribution will be smoother. Try to redirect traffic from streams of a current group to new groups with the random distribution.

How to Do a Split-Testing?

Create a new group with the random distribution and create several streams (variants) in it.

How to Open File Exported CSV in Excel

  1. Create a new table;
  2. File → Import;
  3. Choose a variant «CSV file», press «Import» and choose your file;
  4. Choose «Original data type: Delimited», «File origin: Cyrillic (Windows)», press «Next»;
  5. Choose only «Delimeters: Semicolon», press Finish.
  6. In the resulting window press «OK».

Why banners open in frame?

Just add attribute target to you links:

<a target="_parent" href="..."><img src="banner.png" /></a>

How to Restrict Access to the Admin Panel by IP?

Apache. Create a file /admin/.htaccess with code:

<Files index.php>
order Deny,Allow
Deny from all
Allow from

Nginx. In the host section (/etc/nginx/nginx.conf) add:

location /admin/index.php {
    deny all;

How to Improve the Quality of Cities and Countries Definition?

Buy the full base “Sypex City Full” or Maxmind Legacy City Full. Read more on the page Geo Databases.

If you have Apache, enable mod_rewrite and check if a directive is exist in the domain settings (https.conf):

AllowOverride All

For nginx/php-fpm add in the section “location /”:

try_files $uri $uri/ /index.php?$args;

Monitoring VirusCheckMate shows an error "Authorization error", what to do?

At the Personal tariff all keys are tied to the user's IP by default. Upgrade your tariff or write to the support service to get a key that untethered from IP-address.

How to Plug in Clickunder?

Connect TDS through <script>, in the stream choose an action “CURL” and set the script address.

How to Make a Multiple Replacement of the Domains?

In the search box type a domain name then a list of the found streams will be opened. Press “Replace” and type a new domain.

Error Explanations

An Error "Can not connect to Keitaro servers"

Check whether https://keitarotds.com is working. If it works:

  • Check your firewall settings;
  • Check the condition of DNS-servers which are set in /etc/resolve.conf of a server;
  • Download a script test.php. Upload it to TDS directory and open in browser.

An Error "The encoded file index.php cannot be run because the php.ini setting auto_prepend_file or auto_append_file is in use."

Open the file .htaccess and uncomment lines:

#php_value auto_prepend_file none
#php_value auto_append_file none

Save and set e attributes for it 444. Thus during an updating of TDS the file will not be deleted.

An Error "Warning: touch(): Unable to create file /admin/..//var/cron/partitioning.lock because Permission denied"

Set for a directory var/ and for the entire contents access attributes 777.

An Error "Sorry, Please create .../var/cache/*** and SET Mode 0777 or any Writable Permission!"

Delete the content of /var/cache and set access attributes 777.

An Error "Сannot be processed because an untrusted PHP zend engine extension is installed"

Disable eAccelerator.

An Error "pdo error: [-1: Connection attempt failed: SQLSTATE[08004] [1040] Too many connections]"

You exceeded the maximum number of connections that are set in the configuration of MySQL. Increase the value of max_connections in /etc/my.cnf and restart MySQL.

An Error "Connection attempt failed: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket"

TDS can't connect to MySQL. Recommend to configure MySQL or to install Redis.