Ошибка 504

Рейтинг: 0Ответов: 1Опубликовано: 06.10.2014

Есть сайт, рядом с ним лежит скрипт, который через cron запускается раз в 4 минуты и отправляет ~400 запросов.

Скрипт работал хорошо дня 2. Потом пришлось переустановить на VDS OS.

И если запускать вручную, стала появляться ошибка (где-то на середине загрузки скрипта):

504 Gateway Time-out
nginx

Что посоветуете делать?

set_time_limit(0);
include '../config.php';

function get_proxy() {
    $i=0;
    while($i<1000){
        $prox_get = mysql_query("SELECT * FROM proxy_list ORDER BY RAND() LIMIT 1");
        $prox_check = mysql_fetch_assoc($prox_get);
        $proxy = $prox_check['proxy'];
        $url = "https://www.google.ru/";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
        curl_setopt($ch, CURLOPT_TIMEOUT, 4);
        curl_setopt($ch, CURLOPT_PROXY, "$proxy");
        $ss=curl_exec($ch);
        curl_close($ch);
        if(!empty($ss)) {
            break;
        }
        $i++;
    }
    return $proxy;
}

function send_req_post($url,$post,$proxy){
    try{
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
        curl_setopt($ch, CURLOPT_TIMEOUT, 4);
        curl_setopt($ch, CURLOPT_PROXY, "$proxy");
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "$post");
        $ss=curl_exec($ch);
        curl_close($ch);
        return $ss;
    }
    catch(Exception $ex)
    {
        return "";
    }
}
$proxy = get_proxy();
$qu = mysql_query("SELECT * FROM  `bot`  WHERE `job`='1'");
while ($_ensh = mysql_fetch_assoc($qu)) {

    $game = send_req_post('https://game.ru/req.php','action=get_user&auth='.$_ensh['auth_user'].'&rand='.lcg_value(),$proxy);
}

Ответы

▲ 1

Убери SQL запрос из цикла в функции get_proxy. У тебя при каждом запуске цикла из таблицы берутся все поля всех строк, сортируются и потом берется первая строка из полученных результатов. И все это повторяется 1000 раз. Вынеси запрос из цикла, чтобы снизить нагрузку на БД.