カテゴリー「サーバ管理」の記事

Mac OS X Server:PostfixでOP25B対応

【OP25Bとは】
Outbound Port 25 Blockingの略です。ISP(インターネットサービスプロバイダ)各社が,自ドメインの利用者がユーザ回線を使ってインターネットへスパムメールを送信するのを阻止するために導入しているもので,プロバイダのユーザ回線からインターネットへ出て行く外向きのTCP25番ポートへの接続を塞いでしまう,というものです。

【OP25Bの影響】
OP25BはSMTPに使う25番ポートを塞ぐので,POPIMAPには全く影響ありません。
OP25Bはユーザ回線に対して実施されるもので,固定IPの回線には影響ありません。
OP25Bは内から外へ出て行く25番ポートへの接続を阻止するので,外から内へ入ってくる接続には影響しません(外から内へ入ってくる25番ポートへの接続を阻止するのは「IP25B」)。
使用しているISPがOP25Bを導入したとき,ユーザへの影響には以下の3つのケースがあります。

  1. メールクライアントからプロバイダが提供する送信用SMTPサーバを使ってメール送信する場合,ISPのメールサーバはインターネットに出て行く手前にいるため接続はOP25Bに阻止されずにこれまでどおり25番ポートを使えることが多く(プロバイダによる),この場合は特に影響ありません。
  2. メールクライアントからインターネットの向こう側にいる送信用SMTPサーバを使ってメール送信しようとした場合(独自メールサーバのアカウントからメールを送る場合など),メールクライアントとSMTPサーバの接続がOP25Bで阻止されます。
  3. ユーザプログラム(ボット含む)や独自メールサーバがユーザ回線を使ってメールを転送する場合,OP25Bで阻止されます。独自メールサーバからメールを転送するには固定IPが必須になります。
上記のうち,OP25Bは3.でのメール送信阻止を狙ったものです。それに対して2.は関係ないのに巻き添えを食らっており,対策が必要です。

【メールクライアントのための対策:サブミッションポート】
メールクライアントのための独自メールサーバの対策として,メールクライアントが25番ポートで接続してくることができないので,メールクライアントに対して25番以外のポートから接続できるように設定する必要があります。
そのための代替ポートとして「RFC2476」にて「サブミッションポート(TCP587番ポート)」が定められています。
サブミッションポートはメールクライアントからSMTPサーバに接続するときに使い,SMTPサーバどうしのメール転送は従来どおり25番ポートを使います。また,サブミッションポートへの接続にはSASL認証(SMTP Auth)を課すことで,「単にポート番号が変わっただけ,587番ポートからスパム送り放題」とならないようにします。

※サブミッションポート以外の対応策として,SMTPサーバをSSL化し,SSL用のポートを使用する,という手もあります。

【Mac OS X Serverで稼動するPostfixでサブミッションポートを利用する手順】
1)SASL認証を有効にする
Mac OS X ServerにプリインストールされているPostfixでは,SASL認証のためのモジュールが最初から組み込まれています。SASL認証を有効にするには,まず「サーバ管理」ツールにて「コンピュータとサービス」で「メール」を選び,「設定」→「詳細」→「セキュリティ」でセキュリティパネルを表示します。ここで「認証」→「SMTP」列のいずれかのチェックボックスをONにして「保存」ボタンを押すとSASL認証がONになります。

※SASL認証のユーザ名とパスワードは,Mac OS X Serverではワークグループマネージャに登録したユーザ名とパスワードになります。すなわちメール受信用のユーザ名とパスワードと同一になります。

2)サブミッションポート(TCP587番ポート)を有効にする
「/etc/postfix/master.cf」ファイルを編集します。事前にバックアップを取った上で「sudo vi」などでファイルを開き、

#submission inet n - n - - smtpd
# -o smtpd_etrn_restrictions=reject
この2行について,最初の「#」(コメントアウト)を削除します。(注:「-o」の前のスペースを削除してはいけません。)
ここでmaster.cfを保存して終了し,コマンドラインで「sudo postfix check」と入力してエラーチェックを行います。問題なければ「サーバ管理」でメールサービスをリスタートするか,コマンドライン上で「sudo postfix reload」コマンドを実行すると,サブミッションポートが有効になります。このときサブミッションポートに適用されるパラメータ値は,main.cfで定義された25番ポートのパラメータ値と同じです。

3)サブミッションポートのパラメータ設定
サブミッションポートで適用されるパラメータ値は「/etc/postfix/main.cf」で定義した25番ポート用の値がデフォルトとして適用されます。
サブミッションポートで適用されるパラメータ値を25番ポートとは別の値にしたい場合は,master.cfのsubmissionセクションの末尾に「-o」+「パラメータ=値」で設定したいパラメータ値を追記することで,サブミッションポートのパラメータ値が上書きされます。このとき「-o」+「パラメータ=値」の記述で気をつけなければならないのは,
  • 「-o」の前後にスペースが必要。行頭のスペースは前の行からの継続を意味する。
  • スペースで区切って解釈されるため,「パラメータ=値」は途中でスペースを入れない。
の2点です。
設定例1:
submission inet n - n - - smtpd
 -o smtpd_etrn_restrictions=reject
 -o smtpd_client_restrictions=permit_mynetworks,permit_sasl_authenticated,reject

「パラメータ=値」の途中でスペースを入れることができませんが,「check_sender_access tyep:table」などのように間にスペースを入れなければならないパラメータ値もあります。このような値を指定する場合は,main.cfでユーザ定義のパラメータ値を定義して,master.cfでこれを指定することができます。具体的には,main.cfにて「name = パラメータ値」とパラメータ値に名前を付け,master.cfでこの名前を「${name}」と呼び出すと,これがパラメータ値に展開されます。
設定例2:
main.cfの設定:ユーザ定義パラメータ「check_sender_mydomain」の定義
check_sender_mydomain = check_sender_access hash:/etc/postfix/permit_mydomain

master.cfの設定:ユーザ定義パラメータ「check_sender_mydomain」の利用
submission inet n - n - - smtpd
 …
 -o smtpd_sender_restrictions=permit_mynetworks,${check_sender_mydomain},reject
