Apache ProxyPass 到 Rack 出现 404 错误

Apache ProxyPass 到 Rack 出现 404 错误

(为简单起见,我将 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 请求打印相同的输出,使用这个答案的代码

相关内容