調子良い人のブログ

I'm Feeling Good , And You ?

リバースプロキシ として pound を使ってみた

さくらVPSを借りてウェブサーバを立ち上げているのですが, 今回 別ドメインかつ 別ポートにアクセスできる環境を作る必要があったので pound を利用しました.

まとめると,したいことは,以下の様にドメインごとに振り分けることです

  1. hoge.com の80番ポートでアクセスすると 8080番ポートで起動しているApache にアクセス.
  2. fuga.com の80番ポートでアクセスすると 5000番ポートで起動しているPerlアプリにアクセス

インストールから設定まで

サーバ環境は Ubuntu10.04 だったので apt-get で素直にインストール
設定ファイルは /etc/pound/pound.cfg でした.

ListenHTTP
        Address 0.0.0.0
        Port    80

        Service
                HeadRequire "Host: hoge\.com"
                BackEnd
                        Address 127.0.0.1
                        Port    8080
                End
        End

        Service
                HeadRequire "Host: fuga\.com"
                BackEnd
                        Address 127.0.0.1
                        Port    5000
                End
        End
End

つまりどころは,ローカルのアドレスを 127.0.0.1 ではなく, 0.0.0.0 にするところでした.理由は仕様だから...ということなのでしょうか....

f:id:ctyo:20110815025926p:image

参考

jQueryのgetJSONメゾットで詰まった.

ナルホド香川大学でリリースしているナルホドテレビの次期バージョンとしてHTML5を使って開発することにしました.
f:id:ctyo:20091111162829j:image:medium:right

そこでcgiに問い合せて再生リストのリストをJSONで返すようにしていたのですが,PerljQueryのデータの受け渡しで詰まるところが多かったのでメモします.

詰まり所

ajaxメゾットと違う点
データにヘッダ的なものを付ける必要がある点
cpanのJSONでencode_jsonしたままの形式だとjQueryがJSON形式のデータとして扱ってくれない点

ajaxメゾットと違う点

クロスドメインでは対応しないよということが分かったのでgetJSONを使うことに.2つの違いが以下

データにcallback用のヘッダ的なものを付ける必要がある点

ajaxの時はそのまま以下のような形で送ればデータとして読み込んでくれたのですが,getJSONではcallback用のヘッダ的なものを付ける必要があるとのことでした.

 ajax: ["hoge", "fuga","foo", "bar"]
 getJSON: jQuery123456777["hoge", "fuga","foo", "bar"]

cpanのJSONでencode_jsonしたままの形式だとjQueryがJSON形式のデータとして扱ってくれない点

PerlのJSONモジュールのencode_jsonをドキュメント通りに配列のリテラルを渡すようにすると,以下のように書き出される.

#!/usr/bin/perl
use strict;
use JSON qw/encode_json/;

my @array = qw();
my $json = encode_json(\@array);
print "Content-Type: application/json; charset=utf-8\n\n";
print $json;
jQuery123456777["hoge", "fuga","foo", "bar"]

が,jQueryがJSONだとして取り扱ってくれないので,カッコをつけるようにしました.こんなのでいいのか....

print $callback.'('.$json.')';
jQuery123456777(["hoge", "fuga","foo", "bar"])

そんなこんなで3時間ぐらいはまってしまっていました.しょーもなっ
f:id:ctyo:20110617211606p:image
画像はfrickerのapiが返してくるデータ,これを参考にコードを直しました...
参考
http://www.ibm.com/developerworks/jp/web/library/wa-aj-jsonp1/#jquery_support
http://search.cpan.org/dist/JSON/lib/JSON.pm#encode_json