カテゴリー
Windows

本家のお世話-#48。(Apache 2.4.3,PHP5.4.6へアップデート)

投稿アップデート情報  追記(8/28)  追記2(8/28)  追記3(2013/2/14)

 Lounge版のApache 2.4.3とWin用のPHP5.4.6が出たので,アップデート。ついでに,MySQLも5.5.27にした。conf,iniの設定は,「本家のお世話-#28。」と同じ。MySQLの導入については,「本家のお世話-#16。」を参照。

 Lounge版のApache 2.4.3は,いつも通りVC9版を落とす。httpd-2.4.3-win32-VC9.zip(19 Aug),php handlerも5.4.6用が出ているので,新たにphp5apache2_4.dll-php-5.4-win32.zipを落として,中の5.4.6用をPHPのフォルダ内にコピーする。httpd.confについては,以下の2点が変わっていた。
————————————————————————————————————————————————
 ひとつは,
     #Scriptsock logs/cgisock  —>>  #Scriptsock cgisock
うちの場合は,もともとコメントアウトのままのところだから,関係なし。

 もうひとつは,最後尾に以下の8行が追加されたこと。
     # Deal with user agents that deliberately violate open standards
     #
     <IfModule setenvif_module>
     BrowserMatch “MSIE 10.0;” bad_DNT
     </IfModule>
     <IfModule headers_module>
     RequestHeader unset DNT env=bad_DNT
     </IfModule>
 これは,MSIE 10.0のようにDNT(Do Not Track)がデフォルトでセットされている場合,それをアンセットするということなのか?「オープンスタンダードに故意に違反するユーザエージェントに対処するため]と書いてあるんだが。うーん,よくわからん。よくわからんというのが,その「どっちがオープンスタンダードなのよ」という意味なんだが。その辺は,筆者の立場によって違うとかか?
 出たばかりのせいか,あまり情報もない。その辺に関して何か見たら,追記でも書くことにしよう。
————————————————————————————————————————————————

 PHPのおニューもいつも通り,VC9のTS版を落としてくる。PHP5.4.6(Aug-15 22:48:37UTC)

 php.ini-productionで変わっていたのは,
     ;mail.log =
のところに以下の2行が追加されたこと。うちの場合,これも使っていないところなので,無関係。
     ; Log mail to syslog (Event Log on NT, not valid in Windows 95).
     ;mail.log = syslog

追記(8/28):
 DNT(Do Not Track)がらみの追記。ということで,MSのIE10以外の立場が,オープンスタンダードという扱いらしいが,天下のMSでも束になった広告業界にはかなわなかったんダネと言っていいのかナ。
 ところで,ユーザが明示的にDNTをOnにしたIE10の扱いはどうなるのだろう。そのあたりがまだいまひとつつかめていない。

追記2(8/28):
 「Roy T. Fielding DNT:1」で検索してみると,「Re: action-231, issue-153 requirements on other software that sets DNT headers」がトップに出てきた。ということは,ユーザが明示的にDNTをOn(=DNT:1)の場合は別問題で対処されるということか。HTTPの含んでいる情報についてよく理解していないから,理解の外だな。orz

追記3(2013/2/14):
 php5apache2_4.dll でググって来られる方がおられるようなので,追記。 PHP5.4.10 から php5apache2_4.dll も PHP のオフィシャルバイナリに同梱されるようになりました。

カテゴリー
Windows

覚え書-#9。

投稿アップデート情報  追記(4/28)  追記2(5/2)

 前稿のように PHP 5.4.1 にしてしまったので,事後報告になるが,ここ4・5日あたふたしていたことを書いておく。

 Apache 2.2.x までは
     [notice] Parent: child process exited with status 3221225477 — Restarting.
だった error_log のメッセージが Apache 2.4.x では
     AH00428: Parent: child process exited with status 3221225477 — Restarting.
になったので, AH00428 でググッて
     Apache randomly stop responding [Solved]を見つけた。そこで,4/23 @18:13,
     AcceptFilter http none   すでに使用中
     EnableSendfile Off   出力ファイルのメモリバッファをapacheからWinに移行。
     EnableMMAP off   出力ファイルのメモリバッファをapacheからWinに移行。
conf に2行を追加してみたが,クラッシュがいっそう激しくなり,@22:28 に仕方なく元に戻した。その後,さらに5.4.0RC8を使っていた。こっちのが,少しましだったので。

 やはりページの処理に無理のかかっているときに落ちる気がするのだが,ページが増えてきたせいもあるだろうか。今のところキャッシュの考慮はまったくやっていないのだが,したら違うだろうか。

 ググッていたら,http://mikenekoworks.com/?p=1512 に
     PHP5.4がセグメンテーションフォルトしまくるんでAPCを3.1.10に更新したら幸せになった。
