Apache ProxyPass/RewriteRule с флагом p: не возвращать содержимое, если ответ имеет многокомпонентный тип содержимого ieimages
Это продолжение предыдущего вопроса, который был реализован с небольшими изменениями. Ниже приведена структура, о которой я собираюсь поговорить. Моя цель - создать Туннель / Прокси.
port 80 port 6103
Website (shared hosting) ----------> Tunnel (Dedicated hosting) -----------> RETS Server
Я использовал RewriteRule с флагом P (т.е. ProxyPass), чтобы переписать запросы.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^rets/server/(.*)$ http://rets-server:6103/rets/server/$1 [P]
</IfModule>
Он работает очень хорошо почти для всех запросов (я уже сделал), за исключением тех, чей тип контента ответа состоит из нескольких частей (или изображений). Это дает ответ 200 ОК с 0 длиной контента.
Ниже приводится ответ, который я получаю без использования прокси
< HTTP/1.1 200 OK
< Server: Apache-Coyote/1.1
< RETS-Version: RETS/1.5
< cache-control: private
< Server: StratusRETS/1.7
< MIME-Version: 1.0
< Content-Type: multipart/parallel; boundary=StratusRETS-XYZZY;charset=utf-8
< Transfer-Encoding: chunked
< Date: Tue, 24 Jul 2012 15:05:12 GMT
< --StratusRETS-XYZZY
Content-ID: E2356878
Content-Type: image/jpeg
Description: E2356878
Object-ID: 1
....
И следующий ответ, когда тот же запрос сделан через Прокси
< HTTP/1.1 200 OK
< Date: Tue, 24 Jul 2012 14:49:59 GMT
< Server: Apache-Coyote/1.1
< RETS-Version: RETS/1.5
< cache-control: private
< Content-Type: text/xml;charset=utf-8
< Content-Length: 0
<
Я также использовал ProxyPass и ProxyPassReverse в httpd.conf. Но не повезло.
ОБНОВЛЕНО: Вот изображения пакетов, отправленных туда и обратно с прокси и без. ps Черные линии с белым шрифтом - это запрос, отправленный с моего IP (**.1.2) на сервер RETS (**5.47), помеченный тем, какой запрос был.
Без прокси (работает нормально)
С прокси (не работает для изображений)
И заголовки запроса для изображения выглядят следующим образом (заголовки ответа вставлены выше.)
Без прокси
GET /rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0 HTTP/1.1
Authorization: Digest username="user", realm="rets.server.net", nonce="518ae676272228c981854d964fa3c27e", uri="/rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0", cnonce="MDA0NTM2", nc=00000003, qop="auth", response="4d49b094301092839649703384bde9e8", opaque="5ccdef346870ab04ddfe0412367fccba"
Host: rets.server.net:6103
Accept: */*
Cookie: JSESSIONID=46D39B9B7AF641005F474F21D4EC46DB; RETS-Session-ID=0
RETS-Version: RETS/1.5
User-Agent: PHRETS/1.0
Accept: */*
С прокси
GET /rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0 HTTP/1.1
Host: rets.server.net:6103
Authorization: Digest username="user", realm="rets.server.net", nonce="90b869eca69494b36bb2fe9123f2a32c", uri="/rets-treb3pv/server/getobject?Resource=Property&Type=Photo&ID=E2356878%3A%2A&Location=0", cnonce="MDA1Nzgw", nc=00000003, qop="auth", response="f4655108472a89d1b482d866667c34d9", opaque="5ccdef346870ab04ddfe0412367fccba"
Accept: */*, */*
Cookie: JSESSIONID=A4D1BDA0327440F64C4E67A6BDBFF521; RETS-Session-ID=0
RETS-Version: RETS/1.5
User-Agent: PHRETS/1.0
X-Forwarded-For: 127.0.0.1
X-Forwarded-Host: 127.0.0.1
X-Forwarded-Server: localhost
Connection: Keep-Alive
Мы определенно можем увидеть дополнительные пакеты, идущие туда-сюда со статусом FIN и SYN. Любая идея, почему это?
1 ответ
К сожалению, похоже, что это приложение, кажется, играет довольно быстро и свободно со стандартами HTTP - трудно сказать, что именно его расстраивает, но некоторые вещи, которые делает Apache (например, объединение двух бессмысленных идентичных Accept
заголовки в один) трудно что-либо делать.
Несколько вещей, чтобы попытаться сделать запросы более похожими, в надежде, что одно из этих изменений доведет запрос до такой степени, что он больше не расстраивает этот привередливый HTTP-сервер.
SetEnv proxy-nokeepalive 1
Другое основное отличие заключается в X-Forwarded-
Заголовки - их нельзя отключить с помощью конфигурации, но есть патч для их отключения.
Если одно из этих изменений не сработает, кажется, что единственная другая возможность - сделать его более наглядным в этом приложении RETS - я не думаю, что есть какой-то хороший способ отладки? Клиент также, кажется, ведет себя немного по-другому, когда общается с прокси, используя новые соединения для новых запросов вместо того, чтобы повторно использовать свое открытое соединение. Я не думаю, что есть вход на клиенте?