- PR -

OSの文字コードが違う環境で稼動しているCGIを1台のサーバにまとめることは可能?

1
投稿者投稿内容
ごとう
会議室デビュー日: 2007/07/09
投稿数: 5
投稿日時: 2007-07-09 11:23
みなさま始めまして。
現在、OSデフォルトの文字コードが違う環境で稼動しているCGIを含むwebサイトを、1台のサーバにバーチャルホストとしてまとめることは可能かどうか、検討しております。


Perlで書かれたCGIを含むWebサイトが複数あり、そのうちいくつかがOS上のデフォルトの文字コードの設定をEUCにしたサーバ上で稼動させております。
また、いくつかをUTF-8にしたサーバ上で稼動させております。
(ここでいう、OSの上の文字コードの設定というのは、 /etc/sysconfig/i18nに設定した文字コードです)


~/.bashrcに記述することで、ユーザごとに文字コードを変更することは可能かと思いますが、ほとんどがApache下で稼動するPerlのCGIのため、Apacheユーザの文字コードになるのではないかと思っております。
そのため、バーチャルホストごとには、ユーザは切り替わらずApacheユーザの.bashrcの設定となってしまい、一つの文字コードとなってしまうのではないかと思います。

Apache上でバーチャルホストを切り運用するので、suExecを利用することでこういった設定も可能かとも思うのですが、現在これらのサイトが稼動しているサーバがsuExec環境で動いていないため、パーミッションの調整などが大変ではないかと懸念しております。


これらを1台のサーバに統合することは可能でしょうか。ご意見いただければ幸いです。
よろしくお願いいたします。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-07-09 14:25
・ApacheをUTF8とEUC環境別に2つのユーザプロセスで動作させる
・CGIの文字コード依存する部分を全て書き換える(難しいとは思いますが)
・XenでUTF8とEUCの環境を動作させてしまう

Xenで動かしてしまうのが、色々と気使いしなくていいような感じもしますが、
いかがでしょう?。
ごとう
会議室デビュー日: 2007/07/09
投稿数: 5
投稿日時: 2007-07-10 09:15
小僧さん
ご回答ありがとうございます。

CGIの文字コード依存部分を全て書き換えるのは、工数が多くなるため非常に難しいです。
またサーバ自体あまり高スペックではないのと、少し古いOSであるため、Xenの環境を構築するのも苦労するのではないかと思っております。

Apache自体をUTF8とEUC環境別に2つのユーザプロセスで動作させる、というのが、今回の私のケースでは一番現実的かもしれません(若干試験環境的な要素があるため、ポート番号についても、80である必要もありませんので...)。
この路線で調査してみたいと思います。

このたびは、的確なご回答、ありがとうございました。
あんとれ
ぬし
会議室デビュー日: 2004/01/14
投稿数: 556
投稿日時: 2007-07-10 20:00
OS の文字コードと CGI の文字コードが違っていても、CGI 側で対応がなされていれば基本的に問題が発生することはないと思います。

これは、EUC-JP の Unix サーバで Shift_JIS や UTF-8 の静的コンテンツを扱うことができるのと同じことではないでしょうか。

Perl の場合、jperl もしくは ver 5.6 以降でマルチバイト対応したようですので Shift_JIS で「表」などのように 0x5C を含むような文字を扱っても問題は発生しないと思います。

もちろん、キャラクタ・セットの設定を正しくしておく必要があるのは言うまでもありません。

Shift_JIS の場合 : print "Content-Type: text/html; charset=Shift_JIS\n\n"
UTF-8 の場合 : print "Content-Type: text/html; charset=UTF-8\n\n"

もしくは Apache2 を使用している場合で、キャラクタ・セットを設定していないプログラムが膨大な場合は、httpd.conf の各バーチャル・ホストに対して、

Shift_JIS の場合 : AddDefaultCharset=Shift_JIS
UTF-8 の場合 : AddDefaultCharset=UTF-8

とすればよいのではないでしょうか。

ちなみに、Apache を起動するときに LANG に日本語を設定していると autoindex の日付あたりが日本語になってしまったような気がするので、私は英語にして起動するようにしています。(普通は autoindex を無効にするのであまり意識しませんが・・・)
ごとう
会議室デビュー日: 2007/07/09
投稿数: 5
投稿日時: 2007-07-11 15:26
あんとれさん
ご回答ありがとうございます。

私が /etc/sysconfig/i18n で定義した設定が、どのように働くのかということをきちんと理解していないのがそもそもの問題ということを、あんとれさんのご回答を見て再認識いたしました。

VirtualHostディレクティブ内で、 AddDefaultCharsetを定義してやることで、各VirtualHostのデフォルトの文字コードが変わるというのは、私にとっては盲点(というか気づいていなかっただけですが…)でした。
こちらの方法も試してみたいと思います。

こちらの件、他の者と共同で作業しなければならないため、すぐに取り掛かることができなおのですが、試した結果はできる限りこちらに反映させていただきたいと思います。


ご回答、まことにありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)