というのがあった。もちろんLINUXの話だろうし,今回のとは無関係かもしれないが,もしかして APCとかmemcacheとか使ってやったら,私も幸せになれるかしらん。

 まぁ,落ち着いたら,APCとかmemcache の導入も考えてみることにしよう。

追記(4/28):
 以下の構成で安定したよー,ぱちぱち。

  • WindowsXP HE SP3 (x86) 無理やりSP3をあててる
  • Apache 2.4.2 (VC9) (x86) Apache Loungeから
  • MySQL 5.5.23 (x86)
  • ActivePerl 5.14.2.1402 (x86)
  • PHP 5.4.1 (Thread Safe) (VC9) (x86)

追記2(5/2):
 今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。

カテゴリー
Windows

記事にしたほうがよかったかも。(で,Apache 2.4.2)

投稿アップデート情報  追記(4/28)  追記2(5/2)

 今朝,りりさんからコメントをもらって,書いた返事がバカ長くなってしまって,表題のように思った次第。

 Apache Lounge でバージョン 2.4.2 が出たときにステイブル バイナリだということで導入したけど,ちょっと早まったかなと思っていた。Bug #61577の件もあるし,「Apache、セキュリティを修正した最新安定版「Apache HTTP Server 2.4.2」リリース」なんていうのもあるし。

 上のリンクでの 2.4.2 は org での話。この間から,Lounge と org では末尾が一つずれていた。ここで触れられている「Windows版では「AcceptFilter None」の実装が変更されたため、mod_sslとの非互換性が発生している」という件に関しては,Apache 2.4.2 Win32 & Win64 availableの「SSL issue.」の書き込みと,SSL connection error… AcceptFilterを見て,大丈夫だろうと踏んだわけ。実際,その辺に関しては,
     <IfModule mpm_winnt_module>
       AcceptFilter http none
     </IfModule>
を入れて以来,あまり問題なく動いているように見える。

 それで,今日そんなこんなで Lounge の zip を見てたら本家のお世話-#28。で書いたのとリリース日が違うことに気づいた(VC10版も,VC9版も,20 Apr ’12 になっている。UTCで,です。)。
 さっそく落として比べてみたら,ファイルも変わっている。これで, org との枝番のずれは解消されたのかなと思ったが,Changelog Apache 2.4を見る限り,変わったのは,OpenSSL from 1.0.1 to 1.0.1a だけなので,そういうわけでもないみたい。しかし,困るよ。名前は変わらず,こっそりファイルの実体だけが変わってちゃ。

 今日も,crash 4回なので,ちょっと,20日版に差し替えてみます。あまり意味はなさそうだけど。
 org 版 2.4.2 の Lounge版というわけではないみたいだし。(@17:44 入替完了)

追記(4/28):
 結局,上記のApache の差し替えは, crash + restart には無関係だった。
 しかし,PHP 5.4.1 がリリースされたので差し替えたら,その後crashがなくなった。今までは,1日に少ない日でも4回は crash + restart が起きていたから,もう大丈夫ってことだろう。やはり,PHPのバイナリのほうの問題だったみたいだねえ。
 現在のサーバの構成は,以下のとおり。

  • WindowsXP HE SP3 (x86) 無理やりSP3をあててる
  • Apache 2.4.2 (VC9) (x86) Apache Loungeから
  • MySQL 5.5.23 (x86)
  • ActivePerl 5.14.2.1402 (x86)
  • PHP 5.4.1 (Thread Safe) (VC9) (x86)

追記2(5/2):
 今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。

カテゴリー
Windows

本家のお世話-#28。(Apache2.4.2へアップグレード-#1)

