なでしこ&葵2まとめに戻る
日本語プログラミング「なでしこ」でWebサイトをコントロールしたい。そんなときに使うのが、CGIです。ここでは、Windowsに標準でついているWebサーバー「IIS」を使って、なでしこCGIを実現します。
手元のWindowsマシンと、レンタルサーバーでやってみました。
Windows XP Professsional SP3とIIS5.1をベースに動作確認しています。
Webサーバーは、広くネットワーク(含むインターネット)に公開されるため、セキュリティ設定が不可欠です。ここでは、いくつかのポイントを紹介します。
ただし、これは新たにWebサーバーを用意する場合の話。既存のパソコンを流用して、実験用とか社内用に設置するだけ(つまり、外部のインターネットから接続させない)なら、あまり考えなくていいかも。社外向けのWebサーバならレンタルVPSのほうがずっと簡単だと思う。
さて、Webサーバーとなるマシンは、FATまたはFAT32 ファイル システムではなく、NTFS ファイル システムを使用することが奨励されている。NTFS を使用すると、Web サーバーのファイルやディレクトリへのアクセスを制限できる。特定のユーザーやグループに許可する、サーバーのファイルやディレクトリへのアクセス レベルを構成することもできる。(参照)
さらに、ファイルやフォルダに対するアクセス許可を細かく設定できるよう、次のように設定を変更する。
これで、ファイルやフォルダを右クリック->「プロパティ」を選択したときに、「セキュリティ」タブが表示されるようになる。この「セキュリティ」タブで、ユーザーごとのアクセス権限を細かく設定する。
では、必要なツール類の導入と設定を行います。
「Content-Type: text/html <title>なでしこCGIの実験</title> なでしこCGIで動いています。<br> なでしこのバージョンは{ナデシコバージョン}です。」を表示。
ApacheのCGIスクリプトと違い、冒頭に「#!C:\(xamppのインストール先)\cnako\cnako.exe」は不要らしい。
レンタルサーバーとかWebホスティングサービスは、Linux+Apacheを使っている場合が多い。なので、IISの利用は、慣れていない人もいるかもしれない(私も)。ここでは、IISの設定で気づいたポイントを整理します。
スクリプトで、ファイルを書き込んだりフォルダを作成/削除する場合
FastCGIを入れると、スクリプトの実行が早くなったりするらしい。WPIが入れてあると、簡単にインストールしてくれる。もしかすると、デフォルトで入るのか?
WindowsVPSを借りて、そこのWindowsServer2008+IIS7.0で、なでしこCGIを実現してみました。
いろいろ人柱になって、やってみました。ローカルPCに、なでしこをインストールしておいて、そちらで確認しながらやると確実だと思います。
ローカルPCのインストール済みなでしこから、以下のファイル&フォルダをコピー
「Content-Type: text/html <title>なでしこCGIの実験</title> なでしこCGIで動いています。<br> なでしこのバージョンは{ナデシコバージョン}です。」を表示。
ApacheのCGIスクリプトと違い、冒頭に「#!C:\(xamppのインストール先)\cnako\cnako.exe」は不要らしい。
http://(サーバーのIPアドレス)/test.nako
ファイル書き込みやフォルダ作成をするスクリプトの場合、次のようにして、アクセス許可を設定しておいたほうがよい場合がある。対象バージョンは、WindowsServer2008+IIS7あたり。
以下、動作テストコード
#2010-11-22 Yutaka Kachi #アクセスした日時を記録 #ファイルアクセスとアクセス許可の動作確認用 #同一フォルダにテキストファイル「log.txt」を配置すること !『cgi.nako』を取り込む ログファイル=「{母艦パス}log.txt」 本文にログファイルを開く。 最新ログ=「{今日}:{今}」 「Content-Type: text/html <title>なでしこアクセスログ</title> 前回アクセス:{本文}<br> 最新アクセス:{最新ログ}」を表示。 最新ログをログファイルに書き込み。 ●書き込み(メッセージを、ファイルパスに) 本文=メッセージ&改行 ファイルパスをファイルロック もし、(それ=1)ならば、 本文をファイルパスに保存 ファイルパスをファイルロック解除
ちなみに、LinuxとかUnixだとアクセス制御と呼ばれる機能は、Windowsではアクセス許可と呼んでいる。
以下は、相互に矛盾しているような気がする。