TLENS » 2015.09.08 12:42

У меня настроен proxy сервер и проскакивает часто какая то ошибка. Не могу понять что за ошибка. Надо бы взглянуть какие данные (заголовки) nginx передает удаленному серверу

TLENS » 2015.09.08 13:20

Нашел уже решение. Воспользовался tcpdump

Gemorroj » 2015.09.08 14:07

рассказал бы подробнее)

TLENS » 2015.09.08 18:40

Как посмотреть передаваемые данные я понял. Но свою проблему так и не решил. А по поводу сниффа то запускал командой tcpdump -i eth0 port 80 -w ./dump.txt и в дампе лежат все данные
Добавлено спустя   2 минуты  46 секунд:
Вообще не врубаюсь почему vk возвращает мне ошибку. Сейчас синий позже скину настройки nginx. Может ты мне что то подскажешь я уже неделлю ебусь с ним. Когда то методом тыка нашел решения но сейчас не пойму почему все так выходит

TLENS » 2015.09.10 12:20

Так как я использовал ipv6 и ipv4 то проблема был изза ресольвера потому что хост доступен по обоим протоколам а я явно указывал связывать исходящий запрос через нужный мне интерфейс. Решил вопрос просто преобразованием хоста в ip. Так как ip уже известен после проверки доступности файла

Код:

1
span style="color: #0000BB"><?php $pUrl = parse_url($linkObject['url']); // Проверка существования удаленного файла $ch = curl_init($linkObject['url']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ["Cookie: {$data['cookie']}"]); curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_INTERFACE, $linkObject['local_ip']); curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 0); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_IPRESOLVE, (false !== strpos($linkObject['local_ip'], ':') ? CURL_IPRESOLVE_V6 : CURL_IPRESOLVE_V4)); $result = curl_exec($ch); $error = curl_error($ch); if ($error) { //log return $this->errorAction(Response::HTTP_INTERNAL_SERVER_ERROR); } $info = curl_getinfo($ch); if ($info['http_code'] != 200 || strpos($info['content_type'], 'video') === false) { // log return $this->errorAction(Response::HTTP_INTERNAL_SERVER_ERROR); } // переобразование хоста в ip $primaryIp = (strpos($info['primary_ip'], ':') ? "[{$info['primary_ip']}]" : $info['primary_ip']) . ($pUrl['scheme'] == 'https' ? ':443' : ''); // новый url с ip адресом $nUrl = $pUrl['scheme'] . '://' . $primaryIp . $pUrl['path'] . (isset($pUrl['query']) ? '?'. $pUrl['query'] : ''); $url = urlencode($nUrl); $host = urlencode($pUrl['host']); $interface = urlencode($linkObject['local_ip']); $cookie = urlencode(@$data['cookie']); $request = "/download/?url=$url&bind=$interface&host=$host&cookie=$cookie"; // передаем в nginx header("X-Accel-Redirect: $request"); exit;