main.cf及びmaster.cfを編集保存したら「sudo postfix check」でエラーがないか確認し「sudo postfix reload」で修正内容を実行環境に反映します。

以上でPostfixの設定は完了です。設定完了後LAN内からメールを送信してみてうまくいったら,外部と接続するルータなどでもサブミッションポートへの接続を許可する設定にして,今度は外部からメール送信できるか確認します。

■関連情報
ISPによるOP25B 実施状況((財)日本データ通信協会・迷惑メール相談センター)
各ISPによるOP25Bの解説ページインデックスOP25B連絡会
Postfix 2.1日本語ドキュメント:[基本設定][設定パラメータ][master.cfファイルフォーマット][master.cfコメント訳文]
Appleサポート:Mac OS X Server 10.4送信メールを設定する
Apple Server 製品ドキュメント:メールサービスの管理[PDF]

■関連書籍をAmazonで検索:[Postfix][Mac OS X Server]
Postfix実用ガイド

■Apple Store:アップルサーバ3点セット:[Mac OS X Server][Xserve][Apple Remote Desktop]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。
東急ハンズのネット通販「ハンズネット」120×60サイズSony Style(ソニースタイル)

| | トラックバック (1)

Mac OS X Server:Postfixとメールクライアントの接続問題

【問題】
Mac OS X Server 10.4.x(Tiger Server)のメールサーバ(Postfix)を設定するとき,「/etc/postfix/main.cf」ファイルのパラメータのうち,以下の各パラメータのチェックを厳しくすると,このメールサーバに接続するメールクライアントからメール送信ができなくなることがあります。

パラメータ内容
smtpd_client_restrictionsクライアントからの接続要求のチェック
smtpd_helo_restrictionsSMTP HELOコマンドのチェック
smtpd_sender_restrictionsMAIL FROMコマンドのチェック
smtpd_recipient_restrictionsRCPT TOコマンドのチェック
各パラメータの詳細はこちら

【原因】
SMTPは,メールサーバ(MTA)間のメール転送もメールクライアントからのメール送信も同じ25番ポートで受け付けます。そのため両者が同じルールでチェックされてしまい,メールサーバに対してだけ厳しくチェックされるべきパラメータが,メールクライアントにも適用されてしまいます。

【対策】
SASL認証(SMTP Auth)をONにすると,上記の各パラメータチェックで「permit_sasl_authenticated」の指定が意味を持つようになります。各パラメータに「permit_sasl_authenticated」を加えることで,SASL認証にパスしたメールクライアントソフトはそのパラメータのチェックをスキップしてメール送信ができるようになります。下記の設定例では,クライアントのメールソフトからの接続を「reject_invalid_hostname」が阻止してしまうのを「permit_sasl_authenticated」が防いでいます。特定のパラメータ値を「permit_sasl_authenticated」で防ぐには,そのパラメータ値より前に「permit_sasl_authenticated」を入れる必要があります。
設定例:
smtpd_helo_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,permit

Mac OS X ServerにプリインストールされているPostfixには,SASL認証に必要なモジュールがデフォルトで組み込まれています。このSASL認証をONにするには,「サーバ管理」ツールにて「コンピュータとサービス」で「メール」を選び,「設定」→「詳細」→「セキュリティ」でセキュリティパネルを表示します。
ここで「認証」→「SMTP」列のいずれかのチェックボックスをONにして「保存」ボタンを押すと,SASL認証がONになります。
ここでの設定は「/etc/postfix/main.cf」ファイルのパラメータ「smtpd_sasl_auth_enable」「smtpd_pw_server_security_options」などに反映されます。

注1:SASL認証のユーザ名とパスワードは,Mac OS X Serverではワークグループマネージャに登録したユーザ名とパスワードになります。すなわちメール受信用のユーザ名とパスワードと同一になります。
注2:認証時のKerberosとCRAM-MD5はログインを暗号化して行い,LoginとPLAINは平文で行います。クライアント側はアップルの「Mail」はCRAM-MD5で認証を行い,マイクロソフトの「Outlook」「Outlook Express」はLoginで認証を行います。

【追記】
Postfixのドキュメントから設定可能なパラメータを調べるために,Mac OS X Serverで稼動しているPostfixのバージョン番号を知る必要がありますが,「サーバ管理」ツールではこれは表示されません。
Postfixのバージョン番号を知るには,コマンドライン上で
postconf mail_version
と入力することでバージョン番号を知ることができます。
ちなみにMac OS X Server 10.4.11のPostfixのバージョンは2.1.5でした。

■関連情報
Postfix 2.1日本語ドキュメント: [基本設定][設定パラメータ]
Appleサポート:Mac OS X Server 10.4送信メールを設定する
Apple Server 製品ドキュメント:メールサービスの管理[PDF]

■関連書籍をAmazonで検索:[Postfix][Mac OS X Server]
Postfix詳解―MTAの理解とメールサーバの構築・運用

■Apple Store:アップルサーバ3点セット:[Mac OS X Server][Xserve][Apple Remote Desktop]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。
Mac ソフトのことなら act2.comMac ソフトのことなら act2.com宿・ホテル予約ならじゃらんnet

| | トラックバック (0)

Mac OS X Server:Webサーバ設定の問題

【問題】
Mac OS X Server 10.4.x(Tiger Server)にて,OS付属のWebサーバApache)を稼動させ,Webクライアントでサーバにアクセスすると,一部のコンテンツが表示されないことがあります。また,ApacheのKeepAlive機能(「サーバ管理」ツールでの表記は「持続的な接続を許可する」)をONにすると,Webクライアントからアクセスしたときに,すべてのコンテンツの表示が完了するのに時間がかかることがあります。

