Страница 1 из 1

Прокси сервер на локалхосте

Добавлено: 16 май 2013, 00:20
skaady
такое дело. стоял у меня денвер, все работало. в один прекрасный день денвер почемуто умер и я решил поискать ему замену. поставил OpenServer. скрипты перенес, бд перенес. на первый взгляд все путем.
Итак, имеется 2 сайта. Один лежит на виртуальном хосте с названием proxy. он работает как часики... второй лежит прямо на локалхосте. он должен исполнять роль простенького проксисервера. если я в индексном файлике на локалхосте первой строкой ставлю echo 'test'; die; и просто захожу в браузере на локалхост, то вижу эту надпись, как и ожидалось. если в настройках браузера ставлю юзать проксик с адресом локалхост:80 - и захожу опять же на локалхост, то опять вижу тестовый вывод. но вот если я пытаюсь зайти на любой другой сайт, то в ответ просто белая страница. фаербаг показывает, что приходят такие вот заголовки ответа:
Accept-Ranges bytes
Connection Keep-Alive
Content-Length 0
Content-Type text/html
Date Wed, 15 May 2013 21:13:43 GMT
Etag "70000000443dc-0-4b8f046bc47a5"
Keep-Alive timeout=5, max=100
Last-Modified Tue, 14 Feb 2012 17:53:45 GMT
Server Apache

Но откуда они берутся вообще не понятно. методок тыка определил. что индексный скрипт на локалхосте даже не стартует. ставил первой строкой вывод в файлик масива $_SERVER, то файлик даже не создавался. хотя когда запрашивал сам локалхост, то файл появился и в нем была инфа. НО. опять же в фаербаге указано, что запрашивается хост meta.ua и заголовки ответа пришли с айпишки 127.0.0.1

В чем может быть проблема, куда копать?
зы. сам скрипт прокси-сервера рабочий 100%. на денвере все работало.
ззы. были подозрения, что cURL не работает, но когда просто им вытягиваю какуюто страницу, то все работает.

Добавлено: 16 май 2013, 01:17
Максим
Ну так всё правильно, идёт обращение к несуществующему в опенсервере домену, поэтому Open Server выдаёт пустую страницу.

Настроить чтобы работало можно, первый вариант:

1) прописать конкретные домены в алиасы, например
meta.ua -> localhost
xxx.ru -> localhost

тогда домен meta.ua будет открываться через ваш файл-прокси на домене localhost, только там не только файл наверное а еще и правила в файле .htaccess у вас есть, без них работать прокси не мог, даже не денвере.

Вариант 2) прописать алиас сразу для всех доменов
* -> localhost

все домены будут открываться через ваш прокси, сам не пробовал, но должно работать. Есть вероятность что при такой настройке нельзя будет создать другие домены на локальном сервере, будет работать только один домен на который вы перенаправляете все остальные. Пробуйте.

Добавлено: 16 май 2013, 01:32
skaady
да, есть .htaccess, вот содержимое
AddDefaultCharset UTF-8
Options MultiViews
Order deny,allow
allow from all
DirectoryIndex index.php
RewriteEngine on
Options +FollowSymlinks
RewriteRule ^(.*)$ index.php [L,QSA]

а вот с алиасами не совсем понял. почему идет обращение к домену, допустим, meta.ua когда я ввожу этот адресс, если в настройках браузера стоит использовать прокси сервер localhost:80
все запросы браузер же должен туда отправлять, разве не так?

Добавлено: 16 май 2013, 02:22
Максим
почему идет обращение к домену, допустим, meta.ua
Ну как почему, вы же запрашиваете этот домен.
все запросы браузер же должен туда отправлять, разве не так?
Так, и браузер это делает. Но это же вам не программа-прокси, а обычный сайт с псевдо-прокси файлом. Вот вы указали браузеру адрес прокси, что он делает когда вы открываете сайт? Браузер сначала определяет ip адрес прокси домена - localhost, это будет 127.0.0.1, потом браузер соединяется с портом 80 на ip адресе 127.0.0.1 и начинает посылать свои обычные заголовки запроса HOST GET и так далее.

