【Apache】リバースプロクシ下でログに正常な IP アドレスを記す

以前の記事で、nginx のリバースプロクシ機能を使い、Apache を裏方として動かすことにしたのですが、そうなると一つ問題がありました。Apache のログに記される要求元アドレスが全て nginx のアドレス、つまり 127.0.0.1 になってしまうのです。

120825-0003.png

127.0.0.1 - - [29/Jul/2012:21:00:40 +0900] "GET /2012/07/mountain-lion-apache.html HTTP/1.0" 200 6823 "http://blog.remora.cx/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1"
127.0.0.1 - - [29/Jul/2012:21:00:40 +0900] "GET /styles.css HTTP/1.0" 200 1063 "http://blog.remora.cx/2012/07/mountain-lion-apache.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1"
127.0.0.1 - - [29/Jul/2012:21:00:40 +0900] "GET /mt.js HTTP/1.0" 200 9601 "http://blog.remora.cx/2012/07/mountain-lion-apache.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:14.0) Gecko/20100101 Firefox/14.0.1"

Continue reading

MovableType 5.2b2 & nginx でプラグインの CGI が動かない?

前回 MovableType 5.2b2 を nginx + PSGI/Plack で動作させるところまで行きました。この方式では、以下の図のように動的コンテンツは Starman(PSGI/Plack)で、静的コンテンツは従来通り Apache で配信されます。

120825-0003.png

このとき、/mt 直下にある .cgi ファイルは Starman で元気に動いているのですが、この前導入した「ほぼ指定日投稿プラグイン」を動かすことが出来ませんでした。

Continue reading

MovableType 5.2b2 を nginx + PSGI/Plack @ Mountain Lion な環境で動かす

MovableType 新版のベータ版がリリースされています。新バージョンの目玉はなんと言っても nginx + PSGI/Plack 環境に対応し、大幅な高速化が図られたことです。

Movable Type ベータ
http://www.movabletype.jp/beta/52/index.html
nginx – Wikipedia
http://ja.wikipedia.org/wiki/Nginx
PSGI/Plack – Perl Superglue for Web Frameworks and Web Servers
http://plackperl.org/

バージョンアップするに辺り、今まで Apache で運用してきた環境をそのまま生かすため、静的コンテンツは Apache で、動的コンテンツ(MovableType の .cgi)は Starman + PSGI/Plack で動かすことにします。PSGI/Plack 自体は Web サーバを選ばないのですが、MovableType 5.2 のドキュメントによると Starman がいいらしいです。

さらに nginx を Reverse Proxy として使うので、図に書くとこんな感じ。

Continue reading

Mountain Lion で Apache が起動しない?

前の記事 で MovableType のバックアップと、OS 自体のアップデートは完了しました。

で、マシンが再起動してローカルでサーバを見てみると、案の定、トップページがバグってます。

httpd.conf の設定

まあどうせ httpd.conf あたりが書き換わってるんでしょ? ってことで見てみると、(たぶん)以前のファイルが /etc/apache2/httpd.conf~previous にコピーされ、httpd.conf が新たに作成されていました。

diff とってみてみたところ、モジュールの記述が消えていたので、以下を追記しました。

LoadModule php5_module libexec/apache2/libphp5.so
LoadModule fcgid_module libexec/apache2/mod_fcgid.so

うん。これでも起動しません。Fastcgi の再インストールが必要です。

Continue reading

Perl5.12 で mod_perl をインストール

Perl 5.12 で mod_perl をインストールしたときの記録。Apache のバグ(?)によってすんなりとはいかなかった。

http://blog.remora.cx/2010/10/mod-perl-with-perl512.html

参考リンクの通りにインストールしていると、mod_perl の Makefile.PL でエラーが発生した。

[  error] '/usr/sbin/apxs -q NOTEST_CPPFLAGS' failed:
[  error] Use of assignment to $[ is deprecated at /usr/sbin/apxs line 97.

エラーメッセージでググると、これは Apache のソースを書き換える必要があるらしい。

Mailing List Archive: ModPerl: ModPerl
perl 5.12 / mod_perl
http://www.gossamer-threads.com/lists/modperl/modperl/101605

Diff of /httpd/httpd/trunk/support/apxs.in
http://svn.apache.org/viewvc/httpd/httpd/trunk/support/apxs.in?r1=807930∓r2=932791&diff_format=h

以下は、CentOS 5.5 上でインストールしてみた記録だ。

Continue reading

【Apache】サイトのコンテンツ全てをgzip圧縮する

Javascriptライブラリをgzip圧縮する」や「YUI CompressorでJavascriptを圧縮する」では、個々のファイルを圧縮して転送量を減らす技を書いた。でも、このように個別に指定するのではなく、透過的に実行してくれる方がありがたい。そのようなときに便利なのがApacheのmod_deflateモジュールだ。

@IT:mod_deflateによるコンテンツの圧縮転送
http://www.atmarkit.co.jp/flinux/rensai/apache2_04/apache04a.html
wadsのblog » Blog Archive » [Apache] mod_deflateでコンテンツをgzip圧縮して通信する
http://wadslab.net/2008/09/mod_deflate/

mod_deflateに関しては上の2つのリンクが詳しいのだが、ちょっと情報が古い。

「圧縮するべきファイルのタイプ」を指定する為に使われている「AddOutputFilterByType」ディレクティブは現在では非推奨になっている。

下で説明される理由により、本ディレクティブは非推奨です。 (中略) AddOutputFilterByTypeディレクティブにより有効にしたフィルタは場合によっては、部分的もしくは完全に適用されないことがあります。例えば、MIMEタイプが決定できないときにはDefaultTypeの設定が同じだったとしても、DefaultType設定を使うようになります。
http://httpd.apache.org/docs/2.2/ja/mod/core.html#addoutputfilterbytype

その代替策として使えるのがmod_filterだ。

Apache 2.2 mod_filterを使いこなす – AddOutputFilterByType DEFLATE text/htmlを書き換えてみる « cyano
http://www.onflow.jp/cyano/archives/137

Continue reading

iPhone用ページに自動で転送する

【MovableType】iPhone用テンプレートの導入 | blog.remora.cx」では iPhone 用のページを作成し、切り替えて利用できるようにした。しかし、実際に使うときにはPCで見たときは PC 用ページ、iPhone で見たときには iPhone 用ページを表示して欲しい。そんなときは Apache の mod_rewrite モジュールを利用する。ここのサイトが詳しかった。

杉浦とホームページ製作〜 URL を書き換えろ!「Rewrite 機能とは」
http://www.nurs.or.jp/~sug/homep/rewrite/rewrite1.htm

Apache の設定を確認

httpd.conf に次の一行があるか確認する。そもそもこれがないとモジュール自体が機能しない。

LoadModule rewrite_module libexec/apache2/mod_rewrite.so

そして肝心の「iPhone 用のページに自動で転送する」ためには次の設定を使う。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
RewriteCond %{REQUEST_URI} !^/m/
RewriteRule ^(.*)\.html$ /m/$1.html [L]

User-Agent 文字列に「iPhone」「iPod」を含み(2 行目)、要求された URI が「/m/」で始まらない場合は(3 行目)、HTML ファイルの要求を「/m/」ディレクトリにある同名のファイルへ転送する(4 行目)。これをどこに書くかは二通りある。

  1. httpd.conf(またはそこにインクルードされるファイル)に書く
  2. 転送したいファイルのあるディレクトリの .htaccess に書く

Continue reading