【原因】
Mac OS X ServerのWebサーバには「パフォーマンスキャッシュ」という機能が組み込まれており,デフォルトでONになっています。
このパフォーマンスキャッシュは,通常Webサーバが使用するポート番号80でリクエストを受け付けます。Webサーバ(Apache)は,パフォーマンスキャッシュがONのときはポート番号16080でリクエストを受け付けます。
外部からのリクエストはまずポート番号80が受け取り,パフォーマンスキャッシュでコンテンツがキャッシュされていなければポート番号16080へリダイレクトされます。そのためポート番号16080が外部からアクセスできないとキャッシュにないコンテンツを表示させることができません。

また,パフォーマンスキャッシュがONのときにKeepAlive機能もONだった場合,KeepAliveで設定されたタイムアウト時間がリダイレクト時のウエイトタイムになってしまうようです。そのためたとえばタイムアウト時間が15秒だった場合,Webページ上の画像が1枚表示されるごとに15秒待たされる,ということになってしまいます。

【対策】
パフォーマンスキャッシュをOFFにすれば,とりあえず問題は解消します。パフォーマンスキャッシュをONにしたまま問題が出ないようにするには以下のようにします。

  1. ルータなどの設定により,ポート番号16080を外部からアクセスできるようにする。
    →ポート番号16080にアクセスできるかどうかは,HPのURLがたとえば「http://www.example.co.jp/」だった場合,この URLを「http://www.example.co.jp:16080/」と変更してWebブラウザからHPにアクセスできるかどうかで確認することができます。
  2. KeepAlive機能(「持続的な接続を許可する」)をOFFにする。
    パフォーマンスキャッシュとKeepAliveの両方をONにすると,上記のような問題が生じるので,「自分達のサイトにとってどちらの機能がより恩恵があるか」を検討し,どちらをONにするかを決定することになるかと思います。
■関連情報
Appleサポート:Webパフォーマンスキャッシュについて学習する
Appleサポート:Webサービスがデフォルトでポート80と16080を使用する
Appleサポート:Appleソフトウエアで使用するTCP/UDPポート
Appleサポート:Mac OS X Server 10.4Web サイトを管理する
Apple Server 製品ドキュメント:Webテクノロジーの管理[PDF]

■関連書籍をAmazonで検索:[Apache][Mac OS X Server]
Apacheセキュリティ

■Apple Store:アップルサーバ3点セット:[Mac OS X Server][Xserve][Apple Remote Desktop]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ にほんブログ村 IT技術ブログ Webサイト構築へ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。
Mac ソフトのことなら act2.comMac ソフトのことなら act2.com

| | トラックバック (0)

Mac OS X Server:DNS設定の問題

【問題】
Mac OS X Server 10.4.x(Tiger Server)にて,設定ツール「サーバ管理」でDNSサーバBIND)の設定を行ったときに以下のような問題がありました。
注:この問題がLeopard Serverで改修されているかどうかは未確認です。

●設定が勝手に書き換わる問題
「サーバ管理」は,DNS設定を変更したあとで「保存」ボタンで変更内容を反映するときに,設定ファイルの内容やファイル名をチェックして,エラーと判断した箇所を書き換えているようです。
この機能は,間違った設定のままDNSを運用してしまわないための機能だと思われますが,一部正しいはずの設定をエラーと判定するケースがあるようです。
ここでは現在こちらで把握している不備の内容についてリストアップしたいと思います。

1)逆引き設定をクラスC未満にできない
クラスC未満の逆引き設定を行い,「サーバ管理」の「保存」ボタンを押すと,逆引き設定がクラスCに拡張して保存されてしまいます。

2)SPF設定が消える
SPFの設定は,ドメイン名に対してTXTレコードを割り当てて,そこに記述しますが,ドメイン名へのTXTレコードの割り当ては,「サーバ管理」は設定の誤りと解釈するようで,SPFの設定を行ったあとで「サーバ管理」の「保存」ボタンを押すと,SPFの設定をファイルから削除して保存されてしまいます。

●view設定がエラーになる問題
「view」はBIND9から追加された機能で,Tiger ServerのBINDも9.xなので当然使えるのですが,設定ファイルをviewを使って書き換えてBINDを起動し直すと,「サーバ管理」のステータス表示でDNSがエラー状態になってしまいます。

【対処方法】
設定が勝手に書き換わる問題については,「サーバ管理」による設定の更新を行わないようにするしかないと思います。「サーバ管理」による設定は,最初のドメイン設定ファイルの生成までにして,その後の設定はテキストエディタで直接設定ファイルを編集して「サーバ管理」からは設定は行わないようにします。「サーバ管理」は設定ファイルの書き換えを行ったあとのDNSの起動・停止でのみ利用します。
view機能の障害については,viewを使わないか,エラー表示に目を瞑るしかないようです。

■関連情報
Appleサポート:Mac OS X Server 10.4DNS サービスの概要
Apple Server 製品ドキュメント:ネットワークサービスの管理[PDF]
JPRS:DNS関連技術情報
OPENTECHPRESS:SPF解説

■関連書籍をAmazonで検索:[BIND/DNS][Mac OS X Server]
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集

■Apple Store:アップルサーバ3点セット:[Mac OS X Server][Xserve][Apple Remote Desktop]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


Mac ソフトのことなら act2.comMac ソフトのことなら act2.comシマンテックストア

| | トラックバック (0)

WebObjects:メモリ不足エラー対応

【問題】
WebObjectsで開発したWebアプリケーションが稼動中にメモリ不足でメモリ割り当てできなくなったとき,OutOfMemoryError例外が発生します。

【対応策】
WebObjectsで開発するWebアプリはJavaアプリケーションなので,対応策は基本的にJavaアプリケーションと同じです。

割り当てメモリと残メモリの調査
Webアプリケーションには,起動時にJava VMからヒープメモリが割り当てられます。
割り当てられたヒープメモリのサイズは以下のコードで調べることができます。このコードはたとえばmainメソッドの先頭に埋め込むと良いでしょう。

割り当てメモリサイズを表示するJavaプログラムコード
long total = Runtime.getRuntime().totalMemory();
System.out.println("Total Memory = " + Long.toString(total) + "bytes");

