
(簡単にするために、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
何が間違っているのか、また、ラックが同じマシンからの 2 つの異なるリクエストをなぜ (そしてどのように?!) 区別するのかがわかりません。助けてください。
(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
ラックアップが通常のブラウザリクエストとtelnetリクエストに対して同じ出力を出力することを確認しました。この回答のコード。