Я впервые настраиваю squid. Он запускает скрипт перенаправления, который выполняет некоторый текстовый поиск / замену на html-страницах, а затем сохраняет их в месте на том же компьютере по пути nginx, а затем выдает перенаправление на этот URL-адрес (это арт-проект: D).
Соответствующие строки в squid.conf:
http_port 3128 transparent
redirect_program /etc/squid/jefferson_redirect.py
Скрипт jefferson_redirect.py основан на этом скрипте: http://gofedora.com/how-to-write-custom-redirector-rewritor-plugin-squid-python/
Проблема:
У меня странное поведение переадресации http. Например, вот обычный запрос / ответ от сценария PHP, который выдает заголовок («Местоположение:»); - редирект 302:
http://redirector.mysite.com/?unicmd=g+yreka
GET /?unicmd=g+yreka HTTP/1.1
Host: redirector.mysite.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100330 Fedora/3.5.9-1.fc12 Firefox/3.5.9
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.1 302 Found
Date: Tue, 13 Apr 2010 05:15:43 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Location: http://www.google.com/search?q=yreka
Content-Type: text/html
Vary: User-Agent,Accept-Encoding
Content-Encoding: gzip
Content-Length: 2108
Keep-Alive: timeout=3, max=100
Connection: Keep-Alive
Вот как это выглядит при работе через прокси-сервер squid (обратите внимание, что "redirector.mysite.com" не является сайтом, на котором запущен squid или nginx):
http://redirector.mysite.com/?unicmd=g+yreka
GET /?unicmd=g+yreka HTTP/1.1
Host: redirector.mysite.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100330 Fedora/3.5.9-1.fc12 Firefox/3.5.9
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
If-Modified-Since: Tue, 13 Apr 2010 05:21:02 GMT
HTTP/1.0 200 OK
Server: nginx/0.7.62
Date: Tue, 13 Apr 2010 05:21:10 GMT
Content-Type: text/html
Content-Length: 17865
Last-Modified: Tue, 13 Apr 2010 05:21:10 GMT
Accept-Ranges: bytes
X-Cache: MISS from jefferson
X-Cache-Lookup: HIT from jefferson:3128
Via: 1.1 jefferson:3128 (squid/2.7.STABLE6)
Connection: keep-alive
Proxy-Connection: keep-alive
Он в основном работает, но URL-адрес http://redirector.mysite.com/?unicmd=g+yreka остается без изменений при отображении страницы Google (в основном не работает, поскольку использует URL-адреса относительно redirector.mysite.com)
Я испытал аналогичную ситуацию со страницами результатов Google: при переходе на другую страницу из Google я получаю URL-адрес Google с содержанием другого сайта.
Извините за длинный пост - большое спасибо, если вы дочитали до этого места! Любые идеи?
Думаю, я понимаю ваше замешательство. Это работает, но не так, как вы ожидали.
SQUID на самом деле не перенаправляет с redirect_program
директива, она переписывает. Например:
www.domain.com указывает на IP-адрес, на котором доступен SQUID
SQUID направляет запрос через redirect_program
SQUID перезаписывает www.domain.com/dir1/ на server1 и www.domain.com/dir2/ на server2.
Клиент все время видит одно и то же, так как SQUID не перенаправляет.
Надеюсь, это ясно. Если вам нужна перенаправление, вы можете подумать об использовании Apache mod_rewrite. Он больше подходит для функции перенаправления.