特定の時点での残りのヒープメモリは以下のコードで調べることができます。
このコードでは回収できるメモリはできるだけ回収してから残メモリサイズをカウントするため,事前にgcを呼ぶようにしています。
このコードはOutOfMemoryError例外が発生する処理を行う直前の残メモリを調べるときなどに使えるでしょう。
残メモリサイズを表示するJavaプログラムコード
Runtime.getRuntime().gc();
long free = Runtime.getRuntime().freeMemory();
System.out.println("Free Memory = " + Long.toString(free) + "bytes");
※メモリ不足エラーが起きたときは,原因がメモリリークではないかを十分に確認してください。Java VMは参照されなくなったメモリを自動的に回収してくれますが,参照されたままのメモリは回収してくれません。

Javaでの割り当てメモリ拡張方法
Javaアプリケーションのメモリ不足に対する最も手っ取り早い対処方法が,アプリケーション割り当てメモリを増やすことです。
Javaでは,アプリを起動するjavaコマンド([Win版][Solaris版])へのオプション指定で割り当てメモリのサイズを指定することができます。

指定できるオプション指定:
-Xmxサイズ値:割り当てメモリの最大値を指定
-Xmsサイズ値:割り当てメモリの初期値を指定

サイズ値は,-Xmxは2MBより大きい1024の倍数,-Xmsは1MBより大きい1024の倍数でなければなりません。
各サイズ値にキロバイトを指定する場合はkまたはK,メガバイトを指定する場合はmまたはMを付けます。

-Xmxで指定できる値の上限は,OS環境やJavaVMのバージョンにより異なるようです。-Xmxに上限を超える値を指定した場合は「Could not reserve enough space for object heap」というエラーメッセージが返ります。

コマンドラインから起動する場合のオプション指定例:最大値128MB,初期値64MB,起動クラス:EntryClass
java -Xmx128m -Xms64m EntryClass

WebObjectsでメモリサイズを指定するには?
オプション「-Xmxサイズ値」及び「-Xmsサイズ値」をWebObjectsで運用するWebアプリに適用するには以下のようにします。
運用環境で,すでに実稼動しているWebアプリに設定する。
JavaMonitorで以下の設定を行います。
1.JavaMonitorを起動し,Applicationsタブの画面から設定するアプリケーションの「Config」ボタンを押します。
2.「Configuring Application "アプリケーション名"」の画面が表示され,「New Instance Defaults」が開いている状態になります。
3.「New Instance Defaults」の「Additional Arguments:」テキストボックスにオプション「-Xmxサイズ値 -Xmsサイズ値」を入力(追記)して「Push」「Update for New Instances Only」ボタンを押します。
4.アプリケーションのDetail View画面に移動し,アプリケーションを再起動します。

開発版(動作確認用)に設定する。
1.Xcodeにて,プロジェクト名のターゲットをダブルクリックで開きます。
2.「設定」ポップアップで「Development」を選びます。
3.ウインドウの左側リストから「設定」→「シンプルビュー」→「詳細設定ビュー」を開きます。
4.「ビルド設定」が開くので,この中の「JVM_OPTIONS」に「-Xmxサイズ値 -Xmsサイズ値」を入力(追記)します。
5.ウインドウを閉じ,ターゲットをクリーニングしてビルドします。

開発環境でビルドする運用版に設定する。
1.Xcodeにて,プロジェクト名のターゲットをダブルクリックで開きます。
2.ウインドウの左側リストから「設定」→「シンプルビュー」→「詳細設定ビュー」を開きます。
3.「ビルド設定」が開くので,この中の「JVM_OPTIONS」に「-Xmxサイズ値 -Xmsサイズ値」を入力(追記)します。
4.以上の操作をすべてのターゲットのすべての「設定」ポップアップで行います。
5.ウインドウを閉じ,ターゲットをクリーニングしてビルドします。

※上記で指定した内容が,ビルドした運用版Webアプリのパッケージに含まれる各プラットフォーム用クラスパスファイル(例:MacOS用のクラスパスファイルは「Contents/MacOS/MacOSClassPath.txt」)の「# JVMOptions」行に反映されます。

■関連情報
OutOfMemoryError対応事例(@IT:Java Solution)
WebObjects旧版のJavaメモリリーク問題
WebObjects:[日本語技術マニュアル][開発と運用について][API Reference(javadoc)][ADC Tools][サポート][製品紹介]

■関連書籍をAmazonで検索:[Java][WebObjects 和書 洋書]
Webアプリケーション・サーバー 設計・構築ノウハウ

■Apple Store:Windows/Solaris版[WebObjects 5.2]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ プログラム・プログラマへ にほんブログ村 IT技術ブログ ネットワーク・SEへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


Mac ソフトのことなら act2.comioPLAZA【アイ・オー・データ直販サイト】ioPLAZA【アイ・オー・データ直販サイト】ioPLAZA【アイ・オー・データ直販サイト】ioPLAZA【アイ・オー・データ直販サイト】

| | トラックバック (0)

MySQL:4.1日本語問題

MySQLは4.0から4.1のバージョンアップで日本語を含む文字コードの扱いが大きく変わっており,それが原因でデータベースで日本語テキストを読み書きするときに文字化けなどが発生するケースがあります。ここではその問題について,当方でわかっている範囲で簡単にまとめてみました。

この問題について,詳しくはMySQLユーザ会FAQページなどを参照してください。

MySQLの文字コード処理は何が変わったのか

MySQL4.1以前は,データベースに格納するテキストデータの文字コードを指定することはできましたが,MySQLがその指定に従って何らかの処理(文字コード変換など)をすることはなく,指定した文字コードは単なるラベルに過ぎなかったようです。
MySQL4.1以降では,指定した文字コードに基づいて次のような処理を行うようになりました。

データベースのスキーマ定義で指定された文字コードとクライアントツールで指定された文字コードが異なる場合,mysqldデーモンとクライアントとの間でデータ転送を行うときに,指定された文字コード間で文字コード変換を行います。
また,このときの文字コード変換は,一度Unicode(UCS-2)に変換してから目的の文字コードに再度変換するという手順になります。

それがどのような影響をもたらしているのか

