CGIアクセスをHTTPSへリダイレクトする方法

CGIへのアクセスをSSL通信にしたい。

ということで、真っ先に思い浮かんだのが、CGIへのリンク全てのURLを「https://~」というフルパスの記述に変える方法。でも、これだとSSL対応していないプラットフォームでの運用に支障が出るし、何より開発時と本番時で絶対パスを変えたりして、開発コストがかかりそう。

そんなわけで、apache側の設定でリダイレクトさせるのが一番かなと思って、やってみた。

<FilesMatch "\.cgi$">
    RewriteEngine   On
    RewriteCond     %{SERVER_PORT} !^443$
    RewriteRule     ^/usr/local/apache/htdocs/(.*)$ https://www.hoge.com/$1 [L]
</FilesMatch>

SSL通信(443ポート使用)でないCGIへのアクセスを、mod_rewriteを使って、httpsへリダイレクト。.phpとか.doとか、拡張子が増えたときでも、これなら簡単に追加できそう。LocationMatch ディレクティブとか使って、もっとキレイに実現する方法もありそうだけど、とりあえずは良しとしよう。

いまだにApacheの設定は、うまくいくまで手探り。なかなか1発で思うように動いてくれた試しがない。慣れの問題なのかもしれないけど、そんなにApacheをイジることはないからなあ。

監査デーモンによる最悪のシナリオ

監視システムから、「DBサーバの/var 以下のディスク容量が残り少ないよ」というメールが届いたので見てみると、監査デーモン(audit)のログが思いっきり肥大化していた。のわー。

とりあえず、以下のページを参考に、ログ(save.*)を削除して、監査デーモンを停止してみた。監査デーモンじゃなくても、ちゃんと別経路で不正アクセスのログは取れるようにしているからね。

ペンギンさぁ~ん、遊びましょぉ~ - LauS(Linux Auditing System)のaudit
hamastaの日記 - CentOS ログイン不能

どうも RedHat ES3 の監査デーモンにはバグがあるらしく、ログがディスク容量を食い潰すとログインすらできない状況に陥ってしまうようだ。そのくせ、デフォルトで動作することになっている。だから、何も意識しないでサーバーを稼動させ続けていると、いつかサーバにログインできなくなるという最悪の結果が待っている。SSHログインはもちろん、コンソールログインすらできない(はず)。そうなったら、再起動以外に、打つ手なし。ガーン。

自宅サーバだったらログインできなくなっても再起動できるかもしれないけど、ミッションクリティカルな環境では、そんなこと言っていられない。まあ、そんなシステム運用するぐらいなら、監視デーモンに翻弄されることなんて無いだろうけど。

デフォルトで動いているデーモンは、もう一回見直した方が良いかもなあ。危ない、危ない。

Appletで半角英数字も日本語フォントにするには

JREの設定がデフォルトのまま、Appletで半角英数字と日本語の、いわゆる和欧混植をやろうとすると、英数字だけ等幅フォントになってカッコ悪い。いじめカッコ悪い。

すべて日本語フォントを使用するように変えてみようと、設定ファイルであるところの、fontconfig.properties を適当にイジってみたら上手くいったみたい。おお。

sequence.allfonts=japanese-iso10646,latin-1
sequence.allfonts.UTF-8.ja.JP=japanese-iso10646,latin-1

こんな感じで、latin-1 より先に日本語フォントが使われるように、検索順序を指定してやれば良いっぽい。よく分かってないけど。完全に自分メモです、これは。

ただでさえ慣れないJavaのフォント設定を、さらにフォント周辺が分かりづらいLinuxで行っていると、だんだん頭がおかしくなってくる気がする。ううう。

Linuxで使える日本語フォントはグダグダなのか

キレイなお姉さんは好きですか?
キレイなフォントは好きですか?

愚問すぎる。

それなのに、テキストを描画するJavaアプリケーションをLinuxサーバーで実行したら、文字が見るに耐えない汚さで出てきた。なんじゃこりゃあ!

