SERVER_PORT の謎

全然エライ人じゃないですけど……

pf で

rdr pass proto tcp from any to any port 8080 -> 127.0.0.1 port 80

(8080番ポートへのアクセスを 127.0.0.1:80 にリダイレクトする)という設定を入れると、CGI に渡される環境変数

SERVER_ADDR=127.0.0.1
SERVER_PORT=8080

になる。

http://ya.maya.st/d/200707c.html#s20070731_1

core - Apache HTTP サーバ バージョン 2.2
UseCanonicalName off (2.0からデフォルト) だと、クライアントが渡してきた Host: ヘッダを SERVER_NAME、SERVER_PORT に使うのでそういうことになるのかなと。

port 80 しか Listen していない Apachetelnet で繋いで、Host: foobar:8080 を送ってやると以下のようになります。

$ telnet 127.0.0.1 80
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
Escape character is '^]'.
GET /printenv.cgi HTTP/1.0
Host: foobar:8080

HTTP/1.1 200 OK
Date: Wed, 01 Aug 2007 11:57:20 GMT
Server: Apache/2.2.2 (Fedora)
Connection: close
Content-Type: text/plain

SERVER_NAME="foobar"
SERVER_PORT="8080"