1)日本語文字コードを指定して作成したデータベースのテキストフィールドに,コマンドラインツール「mysql」から文字コード指定なしでテキストデータを入力したとき,mysqlコマンドの文字コードのデフォルトが「latin1」なので,入力する日本語テキストに対して「latin1→日本語文字コード」の変換を行ってしまい,日本語テキストが壊れます。

2)mysqldデーモンで指定される文字コードのデフォルトが「latin1」なので,データベースを作成するときに文字コードを明示しないと,データベースやテキストフィールドの文字コードはlatin1となります。この状態でmysqlコマンドから日本語文字コードを指定してデータベースに日本語テキストを入力すると「日本語文字コード→latin1」の文字コード変換が起こりますが,latin1には日本語が含まれないため,日本語の文字がすべて「?」に置き換えられてデータベースに書き込まれます。

3)文字コード変換について,Unicodeと非Unicodeを変換する変換テーブルに標準がないため,文字コード変換を行うと一部の文字が意図せぬコードに変換されてしまう可能性があります。詳細はこちらとかこちらとかこちらを参照。なお,文字コード変換は一旦Unicode(UCS-2)に変換してから目的の文字コードに変換するため,非Unicodeから非Unicodeへの変換でもこの問題が発生します。

4)文字コードのデフォルトを変えずにデータベースをlatin1で作成しクライアントからlatin1で読み書きした場合,文字コードが同じなので文字コード変換は起こらずに日本語テキストをデータベースに保存・読み出しができます。ただし,コマンドラインツール「mysqldump」は文字コードのデフォルトが「UTF-8」のため,文字コードをデフォルトのままデータベースの内容をバックアップすると「latin1→UTF-8」の文字コード変換が起きてしまい,日本語テキストが壊れます。

5)JDBCアダプタを介してJavaアプリからデータベースを読み書きした場合,テキストデータはJavaのStringクラスで読み書きを行いますが,Stringクラスのテキストデータは内部でUCS-2で保持するので,データベースアクセスの際にテキストデータの文字コードとUCS-2との間でコード変換が発生するはずです。このときデータベースの文字コードがlatin1なら日本語テキストが壊れ,Unicode系でない場合はUnicodeと非Unicodeの不整合の問題が発生すると思われます。

どうすればいいのか

以下のような設定を行えば,問題は避けられるはずです。
1)MySQLのデータベースに設定する文字コード,及びMySQLに入出力するテキストデータの文字コードを1つに統一して,文字コード変換が起きないようにします。
2)JDBCアダプタからMySQLにアクセスする場合は,MySQLで使用するすべての文字コードにUnicode系を指定して,JavaのStringクラス(UCS-2)との間でUnicode系以外への文字コード変換が起きないようにします。

MySQLでデフォルトの文字コードを設定するには,設定ファイル「my.cnf」(Windowsの場合は「my.ini」)に文字コードの定義を追加します。
MySQLの設定ファイルについてはこちらを参照:[4.1][5.1]
ここで指定できる文字コードのリストはこちらを参照:[4.1][5.1]
Microsoftコードページ932「cp932」はMySQL4.1.12及び5.0.3以降で指定できます。

デフォルトの文字コードの変更については,ソースファイルのリコンパイルによる対応もありますが,mysqldumpについてはソースファイル上での指定にかかわらずUTF-8でリコンパイルされてしまうので,mysqldumpのデフォルト文字コードの変更についてはmy.cnfファイルで対応するしかありません。

my.cnfファイルの[mysqld]セクションで指定できるパラメータに「skip-character-set-client-handshake」があります。このパラメータはクライアントの文字コード設定をサーバの設定で上書きして文字コード変換を行わないようにするようです。この指定はMySQL4.1.15及びMySQL5.0.13以降で使えます。
また,文字コードに「binary」を指定してもMySQL4.1以前同様文字コード変換を行わなくなるようです。但し,データベースやテキストフィールドでbinary型を指定した場合は,テキストの検索や文字列長を指定して行う処理などで不都合が生じるようです。そのため,binaryの指定はクライアントツールに限ったほうがよいようです。

文字コードにUTF-8を指定したmy.cnfファイルの設定例:

[client]
default-character-set = utf8

[mysqld]
default-character-set = utf8
skip-character-set-client-handshake

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

注意:my.cnfファイルの設定を更新したら,MySQLを再起動する必要があります。

JDBCアダプタ(MySQL Connector/J)からMySQLにアクセスする場合は,JDBCアダプタがデータベースのクライアントとして動作するときの文字コードを指定しておきます。JDBCアダプタ文字コードはJDBC URLで指定します。
文字コードにUTF-8を指定する場合の設定例(文字コード以外の指定は省いています):
jdbc:mysql://ホスト名/データベース名?useUnicode=true&characterEncoding=UTF8
JDBC URLでのUTF-8設定について,詳細はこちらこちらを参照。

■関連情報
Microsoftコードページ932(Wikipedia
MySQLユーザ会/FAQページ

■関連書籍をAmazonで検索:[MySQL][JDBC]
MySQL 徹底入門 第2版

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ プログラム・プログラマへ にほんブログ村 IT技術ブログ ネットワーク・SEへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。
東急ハンズのネット通販「ハンズネット」120×60サイズioPLAZA【アイ・オー・データ直販サイト】

| | トラックバック (0)

WindowsでWebObjects運用(その5)

←その4 IISの設定
Monitor(JavaMonitor)の設定とWebアプリ起動
JavaMonitorは,WebObjects運用環境の設定を行うWebアプリケーションです。JavaMonitorを使ってWebアプリを運用するサーバ(wotaskd)の環境設定,運用するWebアプリの設定,Webアプリ起動のスケジューリング設定などを行うことができます。

ローカルで稼動しているJavaMonitorにアクセスするときのURLは
http://localhost:56789/scripts/WebObjects.exe/JavaMonitor.woa」になります。
JavaMonitorの起動・停止は「管理ツール」→「サービス」の「Apple WebObjects Monitor 5」から行うことができます。

参考:Mac OS X Serverで稼動するJavaMonitorについてはこちら

JavaMonitorの設定(1):環境設定
JavaMonitorの「Preferences」タブのページで下記の設定を行うことができます。

1)パスワード設定(Monitor Password)
JavaMonitorにアクセスするときのログインパスワードを設定します。
パスワードを設定しなかった場合,JavaMonitorにアクセスすると直ちに設定の閲覧・編集を行えます。

