takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

XAMPP 1.8.2 で FastCGI を使う

XAMPP 1.8.2 の HTTP サーバは Apache 2.4.4 ですが、FastCGI の設定方法がネットでよく見る Apache 2.2 のとは少し違っていたのでメモ。

XAMPP 環境について

Windows 7 64bit SP1 Home Premium
XAMPP 1.8.2
Apache 2.4.4

モジュールの設定

Apache 2.4.4 では FastCGI のモジュールは mod_proxy_fcgi という名前になっています。
このモジュールは XAMPP 1.8.2 に含まれているので、\xampp\apache\conf\httpd.conf を編集してロードするようにします。
(コメントで記述されているので、先頭の"#"を削除します)

LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

モジュールがロードされているか確認

Apache を再起動させて XAMPP の管理画面 (http://127.0.0.1/xampp/) から phpinfo を確認します。
下の画像のように Loaded Modules に mod_proxy_fcgi があればロードされています。


動作検証

Go言語(golang)を使ってテスト用 FastCGI サーバを記述します。
\xampp\htdocs 以下に fcgi_test フォルダを作成し、そこに下記の内容で app.go というファイルを保存します。

app.go

package main

import (
	"net"
	"net/http"
	"net/http/fcgi"
)

type FastCGIServer struct{}

func (s FastCGIServer) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
	resp.Write([]byte("<h1>Hello, 世界</h1>\n<p>Behold my Go web app.</p>"))
}

func main() {
	listener, _ := net.Listen("tcp", "127.0.0.1:9001")
	srv := new(FastCGIServer)
	fcgi.Serve(listener, srv)
}

\xampp\apache\conf\httpd.conf に以下の内容を追加します。

# fcgi test
<Location /fcgi_test/> 
ProxyPass fcgi://127.0.0.1:9001/fcgi_test/ 
ProxyErrorOverride on 
Require all granted 
</Location> 

Apache を再起動した後、app.go を保存したフォルダに移動して次のコマンドで FastCGI サーバを起動します。

$ go run app.go

webブラウザで http://127.0.0.1/fcgi_test/ にアクセスして、下の画像の内容が表示されれば成功です。
FastCGI サーバは CTRL-C で停止します。