投稿アップデート情報  追記3(4/28)  追記4(5/2)  追記5(11/10)  追記6(2013/1/3)

 Apache Loungeで,Apache2.4.x系ステイブルが出た(VC10版は,6 Apr ’12 だけど,VC9版は,7 Apr ’12 になっている。UTCで,です。)ので,早速アップグレードに取り組んでみることにした。ただし,さすがに稼働中のサーバ上では危なすぎるので,ひとまず,ローカルに仮構築。

 完了後は,以下のようになる。

  • WindowsXP Pro SP3(x86)
  • Apache2.4
  • MySQL5.5
  • ActivePerl5
  • PHP5.4

 ≪注意≫ ローカルの構築なので,アップロード作業がすっぽり抜けている。ここを参考に実際のサーバをリモート場所に構築しようと思う方は,ファイルの書き換え後の更新アップロードを忘れないようにしてください。

 さて,Apache2.4.x系のインストールから。

  1. httpd-2.4.2-win32.zip と httpd-2.4.2-win32-VC9.zip のどっちを使うかなと思ったが,後者はMicrosoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)をインストールしなくていいようなので,こちらを使うことにする。httpd-2.4.2-win32-VC9.zipをダウンロード。
  2. httpd-2.4.2-win32-VC9.zip を展開する。展開ファイル中のReadMe.txtに,「Upgrading to 2.4 from 2.2Overview of new features in Apache HTTP Server 2.4を参照せよ」とあったので,一応見に行った。
    Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)のインストールは必須であるが,今回の環境においては既に済んでいる。
  3. httpd.conf のカスタマイズから行う。
    • ServerRoot は,Program Files下に変更せず,デフォルトのまま(つまり,c:/Apache24)。自鯖は,WindowsXPなので問題ないが,Windows7あたりでは,UAC(User Account Control)の関係でいろいろと不具合を聞くので,この際今後のことを考えて,デフォルトのままの設定で行こうと思う。
    • ServerAdmin <管理者のメールアドレス> に変更。
    • ServerName <DNS name>:80
    • カスタマイズには関係ないが,以下のところに注意。Apacheのインストールが初めてなら何も思わないだろうが,ここはRun-Time Configuration の変更に伴って書き方の変わったところのひとつだ。ただし,旧の書き方をしている場合でもmod_access_compatによって,下位互換が実現されるらしい。モジュールのところを見ると,
      LoadModule access_compat_module modules/mod_access_compat.so
      はデフォルトで有効になっており,モジュール群のうち一番初めにロードされるようになっている。

      新しい書き方は,以下の通り。
           <Directory />
             AllowOverride none
             Require all denied
           </Directory>

      Apache2.2では,以下のようになっていた。
           <Directory />
             Options FollowSymLinks
             AllowOverride None
             Order deny,allow
             Deny from all
           </Directory>

    • DocumentRoot “c:/Apache24/htdocs”  —>>  DocumentRoot “G:/WEB/example”
      <Directory “c:/Apache24/htdocs”>  —>>  <Directory “G:/WEB/example”>
    • Options Indexes FollowSymLinks  —>>  Options FollowSymLinks
    • AllowOverride None  —>>  AllowOverride directive-type
      directive-typeに使えるキーワードについては,AllowOverride ディレクティブを参照のこと。
    • 自鯖の場合は,rotatelogsを使って,ログを取っているので,
      ErrorLog “logs/error.log”  —>>  ErrorLog “|bin/rotatelogs -l -f logs/error.%Y-%m-%d 86400”
      アクセスログに関しては,AWStatsの関係上commonではなくcombinedを使うので,
      CustomLog “logs/access.log” common  —>>  コメントアウト
      CustomLog “logs/access.log” combined  —>>  アンコメント
      し,さらに,
      CustomLog “logs/access.log” combined  —>>  CustomLog “|bin/rotatelogs -l -f logs/access.%Y.%m.%d 86400” combined env=!no_log
      no_logについては,「本家のお世話-#4。」参照。

      ちょっと下に書いてあるが,テストランの結果,|bin/rotatelog は |bin/rotatelog.exe でないと動かないことが判明。使う場合は必ず拡張子をつけてください。

    • これも,カスタマイズとは関係ないが,
      # Configure mod_proxy_html to understand HTML4/XHTML1
      <IfModule proxy_html_module>
      Include conf/extra/proxy-html.conf
      </IfModule>
      が追加されている。
  4. ディレクトリ Apache24 を,そっくり C:直下に移動する。
  5. コマンドプロンプトを起動し,Apache24bin に移動して,テストラン。httpd.exe[Enter]
    (OS 2)指定されたファイルが見つかりません。 : AH00089: Couldn’t start ErrorLog p
    rocess ‘bin/rotatelogs /var/logs/errorlog.%Y-%m-%d-%H_%M_%S 5M’.
    AH00015: Unable to open logs
    というエラーが出る。パイプがうまく働いていないのかと思って,
    ErrorLog “C:/Apache24/bin/rotatelogs -l -f C:/Apache24/logs/error.%Y-%m-%d 86400”
    にしてみた。今度は,
    AppName: httpd.exe AppVer: 2.4.2.0 ModName: msvcr90.dll
    ModVer: 9.0.30729.6161 Offset: 0003bdbc
    が出る。いろいろ試してみて,正解はなんと rotatelogs.exe だった。つまり,2.2.22 までは拡張子なしで通っていたのだが,2.4.2 では .exe まで書かないとダメってこと。
    つまり,  ErrorLog “|bin/rotatelogs.exe -l -f logs/error.%Y-%m-%d 86400″  でO.K.
    えーーーーーーーーっ。こんなにハマったのに!!(号泣)
  6. 気を取り直して,サービスとして登録。
    httpd.exe -k install
    使い勝手のために,ApacheMonitor.exe のショートカットを作り,スタートアップフォルダに入れておく。
  7. ドキュメントルートに,Apache24/htdocs にある index.html をコピーし,ブラウザから,http://localhost/ を確認,無事「It works!」が表示された。

 MySQL5.5 をインストールする。

  1. MySQL Community Server から,mysql-5.5.22-win32.msi をダウンロード。
    えーっと,今気が付いたんだが,「JavaScript 有効」にしておくと「» No thanks, just take me to the downloads!」というリンクが表示され,これをクリックすると,各ミラーがわかるって形なのねぇー。いつものPCは,「JavaScript 無効」なので知らなんだ。
  2. インストール方法は,mysql-5.5.18-win32.msi と全く同じ。(MySQLの再導入を参照)

 次に,ActivePerl 5 をインストールする。

  1. ActivePerl-5.14.2.1402-MSWin32-x86-295342.msiをダウンロードする。
    途中に,チェックボックスがあるがすべてデフォルトのままでインストール。
  2. コマンドラインから, perl.exe -v[Enter]で,バージョンなどが表示されれば,インストール成功。pathも通っている。
  3. Apache の httpd.conf を開き,
    ScriptAlias /cgi-bin/ “c:/Apache24/cgi-bin/”  —>>  ScriptAlias /cgi-bin/ “G:/WEB/cgi-bin/”
    <Directory “c:/Apache24/cgi-bin”>  —>>  <Directory “G:/WEB/cgi-bin”>
    この後のところも,Run-Time Configuration の変更に伴い書き方が変わっている。
    cgi-bin 以外のディレクトリで CGI スクリプトを使う気がある場合は, #AddHandler cgi-script .cgi をアンコメントし,場合によっては .pl を追加するなどする必要がある。
    自鯖では,そのつもりがないのでデフォルトのまま。
  4. G:/WEB/cgi-bin に,Apache24/cgi-bin にある printenv.pl をコピーし,テキストエディタで1行目を perl.exe の場所に書き換える。
    #!D:/programs/perl/bin/perl.exe  —>>  #!c:/perl/bin/perl.exe
  5. Apacheを再起動後,ブラウザから,http://localhost/cgi-bin/printenv.pl を確認。環境が表示されれば,成功。 printenv.pl は削除しておく。

 さて,PHP5.4のインストールに入る。Apache2.4.xとの連携はうまくいくだろうか。ここのブログを読んでくれてる方はご存知の通り,アップデートに失敗したまま,放置プレイである。もっとも,うまく動いてくれるかどうかのチェックは,仮構築では無理な気がする。本鯖の場合も,短時間の稼働ではエラーは出なかったし。

  1. http://windows.php.net/ からphp-5.4.0-Win32-VC9-x86.zipをダウンロードし,ファイルを展開する。
  2. 展開ファイル内の php.ini-production を php.ini にリネームし,下表のようにカスタマイズ。
      デフォルト カスタム
    1 ;default_charset = "UTF-8" default_charset = "UTF-8"
    2 ; extension_dir = "ext" extension_dir = "(ドライブ文字):PHPext"
    3 allow_url_fopen = On allow_url_fopen = Off
    4 ;extension=php_curl.dll extension=php_curl.dll
    5 ;extension=php_gd2.dll extension=php_gd2.dll
    6 ;extension=php_mbstring.dll extension=php_mbstring.dll
    7 ;extension=php_mysql.dll extension=php_mysql.dll
    8 ;extension=php_mysqli.dll extension=php_mysqli.dll
    9 ;extension=php_openssl.dll extension=php_openssl.dll
    10 ;date.timezone = date.timezone ="Asia/Tokyo"
    11 ;sendmail_from = me@example.com sendmail_from = 自分のメールアドレス
    12 ;mbstring.language = Japanese mbstring.language = Japanese
    13 ;mbstring.internal_encoding = EUC-JP mbstring.internal_encoding = UTF-8
    14 ;mbstring.http_input = auto mbstring.http_input = pass
    15 ;mbstring.http_output = SJIS mbstring.http_output = pass
    16 ;mbstring.encoding_translation = Off mbstring.encoding_translation = Off
    17 ;mbstring.detect_order = auto mbstring.detect_order = UTF-8,ASCII,SJIS,EUC-JP,JIS
    18 ;mbstring.substitute_character = none mbstring.substitute_character = none

    14-18 に関しては,デフォルトのままでも動くと思う。特に,17に関しては,自鯖の環境でこうしているので,参考にされる場合は各自対処してください。

  3. 展開時のフォルダ名を PHP にリネームし,そっくり C:直下に移動する。
  4. Apacheが2.4.x になったので,php5apache2_x.dll が変更になる。Apache Lounge から php5apache2_4.dll-php-5.4-win32.zip をダウンロードし,展開後,出来たディレクトリ内の php5apache2_4.dll を PHP 直下に移動する。
         PHP5.4.10 から php5apache2_4.dll も PHP のオフィシャルバイナリに
         同梱されるようになった(12/28追記)
  5. php5apache2_4.dll に同梱の ReadMe.txt に従い,Apache の httpd.conf の LoadModule の一番最後に
    LoadModule php5_module “c:/php/php5apache2_4.dll”
    を追加。PHP のインストールディレクトリ名について,大文字,小文字が入り乱れているが,Windowsは大小を区別しないので,無問題。気になる場合は,自分のインストール環境にそろえてください。
    AddHandler application/x-httpd-php .php
    PHPIniDir “C:/PHP”
    については,httpd.conf の末尾に以下の形で追加。
         <IfModule mod_php5.c>
           AddHandler application/x-httpd-php .php
           PHPIniDir “C:/PHP”
         </IfModule>
    AddType application/x-httpd-php .php だったのが, AddHandler application/x-httpd-php .php となっている。今まで,AddType と AddHandler の違いなんて考えたこともなく,どこかで見かけた通りに設定してきたが, AddTypeAddHandler を読んでみると, AddHandler の方が妥当なようだ。
    <IfModule mod_php5.c> と </IfModule> で挟むのは,Apache モジュール mod_so の書き方が変わっていないので,あったほうがいいかなという程度。
  6. Apache の httpd.conf の
    DirectoryIndex index.html  —>>  DirectoryIndex index.php index.html
  7. テキストエディタで,<?php phpinfo() ?> を記入した test.php を作り,ドキュメントルートにコピー。Apacheを再起動後,ブラウザから http://localhost/test.php を確認し,phpinfo() ページが表示されれば,インストール完了。
    ドキュメントルートの test.php は削除し,php.ini の
    ;disable_functions =  —>>  disable_functions =”shell_exec, suexec, passthru, phpinfo”
    に変更後,Apacheを再起動。

 一応,仮構築はできた。あとは,本番ですな。(ドキドキ)