2)リフレッシュ設定(Detail View Refesh Settings)
詳細情報を表示したときの,情報ページのリフレッシュのON/OFF及びリフレッシュ時間を設定します。

JavaMonitorの設定(2):ホストの登録
JavaMonitorの「Hosts」タブを選んで,WebObjects運用版をインストールしたホスト(wotaskdが稼動しているホスト)を登録します。
この設定は,稼動するWebアプリケーションを登録するより前に行っておく必要があります。
設定手順:
1.「Add Host」ボタンの後ろのテキストボックスに登録するホストのホスト名またはIPアドレスを入力します。
2.登録するホストのタイプをポップアップメニューから選びます。
3.「Add Host」ボタンを押して,入力したホストの行がリストに追加されれば完了。

JavaMonitorの設定(3):HTTPアダプタの設定
JavaMonitorの「Sites」タブを選んでHTTPアダプタの設定を行うことができます。

1)アダプタURL
HTTPアダプタのフルパスを登録します。
WindowsでISAPIアダプタ(Windows.dll)を使用する場合,アダプタURLは
「http://ホスト名/cgi-bin/WebObjects.dll」となります。

2)アダプタ設定
負荷分散などについての設定を行います。(設定したことがないので略)

3)警告メール
SMTPホストと宛先メールアドレスを設定しておくことで,HTTPアダプタがエラーを検出したときに警告メールを送ることができます。ただし,25番ポートへSMTP認証なしでメール送信するのでスパム対策が厳しい環境ではメール送信に失敗する可能性があります。

JavaMonitorの設定(4):Webアプリケーションの登録と起動
JavaMonitorの「Applications」タブを選んで,運用するWebアプリケーションを登録します。
登録手順:
1.事前に運用版のWebアプリケーションを開発環境でビルドし,Windowsサーバに転送しておきます。
2.「Applications」ページの下の「Add Application Named」テキストボックスに登録するアプリケーション名を入力し,「Add Application」ボタンを押します(ここで指定したアプリケーション名が,アプリケーションにアクセスするURL名に使われます)。
3.「Configuratiion Application "アプリケーション名"」ページに移動するので,「Path」→「Windows」のテキストボックスにWebアプリケーションの起動スクリプト「.CMD」ファイルまでのパスを設定します。(Path WizardによりGUIでパスを指定することもできます)
4.「Path」行の「Push」ボタンと「Update for New Instance Only」ボタンを押すことで入力を確定します。
5.それ以外の「New Instance Defaults」パラメータの値についてはこちらを参照してください。
6.「Configuratiion Application」の設定が終わったら右上の「Detail View」ボタンを押して,Detailページに移動します。
7.画面下の「Add」ボタンの後ろのテキストボックスに,起動するWebアプリのインスタンス数を入力します。続いて「on host:」の後ろのポップアップメニューでインスタンスを稼動するサーバを指定します。(ここでリストアップされるサーバは「Hosts」タブのページで登録したものです)
負荷分散を行わない場合,インスタンス数は1です。「Add」ボタンを押すと,リストにインスタンスの行が追加されます。
8.インスタンス行の「Start-Stop」列の青いボタンを押すと,インスタンスの起動が始まります(レバーが上がってOFFからONに変わるアニメーション)。「Status」が「ON」になれば起動完了です。このときのステータスの変化を早く反映させるには「Refresh Now」ボタンを押します。
「Auto Recover」がONになっていた場合,青いボタンを押さなくても一定時間が経過すると自動でインスタンスの起動が始まります。
9.動作確認
StatusがONになってWebアプリの起動が成功したら,Detail画面のWebアプリ名がリンクボタンに変わったはずです。このリンクボタンをクリックするとWebアプリが起動してWebアプリのトップページが表示されるはずです。
この状態で,WebObjects運用環境でのWebアプリの稼動が開始しています。
起動に失敗した場合,StatusがONになりません。この場合は運用環境の構築ミスやJavaのバージョンの不整合がないかを確認してください。また,開発環境で正しく起動するか,起動する場合は運用版をビルドするときのパラメータが開発版と同じかを確認してください。
(Mac OS X ServerなどUNIX系のOSでは,Webアプリのパーミッションが原因で起動できないことがあります)

ここまででアプリケーションが正常に起動できれば,このままアプリケーションを運用環境で稼動させることができます。

■関連情報
Java Monitor Help
WebObjectsアプリケーションの運用[PDF]
WebObjects:[日本語技術マニュアル][開発と運用について][ADC Tools][サポート][製品紹介]

■関連書籍をAmazonで検索:[WebObjects 和書 洋書][Windows Server 2003][IIS 6.0]
[24時間365日] サーバ/インフラを支える技術

■Apple Store:Windows/Solaris版[WebObjects 5.2]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ にほんブログ村 IT技術ブログ Webサイト構築へ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


▼WindowsでWebObjects運用[その1][その2][その3][その4][その5]
Mac ソフトのことなら act2.com宿・ホテル予約ならじゃらんnet

| | トラックバック (0)

WindowsでWebObjects運用(その4)

←その3 インストール時の注意点
IISの設定
WebObjectsを呼び出すWebサーバとしてIISを使用する場合のIISの設定方法について説明します。
IIS側で設定することは,IISをWebサーバとしてセットアップすることと,IISからWebアプリを呼び出す環境を整えることです。

ディレクトリ構成
IISをデフォルト設定でインストールすると,ドキュメントルートは「C:\inetpub\wwwroot」になります。このままWebObjectsをデフォルト設定でインストールすると,「C:\inetpub\scripts」にHTTPアダプタがインストールされます。
ここでインストールされるHTTPアダプタは「WebObjects.dll」と「WebObjects.exe」の2つですが,前者がIIS用ISAPIアダプタ,後者が汎用CGIアダプタです。CGIアダプタは動作効率が良くないのとセキュリティ上の問題があるので,ISAPIアダプタを使うようにセットアップを行います。

