今回はajaxを手軽に利用する為に


簡易なクロスブラウザ(※1)ライブラリを用意します。


と言っても、特に難しく考える必要はなく


単なるJavaScriptです。



http://jsgt.org/lib/ajax/051/jslb_ajax0511.js.txt



からソースコードをコピーして


適当な名前を付けます。

(ここではjslb_ajax.jsという名前にしています)



このライブラリの構成は以下の3つの関数です。

(こちらの世界では関数の事をオブジェクトと言ったりしているようです)



① chkAjaBrowser() 

  動作可能なブラウザの判定


② createHttpRequest()

  XMLHttpRequestオブジェクト生成


③ sendRequest()

  送受信関数



次回は実際にサンプルを動かしてみます。



※1:Ajax(JavaScript)は全てのOS、

  ブラウザで等価な動作を保障していません。






とある企画案件でajaxを

使用して非同期通信でシステムを

構築しようと思っています。



まずajaxって何者??

って事で正式名称は・・



Asynchronous (エイシンクロナス/アシンクロナス) JavaScript + XML



の略で要はJavaScriptやXMLを使用して

Webサーバと非同期通信をしましょう。



と言った感じになります。



通常、サーバからJavaやPHPで

動的にHTMLを作成して出力する際は

そのHTML全てを表示させる事になります。



で、ajaxを使用するとクライアント(ブラウザ)の

個別のアクションでブラウザに表示されている

一部分のHTMLをオーバーライトが可能になります。



今日は概念まで。

次回はその作り方、

次々回はサンプルを。






OS:CentOS4.4

Tomcat:5.5.X

Apache:2.0.X

PostgreSQL:8.1.X



の環境下で以下のようなエラーが発生。


org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Connection rejected: FATAL: Ident authentication failed for user "admin".)

PostgreSQLの認証機能で接続できないみたい。


そこでPostgreSQLのアクセス制限設定ファイルの

pg_hba.confを編集する。



local all ident md5 sameuser



の部分を・・



local all trust


に変更してローカルからのアクセスを制限しないようにする。



PostgreSQLの再起動。



で、問題解決。



POPサーバの設定をしてみます。


と言っても、RedhatLinuxES4.0に

同梱されているdovecotを

使用するので簡単です。



/etc/dovecot.confの設定を変更します。


プロトコルを指定する。
protocols = imap imaps pop3 pop3s


メールボックスを指定する
default_mail_env = maildir:~/Maildir


chrootユーザのディレクトリを指定する
valid_chroot_dirs = /home


dovecotの起動

# /etc/rc.d/init.d/dovecot start


これでお終い。



クライアントメーラの設定をして

メールを受信してみましょう。



※必要であれば、chkconfigで

 自動起動設定にしておきましょう。




久々の更新ですが、

仕事をさぼっていた訳では

ありません。



Web系エンジニアであれば

必ずおさえて欲しいスキルのひとつに

ソケット通信があります。



ソケットの概念はネット等で

調べて頂くとして

Web系の言語だと

大体サポートされてます。



用途は下記のように様々です。



・ cronやタスクスケジューラからのバッチ処理

・ MTAからパイプされた後、Webサーバにリクエスト送信

・ 異なるサーバ間の自動通信



などなど



で、今回はそのソケット接続のサンプルを。

unix系サーバを扱う事が多いので

Perlで記載してます。




#!/usr/bin/perl


use Socket;


# 標準入力の取得
chomp($input = <STDIN>);


# IPアドレスの設定
$addr = inet_aton("192.168.1.10");


# 接続先のプログラム・パラメタ指定
$url = "/register.php";
$enval = urlEncode($input);
$prm = "?input=$enval&action=1";


# ソケットの生成
socket(SOCKET, PF_INET, SOCK_STREAM, 0);


# ポート番号の取得
$port = getservbyname('http', 'tcp');

# IP アドレスとポート番号を、構造体に変換
$sock_addr = pack_sockaddr_in($port, $addr);


# サーバに接続
connect(SOCKET, $sock_addr)
or die "192.168.1.10のポート$portに接続できません。\n";


# ファイルハンドル SOCKET をバッファリングしない
select(SOCKET); $| = 1; select(STDOUT);


# WWWサーバにHTTPリクエストを送る
print SOCKET "GET $url$prm HTTP/1.0\r\n\r\n";

close(SOCKET);


sub urlEncode{
# URLエンコードする

my $value = shift;
$value =~s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
$value =~s/\s/+/g;
return $value;
}


サンプルは標準入力を

リクエストパラメタとして

特定のWebサーバに

HTTPでリクエストを送信しています。














cronの設定をしてみます。


【前提】 

・RedhatEnterpriseES4

・cronデーモンが起動している事


※起動していない場合は、

/etc/rc.d/init.d/crond start

で起動します。



① #crontab -e   ・・・ cron設定のviが立ち上がる



② 立ち上がったviで以下を設定。


  53 20 * * * /usr/bin/php /etc/crontest/crontest.php

  これの意味は、

  毎日20:53に/etc/crontest/crontest.phpを起動しますよ、

  という感じになります。


  ※phpにパスを通す事をお忘れなく(環境により異なります)。



