(为简单起见,我将 Apache 服务器的 IP 更改为 1.1.1.1,将 Gollum 服务器的 IP 更改为 6.6.6.6)
我正在尝试服务咕噜通过 Apache 使用 rack 访问 wiki(因为它已正确设置 SSL,而我目前只测试 Gollum wiki)。因此我将 Apache 设置为 ProxyPass(配置如下)。
问题是,当我从我的代理机器直接通过 curl 访问机架服务器时,它似乎工作正常:
1.1.1.1 - - [05/Dec/2013 06:20:25] "GET /docs/Home HTTP/1.1" 200 6467 0.2135
但每次我尝试使用浏览器时都会出现 404 错误。Rackup 说:
6.6.6.6 - - [05/Dec/2013 06:20:00] "GET /docs/Home HTTP/1.1" 404 - 0.0006
荒谬的是,当我使用精确的与我的浏览器通过代理机器(1.1.1.1)通过 telnet 发送的标头相同的标头(见下文),请求成功:
6.6.6.6 - - [05/Dec/2013 06:19:19] "GET /docs/Home HTTP/1.1" 200 6467 0.2759
我不知道我做错了什么,为什么(以及如何?!)rack 会区分来自同一台机器的两个不同请求。请帮忙?
(在 RHEL 5 上使用 Apache/2.2.15,在 ruby 1.9.2p320、RHEL 6 上使用 Rack 1.2(版本:1.5))
编辑显然这是 WEBrick 的问题,因为当我切换到 Thin 时它就正常工作了。仍然希望得到您的见解...
Apache 配置:
<VirtualHost 1.1.1.1:80>
ServerName testserver.example.org
ServerAlias testserver.example.org
ServerAdmin [email protected]
DocumentRoot /path/to/my/docs
DirectoryIndex index.html index.htm index.php
# ...
<Location /docs/>
ProxyPass http://6.6.6.6:8080/docs/
# also tried:
# ProxyPass http://rackserver.example.org:8080/docs/
# and:
# SetEnv force-proxy-request-1.0 1
# SetEnv proxy-nokeepalive 1
</Location>
</VirtualHost>
Telnet 请求:
<1>root@testserver:~$ telnet rackserver.example.org 8080
Trying 6.6.6.6...
Connected to rackserver.example.org.
Escape character is '^]'.
GET /docs/Home HTTP/1.1
ACCEPT: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
ACCEPT_ENCODING: gzip,deflate,sdch
ACCEPT_LANGUAGE: en-US,en;q=0.8,he;q=0.6
CACHE_CONTROL: max-age=0
COOKIE: SESS...; has_js=1
HOST: rackserver.example.org:8080
USER_AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
VERSION: HTTP/1.1
X_FORWARDED_FOR: 6.6.6.6
X_FORWARDED_HOST: apacheserver.example.org
X_FORWARDED_SERVER: testserver.example.org
我验证了 rack up 对于普通浏览器请求和 telnet 请求打印相同的输出,使用这个答案的代码。