セットアップ
1)ISAPIの実行許可
IIS 6.x(Windows Server 2003)でISAPIアダプタを使用するには,ISAPI形式の実行ファイルを許可する必要があります。
この設定にはIISの設定ツールであるIISマネージャ(「インターネットインフォメーションサービス(IIS)マネージャ」)を使います。IISマネージャは「管理ツール」に含まれます。

設定方法:
1.IISマネージャを開いて左側リストの中からローカルサーバ名を開き,その下の「Webサービス拡張」を表示させます。
2.右側の設定パネルの「すべての不明なISAPI拡張」を選んで「許可」ボタンを押してください。
(新しいWebサービス拡張を追加」ボタンから,使用するアダプタ(ここではWebObjects.dll)を個別に登録することもできるようですが,このやり方は試していません。その場合の手順はこちら

参考:
IIS 6.0のWeb拡張機能を有効にする(@IT Windows TIPS)
IIS を動的コンテンツに対して構成する(Microsoft TechNet)

2)仮想ディレクトリ「cgi-bin」の作成
cgi-binは,WebObjects運用環境ではWebサーバとWebアプリを結合するHTTPアダプタが格納されているディレクトリです。IISの仮想ディレクトリの仕組みを使って,Webクライアントからアクセスしたときに別の場所にあるcgi-binがドキュメントルートの下にあるように見えるようにします。IISとWebObjectsをデフォルトでインストールすると,cgi-binの本体は「C:\inetpub\scripts」になります。
仮想ディレクトリの設定はIISマネージャを使います。

設定方法:
1.IISマネージャを開き,左側のリストの中からローカルサーバ名を開き,その下の「Webサイト」を開きます。
2.「Webサイト」をクリックし,右クリックで「新規作成」→「仮想ディレクトリ」を選びます。
3.仮想ディレクトリ作成ウィザードが起動するので,
・エイリアス名:「cgi-bin」
・パス:(デフォルトインストールの場合)「C:\inetpub\scripts」
・アクセス許可:「ISAPIアプリケーションやCGIを許可する」をチェック
で仮想ディレクトリを作成します。

以上でIISの設定は完了です。

その5「JavaMonitorの設定とWebアプリ起動」へ

■関連情報
インターネット・インフォメーション・サービス(Windows Server 2003 ドキュメント)
Appleサポート:WebObjects5.1のIISアダプタのパフォーマンス問題

■関連書籍をAmazonで検索:[WebObjects 和書 洋書][Windows Server 2003][IIS 6.0]
4Gbpsを超えるWebサービス構築術

■Apple Store:Windows/Solaris版[WebObjects 5.2]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ にほんブログ村 IT技術ブログ Webサイト構築へ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


▼WindowsでWebObjects運用[その1][その2][その3][その4][その5]
デル株式会社デル株式会社デル株式会社デル株式会社デル株式会社サンワダイレクト

| | トラックバック (0)

WindowsでWebObjects運用(その3)

←その2 各インストーラ入手先
インストール時の注意点

インストールの順番について
WebObjectsをインストールする前に,IISとJavaをインストールしておきます。
これは,WebObjectsのインストーラがIISとJavaのディレクトリ構成から環境変数の設定を行うためです。
但し,インストーラが設定するJavaのパスは正しくないことがあります(後述)。

WebObjectsのインストールパス
インストーラCDからWebObjects5.2をインストールするとき,パラメータをデフォルトでインストールすると,「C:\Apple」というディレクトリが作られ,その下にWebObjectsが一式インストールされます。
同時にシステム環境変数に「NEXT_ROOT」というエントリが作られ,その値として「C:\Apple」が登録されて,このディレクトリがWebObjects環境のトップディレクトリとして認識されます。

WebObjectsのアップデートについて
WebObjects5.2からアップデートするとき,アップデータを実行する前に起動しているWebアプリとWebObjectsデーモン(wotaskd)を停止しておくのが安全です。
WebObjectsデーモンを停止する手順として,「スタート」メニュー→「管理ツール」→「サービス」を開き,「Apple WebObjects Task Daemon 5」を選んで「サービスの停止」で停止させます。
「Apple WebObjects Monitor 5」も起動していれば停止しておきましょう。
WebObjectsデーモンを停止せずにアップデートした場合,アップデートが途中で止まって使用中のファイルの上書きを警告するダイアログが表示されます。このときはデフォルトボタンの「Ignore」(無視)ではなく,左端の「Reboot」(再起動時に置き換える)を選んで先に進みます。

WindowsにWebObjectsをインストールし,これをアップデートしたあとで,アップデートしたバージョン番号を確認するには以下のようにします。

現在のバージョンを確認する。
現在インストールされているバージョンは,「プログラムの追加と削除」を開いて「現在インストールされているプログラムの一覧」の「WebObjects」の行で確認できます。

アップデートの履歴を確認する。
アップデータを実行すると,レジストリキー「HKEY_LOCAL_MACHINE\SOFTWARE\Apple」の下に,これまでに実行されたアップデータのバージョン番号がキー名としてすべて残っています。
そのため,このキー名をレジストリエディタで確認することにより,アップデートの履歴を知ることができます。

レジストリエディタの使い方:(higaitaisaku.comより)
インストール済みのWebObjectsのバージョンを確認する方法