③ /etc/crontest/crontest.phpに実行権限を付与


  #chmod 755 /etc/crontest/crontest.php



これでOK。



※ cronの起動ログは/var/log/cronになります。

※ crontab -e で現在の設定内容が確認できます。






前提:apache2.x(ソースからコンパイル)



要件:存在しないドキュメント(HTMLやCGI等)にリクエストがあった場合に、

   任意のページに遷移させる。



① httpd.confの設定を変更します。


  AccessFileName .htaccess


  # AllowOverride controls what directives may be placed in .htaccess files.
  # It can be "All", "None", or any combination of the keywords:
  # Options FileInfo AuthConfig Limit Indexes
  #

  AllowOverride All
  


② 該当ディレクトリに.htaccessというファイルを作成します。

  で、ファイルの中に


  ErrorDocument 404 http://www.xxxxx.co.jp/error.html


  と記載します。

  ※実行権限は644以上で。



③ apacheの再起動


  /usr/local/apache2/bin/apachectl restart


 

これで、当該のファイルが存在しない場合は、

http://www.xxxxx.co.jp/error.html へリクエストが転送されます。



.htaccessファイルはサブディレクトリにも配置可能です。

親ディレクトリに.htaccessが存在する場合は

サブディレクトリの内容がOverrideされて使用されます。






 マルチドメイン対応のPostfix(postfixadmin)で

 どうにも標題の件がクリアできなかった為、

 以下の環境を別に再構築しました。



 【環境】

 OS:Red Hat Enterprise Linux ES release 4 (Nahant)
 MailServer:postfix2.1.0(インストール済み)



 【前提】

 シングルドメイン

 


 【要件】

 メール受信をトリガに受信元に空メールを返却する。


 1. メール受信

 2. ソケット接続Perlを起動(WebサーバにFROMのアドレスをリクエスト)

 3. Webサーバ(今回はPHPで実装)でFROMのアドレスを受け取り、

   送信元にメール送信。


 ※本来は2の処理内で全て完結させるのが、理想なのですが、

   本件色々と理由があり、上記のような対応を取っています。


 

 【設定】



 ① /etc/postfix/transportの編集


    mail1@mugen.jp inforeply:


   を追加します。


   ※mail1ユーザが登録されている事が前提になります。



 ② /etc/postfix/master.cfの編集


  inforeply unix - n n - - pipe
  flags=BDFORhqu.> user=mail1 argv=/home/mail1/sock.pl ${sender} ${user} ${extension} ${recipient}

   を追加。


   ①のmail1で受けたメールがinforeplyとしてマッピングされて、

   /home/mail1/sock.plをキックします。


 

 ③ transport.dbの作成


   postmap /etc/postfix/transport



 ④ postfixのリロード


   /etc/rc.d/init.d/postfix reload



 ※sock.plの処理は割愛しています。 



前回はキーファイルの申請を行いましたが、

ベリサインからServerIDが送られてきたので

Webサーバに設定を行いSSL通信を可能にさせます。



前提:今回はssl.confに設定させます。



① ベリサインから受け取ったサーバIDの・・


 (-----BEGIN CERTIFICATE-----)から
 (-----END CERTIFICATE-----)までを

 コピペして適当(cert.pem)な名前を付けます。



② で、前回作成したkeyファイルと共に

  適当なディレクトリにアップさせます。


  例)


  秘密鍵ファイル /usr/local/ssl/private/key.pem    → 前回作ったやつ
  サーバID /usr/local/ssl/certs/cert.pem        → 今回貰ったやつ



③ ssl.confに・・


  SSLCertificateKeyFile /usr/local/ssl/private/key.pem
  SSLCertificateFile /usr/local/ssl/certs/cert.pem

  のような格好でキーファイルのパスを追加記述します。
④ apahceを再起動します。
   ※apachectlを使用する場合はsslstartで起動して下さい。
⑤ httpsでテストして警告が出なければOKです。
【注意】
名前ベースのバーチャルドメインで運用しているサーバの場合、
SSL通信を使用できるドメインはひとつだけです。
どうしても使用したい場合はIPベースにしましょう。

サブドメイン名でブラウザ入力した際に

同一サーバ(同一IP)上に別々のコンテンツを

閲覧できるようにする。



前提:DNS設定済み(ゾーンファイルのAレコードに当該サブドメイン設定済み)

環境:redhatES4



① httpd.confのVirtualHostディレクティブに以下の内容を設定する



<VirtualHost *:80>
ServerAdmin mugen@loop.jp

ServerName www1.mugen.jp

DocumentRoot /var/www/www.mugen.jp/effect/www1

ErrorLog /var/www/www.mugen.jp/logs/mugen.jp-error_log
CustomLog /var/www/www.mugen.jp/logs/mugen.jp-access_log common

<Directory "/var/www/www.mugen.jp/www1
Options ALL
AllowOverride ALL
Allow from all
</Directory>

</VirtualHost>



② apacheの再起動


/usr/local/apache2/bin/apachectl startssl


※各実行環境に合わせて下さい。



【解説】

ServerNameに当該サブドメインを追記します。

DocumentRootのパス指定は既存のWebサーバで指定していない箇所を。

その他、ログファイルの指定などはお好みで