早速の追記:
 書き忘れです。PHPのパスを通していないが,Apacheから使うだけなら通さなくても問題ない。
 と書いたのだが,近頃ググっていて,パスがらみのトラブルを見たので,WinVista・7・8やWinサーバ系だと違うのかもしれない(12/27追記)。

追記(4/12):
 次稿に書いたが,
     (OS 64)指定されたネットワーク名は利用できません。
     : AH00341: winnt_accept: Asynchronous AcceptEx failed.
に対して,
     <IfModule mpm_winnt_module>
       AcceptFilter http none
     </IfModule>
を入れてから,調子がいいように思える。

追記2(4/14):
 php5ts.dllのクラッシュによる再起動があまりに激しいので,Apache2.2+PHP5.3に戻した。しかし,次々稿のようなことになって,頭が痛い。

追記3(4/28):
 以下の構成で安定したよー,ぱちぱち。

  • WindowsXP HE SP3 (x86) 無理やりSP3をあててる
  • Apache 2.4.2 (VC9) (x86) Apache Loungeから
  • MySQL 5.5.23 (x86)
  • ActivePerl 5.14.2.1402 (x86)
  • PHP 5.4.1 (Thread Safe) (VC9) (x86)

追記4(5/2):
 今朝,8時半ごろ, crash + restart が起きた。5日強で1回だから,劇的に減った。ありがちなメモリリークとかも調べてみないといけないかな。

追記5(11/10):
 PHPの設定について,extra-confを作る話を「覚え書-#12。」に書いたので,そっちも見てください。

追記6(2013/1/3):
 VC11 でビルドの Apache 2.4.6 win32 binary について新記事を書いた。