Xpoint
   [напомнить пароль]

Squid behind nginx. Проксирование и отдача чужих сайтов

Метки: [без меток]
2012-11-26 04:08:16 [обр] lavan(0/7)[досье]

Стоит следующая задача. По запросу somesite.com.mysite.ru выдавать контент сайта somesite.com. Т.е. сделать анонимайзер типа hideme, где урл сайта передается в субдомене. Сам запрашиваемый сайт брать через свой прокси.

Изначально, я решил использовать связку nginx + squid.
Т.е. в настройках nginx просто проксировать запросы на squid. Но не вышло.

location / {
      proxy_pass http://89.178.21.141:4400/;
      proxy_set_header Host ya.ru;
      proxy_set_header Request-URI http://ya.ru/;
}

Выдаёт такую ошибку

ERROR
The requested URL could not be retrieved

While trying to process the request:

GET / HTTP/1.0
Host: ya.ru
Request-URI: http://ya.ru/
Connection: close
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: COOKIEID=2242247; Visits=1; __utma=171061670.340084820.1353711749.1353711749.1353711749.1; __utmc=171061670; __utmz=171061670.1353711749.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Cache-Control: max-age=0


The following error was encountered:

    Invalid Request 

Some aspect of the HTTP Request is invalid. Possible problems:

    Missing or unknown request method
    Missing URL
    Missing HTTP Identifier (HTTP/1.0)
    Request is too large
    Content-Length missing for POST or PUT requests
    Illegal character in hostname; underscores are not allowed

Есть ли решение на этом пути или надо смотреть в другую сторону?

спустя 1 час 5 минут [обр] lavan(0/7)[досье]

Добавлю, что без squid можно теоретически обойтись

    server {
        listen 80;
        
        server_name ~^(?<domain>.+)\.mysite\.ru$;
        resolver 8.8.8.8;

        location / {
       proxy_pass http://$domain;
       proxy_redirect off;
       proxy_set_header Host $domain;

#      proxy_pass http://89.178.21.141:4400/;
#      proxy_set_header Request-URI http://$domain;
        }

но тогда сервер на котором работает nginx должен быть уже подключён к интернету через прокси, или по VPN, например.
Мне бы хотелось гонять сайт через произвольный IP, тот на котором в данный момент работает мой squid.

спустя 1 час 49 минут [обр] Jared(0/26)[досье]

lavan[досье], откровенно говоря, не вникал, как вы пытались решить задачу. Первое решение, что пришло в голову (apache+php), на коленке

.htaccess

RewriteEngine on
RewriteRule .*  index.php [L]

index.php

<?
$my_host = '.myhost.tdl';
print file_get_contents('http://'.str_replace($my_host, '', $_SERVER[HTTP_HOST]));
?>

Работает.

спустя 10 часов [обр] lavan(0/7)[досье]
Это тоже некоторое решение, встречал. Но я не хотел гонять трафик через свой скрипт, это будет медленнее чем через прокси сервер. Но как решение в лоб, всегда остаётся. Я только использую perl / mod_perl
спустя 6 часов [обр] Jared(0/26)[досье]
lavan[досье], почти уверен, что если не учитывать кеширование, это будет не медленнее, чем прокси.
Powered by POEM™ Engine Copyright © 2002-2005