这是前一个问题的延续,这个问题已经有了一些改变。 以下是我要谈的结构。 我的目标是创build隧道/代理。
port 80 port 6103 Website (shared hosting) ----------> Tunnel (Dedicated hosting) -----------> RETS Server
我用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>
对于几乎所有的请求(我迄今为止所做的),除了响应的内容types是多部分(或图像)的请求之外,它工作得很好。 它以0内容长度给出响应200 OK。
以下是我在不使用代理的情况下收到的回复
< 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 <
我也在httpd.conf中使用了ProxyPass和ProxyPassReverse。 但是,没有运气。
更新:这是图像的数据包来回发送和没有代理。 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状态。 任何想法,为什么呢?
不幸的是,看起来这个应用程序似乎在HTTP标准中运行得非常快而且很松散 – 很难说出究竟是什么让它感到不安,但是Apache正在做的一些事情(比如把两个无意义的相同Accept头合并成一个)很难做任何事情。
有几件事情可以让请求变得更加相似,希望其中的一个变化能够得到这样的要求,即不再让这个挑剔的HTTP服务器不安。
SetEnv proxy-nokeepalive 1
另一个主要区别是X-Forwarded-标头 – 它们不能通过configuration被禁用,但是有一个补丁可以closures它们。
除了这些变化之一工作,唯一的其他select似乎是获得更多的可见性,这个RETS应用程序 – 我不认为有办法做一些良好的debugging日志logging? 客户端在与代理交谈时似乎也有点不同,对新请求使用新的连接,而不是重新使用其打开的连接。 我不认为有客户login?