OSの環境変数に設定されるJavaのパスについて
インストーラがOSの環境変数に設定したパスは正しくない場合があり,インストール後に見直す必要があります。
Java SDK(JDK)1.4.2をインストールしたとき,Javaの実行環境(JRE)として,「C:\ProgramFiles\Javaの下に単体版JRE」「JavaSDK(JDK)に含まれるJRE」と2つのJREがインストールされますが,WebObjectsは後者のJavaSDK(JDK)に含まれるJREでないと稼動できません。ところがインストーラがOSの環境変数に設定するJavaのパスは前者の単体版JREのほうを指している場合があります。この場合はJDKに含まれるJREを指すようパスを設定し直す必要があります。
このパスを設定し直すには,「システムのプロパティ」→「詳細設定」→「環境変数」を開き,
「WEBOBJECTS_JAVA_EXTENTIONS」
「WEBOBJECTS_JAVA_HOME」
「Path」
に設定されたパスについて,JREまでのパスを「単体版JRE」までのパスから「JDK内のJRE」までのパスに書き換えます。
また,Pathのなるべく前(%SystemRoot%で始まるエントリ群の直後)に「JDKまでのパス\jre\bin;」を(なければ)追加します。
また,WebObjectsをアップデートするたびに,Pathの後ろに%NEXT_ROOT%で始まるエントリが追加されていますが,すべてのアップデートが終了した後で重複するエントリはすべて削除します。

JDBCアダプタのインストール先について
Webアプリとデータベースを接続するJDBCアダプタは,以下の場所に配置すると使用できます。
「NEXT_ROOT\Local\Library\WebObjects\Extensions」
(「NEXT_ROOT」は上で説明したとおり,システム環境変数に設定されたWebObjects環境の最上位ディレクトリパスです。デフォルトインストールでは「C:\Apple」で登録されます。)

インストール後の動作チェック
インストールが完了したら,WebObjects運用版が稼動しているか確認します。
Webブラウザを開いて次のURLを入力してみてください。
http://localhost:1085/
「Wotaskd for WebObjects 5.2」というタイトルのWebObjects環境変数一覧ページが表示されればwotaskdデーモンが稼動しています。
次に以下のURLを入力してみてください。
http://localhost:56789/scripts/WebObjects.exe/JavaMonitor.woa
Monitorページが表示されればJavaMonitorが稼動しています。

もしもこれらのページがうまく表示されなかった場合,「スタート」メニュー→「管理ツール」→「サービス」を開いて「Apple WebObjects Task Daemon 5」及び「Apple WebObjects Monitor 5」のプロパティを開き,それぞれについて以下を確認してみてください。
・「スタートアップの種類」が「自動」になっているか。
・「サービスの状態」が「開始」になっているか。

その他
WebObjects 5 インストール時の注意事項
WebObjects 5.2 WindowsでPATH環境変数を修正する方法

その4「IISの設定」へ

■関連書籍をAmazonで検索:[WebObjects 和書 洋書][Windows Server 2003][IIS 6.0]
Webアプリケーション・サーバー 設計・構築ノウハウ

■Apple Store:Windows/Solaris版[WebObjects 5.2]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ にほんブログ村 IT技術ブログ Webサイト構築へ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


▼WindowsでWebObjects運用[その1][その2][その3][その4][その5]

| | トラックバック (0)

WindowsでWebObjects運用(その2)

←その1 動作環境
各インストーラ入手先

 

WebObjects 5.2
市販パッケージソフトのWebObjects 5.2を購入します。
サーバへ運用環境のインストールを行うには,インストールディスク「for Windows and Solaris」の「Deployment」フォルダ→「Windows」→「Setup.exe」を実行してインストールを行います。
WebObjects 5.2.4へのアップグレードは,5.2をインストールディスクからインストールした後,アップルのサイトからアップデータをダウンロードしてアップグレードを行います(後述)。

インターネットインフォメーションサービス(IIS) 6.0
IIS 6.0をOSのインストールディスクから追加インストールします。

Java SDK 1.4.2インストーラ
Java 1.4.2 ダウンロードページからJ2SE SDKのWindows版を入手します。
注意:運用環境でもJavaはJava SDK(JDK)が必要です。

WebObjectsアップデータ(開発版・運用版共通)
WebObjects 5.2.4の英語のページの章「Installing WebObjects 5.2.4 on Windows 2000 System Requirements」より「Download」をクリックして「WO524.exe」を取得します。
システム要件などは日本語ページを参照してください。

注:上記ページにて,WebObjects5.2.4アップデータのシステム要件がWebObjects5.2となっているため,5.2をインストールした直後に5.2.4へアップグレードする説明になっておりますが,当方で実稼動している環境ではWebObjects5.2をインストールした後,5.2.1→5.2.2→5.2.3→5.2.4の順ですべてのアップデータを実行しています。
WebObjects 5.2.1~5.2.3アップデータは以下からダウンロードできます。
WebObjects5.2.1の「Windows 2000 への WebObjects 5.2.1 インストール」より「WO521.exe」を取得
WebObjects 5.2.2の「Windows 2000 への WebObjects 5.2.2 のインストール」より「WO522.exe」を取得
WebObjects 5.2.3の「Windows 2000 への WebObjects 5.2.3 のインストール」より「Windows 2000 対応アップデートインストーラ 」をクリックし「WO523.exe」を取得

参考:WebObjectsパッチリスト

データベース
WebObjectsでは,基本的にJDBCで接続可能なデータベースを利用することができます。
アップルで動作確認されたデータベースのリストはこちら

データベースにMySQLを使う場合:MySQLのインストーラ入手先
MySQL 5.0.x:[本体][JDBCアダプタ][GUIツール]
MySQLリファレンスマニュアル:[4.1][5.1]
その他:MySQL ドキュメント

データベースにOracleを使う場合:Oracle用JDBCアダプタに関する情報
オラクル社:Oracle JDBC Driver ダウンロード
Appleサポート:Oracle JDBC ドライバの使用方法

その3「インストール時の注意点」へ

■関連書籍をAmazonで検索:[WebObjects 和書 洋書][Windows Server 2003][IIS 6.0]
プロとしてのOracleアーキテクチャ入門 Oracle現場主義

■Apple Store:Windows/Solaris版[WebObjects 5.2]

にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ ネットワーク・SEへ にほんブログ村 IT技術ブログ Webサイト構築へ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


▼WindowsでWebObjects運用[その1][その2][その3][その4][その5]
東急ハンズのネット通販「ハンズネット」120×60サイズシマンテックストア

| | トラックバック (0)

より以前の記事一覧