Просто в Денвере не учтена и никак не настроена ситуация, когда серверу поступает запрос на несуществующий сайт, вот денвер и перенаправляет запрос на первый попавшийся в конфиге домен, потому у вас всё и работало. А в Open Server более грамотные настройки Apache и тут такой фокус не пройдет.

Добавлено: 16 май 2013, 09:52
skaady
тоесть вы хотите сказать, что на любом прокси-сервере, которых в нете полно, так и стоят алиасы типа * -> localhost?
просто я кучу сайтов уже перерыл с темками о том, как сделать самописный проксик, и про алиасы нигде ни слова. мне казалось, что в денвере все логично. проксику и должны прийти заголовки с обращением к meta.ua, иначе как он узнает, какую страницу запрашивает пользователь?

Добавлено: 16 май 2013, 13:10
Максим
skaady писал(а):тоесть вы хотите сказать, что на любом прокси-сервере, которых в нете полно, так и стоят алиасы типа * -> localhost?
просто я кучу сайтов уже перерыл с темками о том, как сделать самописный проксик, и про алиасы нигде ни слова. мне казалось, что в денвере все логично. проксику и должны прийти заголовки с обращением к meta.ua, иначе как он узнает, какую страницу запрашивает пользователь?
Нет, та куча серверов в интернете не имеет никакого отношения к вашему файлику-прокси, который даже и полноценном прокси-то назвать язык не поворачивается. Почитайте википедию, в гугле поищите информацию по теме, вам нужно понять что специальные программы-прокси и ваш файлик на хостинге это как бы разные вещи.

Добавлено: 16 май 2013, 13:36
skaady
Прокси-сервер (от англ. proxy — «представитель, уполномоченный») — служба (комплекс программ) в компьютерных сетях, позволяющая клиентам выполнять косвенные запросы к другим сетевым службам. Сначала клиент подключается к прокси-серверу и запрашивает какой-либо ресурс (например, e-mail), расположенный на другом сервере. Затем прокси-сервер либо подключается к указанному серверу и получает ресурс у него, либо возвращает ресурс из собственного кэша (в случаях, если прокси имеет свой кэш). В некоторых случаях запрос клиента или ответ сервера может быть изменён прокси-сервером в определённых целях. Также прокси-сервер позволяет защищать клиентский компьютер от некоторых сетевых атак и помогает сохранять анонимность клиента.
у меня нету кеша. это конечно упрощение, не позволяющее назвать "мое творение" настоящим прокси-сервером.
Клиентский компьютер имеет настройку (конкретной программы или операционной системы), в соответствии с которой все сетевые соединения по некоторому протоколу совершаются не на IP-адрес сервера (ресурса), выделяемый из DNS-имени ресурса, или напрямую заданный, а на ip-адрес (и другой порт) прокси-сервера.

При необходимости обращения к любому ресурсу по этому протоколу, клиентский компьютер открывает сетевое соединение с прокси-сервером (на нужном порту) и совершает обычный запрос, как если бы он обращался непосредственно к ресурсу.

Распознав данные запроса, проверив его корректность и разрешения для клиентского компьютера, прокси-сервер, не разрывая соединения, сам открывает новое сетевое соединение непосредственно с ресурсом и делает тот же самый запрос. Получив данные (или сообщение об ошибке), прокси-сервер передаёт их клиентскому компьютеру.
что собственно мой скрипт и делает. получает заголовки запроса, само тело запроса и на их основании формируется новый запрос к удаленному серверу. получаем страниц и отдаем её клиенту. та чем же программы-прокси отличают от моего скрипта?

если вы имели ввиду программы-проксификаторы, то это конечно не то. но мне и не нужен такой функционал какбы.

ключевые слова: клиентский компьютер открывает сетевое соединение с прокси-сервером (на нужном порту) и совершает обычный запрос, как если бы он обращался непосредственно к ресурсу

вот меня и интересует, почему запрос к локалхосту не доходит, если локалхост указан в качестве прокси-сервера?