Nginx + GolangでWebアプリケーション開発 ~FastCGI編~

NginxとGo言語でWebアプリケーションの開発環境を整えたので、構築メモです。

環境はVirtualBox上で動いているCentOS 7になります。Fast CGIを使ってアクセスをNginxで受け取ってGoで処理をさせたいと思います。

http編はこちら

Nginxの設定ファイルを修正

まだNginxをインストールしていない場合はこちらを参考にNginxを導入してください。

まずはNginxを壊しても元に戻せるよう、設定ファイルのバックアップを取っておきます。

$ sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.backup

これでconfがおかしくなっても元に戻せるので、やりたい放題できるようになりました。

/etc/nginx/conf.d/default.confを次のように修正してやります。

server {
    listen       80;
    server_name  localhost;

    location /hoge {
        fastcgi_pass    127.0.0.1:9000;
        include         /etc/nginx/fastcgi_params;
    }
}

この設定で、http://localhost/hoge以下へリクエストを送ると、127.0.0.1:9000へアクセスされるようになります。

confファイルが正しいかを確認します。下記のように表示されたら問題ありません。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

ちなみに、正しくないconfだとこんな感じのエラーが表示されます。confのセミコロンを抜いてみました。

$ sudo nginx -t
nginx: [emerg] unexpected "}" in /etc/nginx/conf.d/default.conf:8
nginx: configuration file /etc/nginx/nginx.conf test failed

設定ファイルを再読み込みさせるために、Nginxを再起動します。

$ sudo systemctl restart nginx

Goのプログラムを作成

まだGoの開発環境を整えていない場合は、こちらを参考に環境構築をしてください。

先ほど設定した9000番ポートへのアクセスしたら、Hello World!!と出力するプログラムを作成します。

package main

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

func handler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello World!!")
}

func main() {
        l, _ := net.Listen("tcp", "127.0.0.1:9000")
        http.HandleFunc("/", handler)
        fcgi.Serve(l, nil)
}

あとはこいつを実行して、http://localhost/hoge以下にアクセスすると、Hello World!!が返ってきます。

# サーバ上で動作確認
$ curl http://localhost/hoge
Hello World!!

ブラウザ経由でアクセスしても、Hello World!!が表示されることが確認できるかと思います。
(VirutualBoxのポートフォワーディング機能を使用しているため、8080ポートのアクセスがCentOSの80ポートへ転送される設定になっています。)

参考:

コメント