アンチエイリアスをオフにして、デフォルトの東風フォントで描画すると、本当にミミズが這ったような字が出てくる。使い物にならない。ならば、評判の高いらしいM+IPAにしたらどうだろうか。しかし、これもイマイチ。

そもそも、MSゴシックやOsakaに匹敵するような、無難な日本語ビットマップフォントというヤツが、Linuxには無いのか。分かったよ、それならアンチエイリアスをオンにしたらキレイになるんだろう…と思ったのに、やっぱり微妙な感じ。視認性が低い。

フォントについては、サーバー側でごにょごにょした結果を返すのではなくて、クライアント側のリソースを使えるようにした方が賢明かもしれない。ああ、その点ではFlashって便利だよなあ、としみじみ思う冬の夜。

さて、どうしたもんかな。

vi で記号名のファイルを開くには

「-hoge」とか「+」とかいうファイル名をviで開こうとしても、うまく開けない。そんなときは、これ。

$ vi -- -hoge

「--」を付けることで、それ以降の文字列をオプションとして認識しなくなる。これで記号始まりの名前を持つファイルも、viでちゃんと表示することができるようになる。

しかし、記号から始まるファイル名を付けるセンスがわからん。そういうファイルを開くと、大抵が一時的なメモやログだったりする。妙な名前でサーバー上にゴミは溜めて欲しくないなあ。それとも何かしらの操作ミスの結果なんだろうか…。謎は深まる。

タブ区切りのソート

jmapのヒストグラムは、初めメモリ使用量の降順でプリントされる。このままだと、「残留オブジェクトの多いクラスはどれだ?」という時に困るので、オブジェクト数の降順にチャチャッとソートする方法メモ。

続きを読む "タブ区切りのソート"

ポートを使用しているサービスを特定する

smtpとかimapとか特定のポートを使用しているプロセスを表示する方法は無いもんかと思って探したら、便利なのがありましたよ。しっかりプロセスIDまで示してくれる。

# lsof -i:25
# lsof -c smtp

psを横目にnetstatを眺め、それでも悶々とした青春の日々よ、さようなら。今後はこいつを徹底的かつスマートに使って、大人の階段を上ります。(意味不明)

FTP時刻が9時間ずれるとか

FTPクライアントでサーバに接続したら、日付のところが、実際の更新日時より9時間遅れて表示されるわけですよ。SSHでログインする場合は、問題ナッシング。

まあ、ぴったり9時間と言ったら、いつものアレなわけです。何がグリニッジだ。ファイルのくせに、イギリス気取りかよ。ここは日本だよ、東京だよ、新宿区だよ!

どうもFTPデーモン側で、ちゃんと設定しないといけないらしい。
(以下、vsftpd の場合。)

# vsftpd.conf
use_localtime = YES

これが NO になっていたり、そもそも use_localtime の指定が無いと、標準時で表示されてしまう。デフォルトが逆じゃないのかと思うんだけど…。

HOSTSファイルは何処だ

バーチャルホストの設定をローカルで確認するためには、クライアント機で名前解決するための仕組みが無いといけない。グローバルで見えるサーバーならば、DNSが同じことをしてくれるんだけどね。

Windowsマシンの場合、その仕組みを提供してくれるのが、HOSTSファイルだ。HOSTSファイルに、IPとホスト名のマッピングを書くことで、名前解決を行ってくれるというわけ。まあ、大体 linux と一緒です。

が、しかし。

HOSTSファイルが見つからないんである。その昔、「C:\Windows」あたりにあったのを見た気がしたんだけど、見つからない。どうも Windows XP からは配置場所が変わったらしい。時間を返せ。

C:\WINDOWS\SYSTEM32\DRIVERS\ETC

こんなところにあるなんて、気付かないだろう。やられた。あと拡張子が無いからメモ帳で開けないのもイライラする。また Vista になったら、別のところに行ってしまったりするんだろうか。面倒くさい。

NFSの設定

