• https://developers.google.com/speed/pagespeed/mod?hl=ja

mod_pagespeedを導入してみました。特に設定等していないので、たったこれだけ。(※debian amd64の場合)

cd /tmp
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-beta_current_amd64.deb
dpkg -i mod-pagespeed-beta_current_amd64.deb
service apache2 restart

トップページで比較したところ0.3秒くらいは早くなってる感じです。twitterのウィジェットの表示が遅かったりするのでよくわからないんですけどね…。どこかうまく動かなくなっているところがあるかな?

mod_rewriteを今までも使っていたのですが、ちょっと複雑なことをやろうとおもって調べてみたら、これすごいですね!色々なことに使えそうです。

[debian] apache2をssl化する

前からやらなくちゃと思っていたけれどもやっていなかったサイトのSSL化。自分はいろいろとわかった上でやってるからいいけど、嫁にはSSLで管理させようと思い導入。

ぐぐったらここがわかりやすそうだったので参考に。

はまったところ and 疑問点(まだ未解決)

  • 生成された証明書がdemoCA/cacert.crtではなくてdemoCA/cacert.pemなんだけどこれでいいのか?
  • apacheを起動すると”Address already in use: make_sock: could not bind to address [::]:443″というエラーが。443はだれもつかんでないはずだし・・・おかしい。
    • 一度443ではなくて4443番ポートに変えてみたら確かに443が使われていた
    • 一度sites-enableから今回追加した設定を抜いてみたら、それでもまだ443が使われていた。どうやら以前設定したごみがある模様・・・。
    • 検索したところ/etc/apache2/ports.confに記述があった。これは何者だ?
    • AquBlog: DebianでApache2 − ポート設定
    • うーん。Listen 80と書いてあっても80番はバッティングしていないし書かれているのが正しいのだろうと思う。でも、たしかにバッティングしちゃうし、ports.confからListen443を消せば443での待ちうけは無くなる・・・。どういうことだ?
    • Listenの書き方とipv4, v6のあたりで色々と問題がある模様。とりあえずポートの待ちうけはできるようになったけど、結局動かない。
    • 問題の切り分けの必要あり・・・。(T-T
  • なんだか色々おかしいので、もう一度Webを検索。今度は以下を参考に
  • 試験管のなかのコード :: Debian Etch で Apache2.2 + SSL
    • crt等は作れたと思うのだけれども、やはり443が使われているというエラーがでる。
    • とりあえずports.conf側でListen443をコメントアウトして先に進める
  • ローカルでの確認作業時に以下のエラーが出てしまう。

/etc/apache2# openssl s_client -connect localhost:https
CONNECTED(00000003)
8585:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:583:

  • どうやら443番ポートでHTTPが動いてしまっていた模様。
  • Virtual Hostタグの部分をIpアドレス:443に変更したらうまくいった。
  • 一応動いたけど、firefoxでは接続できない。これは仕様かな。IEなら警告は出るけど接続できるし
    image
  • IE6はHTTPS時に証明書の種類のチェックしない? (やまかわのログ) これかな?とも思うけど、きちんとopenssl.cnfのnsCertTypeはserverになってます・・・。
  • 日記/2006 – りょうのぺえじ ここに書かれているように
  • nsCertType                    = server,client

    という設定も試してみましたが、残念。結果変わらず。

 まぁ、とりあえずパスワード自体の暗号化はできるようになったので、まぁ、今日のところはこれで良しとします。もう深夜3時15分だし・・・。

9件のコメント

[windows] ApacheでのCGIを動作させるための手順

会社の検証機でWindowsにXoopsをインストールしようとしていてPHPがCGIとして動作せず、今までこのあたりをきちんと理解していなかったことを痛感。自分なりにまとめてみました。間違いが多く含まれている可能性がありますので、ご注意ください。

AddHandler + Option ExecCGIで実行させる方法

この方法が結構使われているようです。これは、まず、AddHandlerにてCGIとして扱う拡張子を指定し、CGIを実行する権限自体はOptionディレクティブにて許可する方法です。

また、このパターンにAliasScrptディレクティブも組み合わせて、CGIは/cgi-bin/ディレクトリ内においておき、そこで実行させるような方法も一般的なようです。

このパターンではshebang lineというものが重要な役割をはたします。これはスクリプトの一行目に記述されている「#!/usr/local/bin/perl」とかそういった感じのものです。これがきちんと設定されていないと、以下のようなエラーが記録されます。(今回これで苦しんだわけです。)

[Fri Nov 25 15:14:20 2005] [error] [client 172.16.1.76] C:/Program Files/Apache Group/Apache2/htdocs/index.php is not executable; ensure interpreted scripts have "#!" first line
[Fri Nov 25 15:14:20 2005] [error] [client 172.16.1.76] (9)Bad file descriptor: don't know how to spawn child process: C:/Program Files/Apache Group/Apache2/htdocs/index.php

Addhandlerでは「CGIだよ」と指定しているだけなので、具体的にPerlなのかRubyなのか・・・といったところまではわかりません。ですので、1行目にshebang lineというものが必要だ・・・というわけです。

ただし、Windows環境となるとちょっと事情が変わってきます。Apache2系ではもう設定できず、必ずshebang lineが有効になるようですが、Apache1系ではshebang lineを有効にするか、無効にするかの選択が出来るそうです。ではshebang lineを無効にした際にはどのようにして実行すべき環境を判別するのか?・・・そこで、Windowsのファイルの関連付けを使い、関連付けにしたがって動作環境を選択させることが出来るそうです。ある意味すごいアイディアですね。

さて、これで終わりではなく、さらにWindowsとUNIX環境の混在・・・となると困ったことがおきます。UNIX環境では「#!/usr/local/bin/perl」なのに、Windows環境では「#!c:\perl\perl.exe」だったりするわけです。
これを解消するにはいくつか方法があるようですが「毎回書き換える」、「Windows側にて上記のshebang lineを無効にする設定を行う」というものと、もっとすごいなとおもったのは「無理やりパスをあわせてしまう」というテクニックもあるそうです。

具体的には「c:\usr\local\bin\perl」を作ってしまえばOKということらしいです。拡張子も取ってしまうわけで、Windows上のファイルとしてはかなりいレギュラーな形ですが、これでもOKなのだそうです。

でも、ここで困ってしまうのが、「WindowsでApache2を使っている時に、提供されているスクリプトが全てshebang lineが付いていないものだった場合」です。これで今日は困りました・・・・。で、どうしたら大丈夫だったかというと、以下の方法です。

AddType + ActionでCGIを実行させる方法

一方Addhandlerを使わずに、AddTypeとActionディレクティブにてCGIを動作させることも出来るようです(Apache2だけ??)

こちらの場合には意味合いとしてストレートです。

以下のような感じに書けました(PHPの場合)。

AddType application/x-httpd-php .php .phtml
Action application/x-httpd-php "/php/php.exe"
ScriptAlias /php/ "C:/php/"

きちんと、拡張子ごとにどのようなファイルなのかを指定し、実行ファイルも指し示しているわけですね。

これで無事shebang lineが書かれていないスクリプトでも実行させることが出来ました(^^

さて、この文章には間違いが多数含まれています(予想)。是非指摘していただければと思います。また、このあたりをきちんとまとめて解説している文書などあれば教えてください!私は見つけられませんでした!(涙