複数構成のアプリケーションサーバーでサービスを運用する場合、ソースは一元管理にすると、保守がラクチンになる。そこで使うのが、NFS

が、しかし。

NFSの設定なんて年に一度もしないので、いつも方法を忘れて、あーだこーだと時間を無為にしている気がする。なんだかなあ。ということで、以下、簡易手順メモ。

続きを読む "NFSの設定"

ディレクトリ名だけを取得する

カレントディレクトリへのパスではなくて、その名前だけを取得する方法が思い出せぬ。

文字列操作で強引に攻めても良いんだけど、きっとスマートな方法があるはず。そう思い始めてから1時間あまり。2年前の自分メモを見つけて、ようやく思い出した。そうそう、これこれ。

${PWD##*/}

これで、カレントディレクトリのパスについて、その先頭から「*/」パターンの最長マッチ部分が取り除かれ、無事ディレクトリ名だけを取得できる。おー、すげー、暗号かコレは。

続きを読む "ディレクトリ名だけを取得する"

bashプロンプトのカスタマイズ

bashのプロンプト表示をカスタマイズする場合は、シェル変数「PS1」をいじくる。

PS1="[\u@\h \W] \$"

これだけで、「街でよく見るbashプロンプト第1位」に輝くほど見慣れたプロンプトのできあがり。まあ、街でbashなんて見たことありませんが。

変数説明
\uカレントユーザー名
\hホスト名(最初のドットまで)
\Hホスト名(全部)
\w現在のディレクトリへのパス
\W現在のディレクトリ名
\d「Fri May 26」みたいな形式の日付
\thh:MM:ss 形式の時刻(24時間)
\Thh:MM:ss 形式の時刻(12時間)
\n改行
\!コマンドヒストリー番号
\#コマンド番号(ログイン後のコマンド実行回数)
\$UIDが 0 ならば「#」、そうでなければ「$」を表示

こんな感じで色々とプロンプトに埋め込むことができるみたい。あんまりやりすぎると使いにくくなりそうだけど、時刻関係は、実行時間の履歴に使えそうでちょっと便利かも。

ログイン時シェルの変更

FreeBSD は標準シェルが csh なのが気に入りません。

普段 Linux を触っているから、どうしても bash が恋しくなる。「今頃、bash のやつ、どうしてるかな…」なんて星空を見ながら思ったりしないけど、bash が恋しい。そんなわけで、シェルを bash に変更することにした。

あ、bash はインストール済みということで、話が進みます。

続きを読む "ログイン時シェルの変更"

カーネルのバージョンを調べるには

Linux OSのカーネル・バージョンを調べる方法が、いつまで経っても覚えられないので、もうあきらめることにした。

「半年に一度、使うか使わないかの知識なんて、覚えていてもムダだよ。さあ、僕と一緒に踊りませんか?」ということで、ここにメモしておく。とりあえず、左記のセリフの真意は、書いている本人も理解できないので、そっとしておいてください。僕は踊りません。

# cat /proc/version

さらに、もろもろのカーネル情報を知りたい場合は、次のコマンドで、ブート時のメッセージを参照することができる。

# dmesg 

しかし、こうしてエントリを書くと覚えてしまいそうな気がする。気のせいだと思うけど。

mod_rewrite モジュールを使ってみる

Apache へのアクセスをフックして、かなり強力な操作ができる mod_rewrite モジュール。これまでシコシコとアプリケーション側で対応していたものが、サクっとWebサーバが解決してくれる可能性大ですよ、これ。

豊富な機能をざっとながめて思いつくサービスとしては、httpアクセスのSSLへのリダイレクト、サブドメイン管理、リファラ判定などによるコメントスパム対策、ブラウザ判定や時刻によるリダイレクト。ブラウザ判定をうまく使えば、例えばフルフラッシュサイトで、検索エンジンのクローラにだけ別HTMLページを見せてSEO対策することもできそう。(そういう小賢しい対応は好きじゃないけど)

以下、大まかな機能と使い方のメモ。

続きを読む "mod_rewrite モジュールを使ってみる"