header image

携帯対応

QRコード

RING

人気ブログランキング

新着記事

2009/03/18 21:51:18 apache none Comments

apacheでごにょごにょやる必要があったのでまとめておく。

特定の条件に合致した場合は、アクセスログ(エラーログ)に出力しないように設定する場合は以下のようになる。
1行目:画像とCSSとJSっぽいリクエストはログをとらない
2行目:自マシンからのアクセスもログをとらない
3行目:LANの中からもどうせ監視系だからいいや
4行目:nagiosという文字が含まれた場合は、これもURL監視だからいいや

SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(css)|(js)|(ico)$" nolog
SetEnvIf Remote_Addr 127.0.0.1 nolog
SetEnvIf Remote_Addr 192.168.1. nolog
SetEnvIf User-Agent "nagios" nolog
CustomLog /var/log/httpd/access_log combined env=!nolog

ログのローテーションはapache1.3系だとcronologを使っていたのだが、apache2系だとrotatelogsを使う。

CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/%Y%m%d.log 86400" combined

これで1日毎にファイルが分かれてYYYYMMDD.logに出力される。簡単だよね。

2009/02/04 22:12:39 apache none Comments

今日はじめて知ったのでメモ。

【要件】

「クライアント→Webサーバ→Proxyサーバ→外部サーバ」
という構成で、Webサーバの特定URLにアクセスがあった場合に、
URLはそのままに外部サーバのコンテンツを返す。

【回答】
mod_rewriteではなく、mod_proxyを使うのね。

ProxyRequests Off
<proxy *>
Order deny,allow
Allow from all
</proxy>

ProxyRemote * http://proxy.example.com:3128
ProxyPass /hage http://foo.example.jp/fuga
ProxyPassReverse /hage http://foo.example.jp/fuga

なお、認証付のProxyは対応していないとのことだが、Proxyの指定でid:password@を頭に付けてもダメなのかな?

2008/01/18 00:37:53 PHP, apache none Comments Tags: , , , ,

ローカルではXAMPP使っていて、Eclipseから色々叩いているのだが、嵌ったのでメモ。

XAMPPに同封されているPHP4は--with-opensslでコンパイルされていないので、以下のようなコーディングは利用できない。

$ret = fsockopen("ssl://192.168.1.61", 443, $errno, $errstr, 30);

こいつを実行すると

Warning: fsockopen() [function.fsockopen]: no SSL support in this build in C:\dev\xampp\htdocs\test.php on line 5
Warning: fsockopen() [function.fsockopen]: unable to connect to 192.168.1.61:443 in C:\dev\xampp\htdocs\test.php on line 5

てな感じでエラーになる。

これの何が不便かっていうと、PHP4の案件で、ユニットテストを使うときにSimpleTestのWebTestCaseがSSLで動作してくれない。くそ。
PHP4の寿命は今年8月だった気がするので、そろそろ真面目に捨てろ、ということだな。

mod_security対応強化の結果

こんな感じで拒否した件数調査。

# cat /var/log/httpd/error_log | grep "[error]" | 
grep "[Wed Mar 21" | grep mod_security | wc -l

3/21(水)
1473

3/20(火) 639

3/19(月) 1671

ということで結構良好。但しあまりに数が多いせいで、サーバに負担が掛かっている。Zope+Ploneだからなぁ。

ブラックリストを作ったり色々しているが、トラックバックスパムが減らない。かなり鬱陶しい。

ということでmod_securityで対応することにした。

Got Root : mod_security rules

上記のサイトからmod_securityのポリシーファイルをダウンロードして設置すればよい。

構成は以下の通りだ。

設定ファイル 役割
apache2-rules.conf 一般的なアプリケーション用のルール
badips.conf 拒否するIPアドレスリスト(足りない分は自分で追加すること)
blacklist.conf コメントスパム防止
blacklist2.conf 経由したプロクシやリクエスト元による拒否
exclude.conf SQLインジェクションの拒否
jitp.conf 色々なアプリケーションの脆弱性への対応
proxy.conf Proxyとして利用されることを拒否する
recons.conf よくわからん・・・
rootkits.conf rootkitによるアクセスを拒否する
rules.conf アプリケーション保護のルール
useragents.conf 変なユーザエージェントをはじく(存在しないもの、一文字違いとか)

これで、スパムが減ると良いねぇ。

2006/11/18 18:16:40 Linux, apache none Comments Tags: ,

このサイトは他のサーバからnagiosで監視しているのだが、どうにもこうにもパフォーマンスが悪いゆえか、誤検知が多い。ちょっと原因調査とパフォーマンスチューニング。

とりあえず現状。

  • このサイトはフロントにapache2でバックエンドにZope+Ploneの構成にしていて、/contents/だけmod_rewriteを使ってZope側に転送。
  • Plone側では、CacheFuを使ってキャッシュに乗るようにしている。
  • Psyco(なんて読むんだ?)を使ってPython自体を高速化しようと思ったが、いまいち手順に自信がないのでやってない。
  • たぶんsquidを入れると大幅に高速化されそうな気がするが、このサイト以外に同じ鯖で動いているサービスに影響が出そうでペンディング。
  • apacheでは不要なモジュールの読み込みをかたっぱしから外しているので、もうどうしようもない。

そんな感じな現状で、apache2についているabで性能測定してみた。同一URLに150回リクエストを投げてみた。

まずは、

完全静的ページ → とりあえず秒間93リクエストなので、普通に結構さばける。

Requests per second: 93.31 [#/sec] (mean)
Time per request: 10.717 [ms] (mean)
Time per request: 10.717 [ms] (mean, across all concurrent requests)

apache+PHP+MySQLのscuttle部分 → MySQLも絡むのでこんなもんか。

Requests per second: 6.62 [#/sec] (mean)
Time per request: 151.161 [ms] (mean)
Time per request: 151.161 [ms] (mean, across all concurrent requests)

次にPloneの/contents/apacheの一覧部分。 → PloneでCacheFuでキャッシュしているので早い。

Requests per second: 27.81 [#/sec] (mean)
Time per request: 35.960 [ms] (mean)
Time per request: 35.960 [ms] (mean, across all concurrent requests)

次にPlone+COREblogで、個別のエントリページ。 → なんかえらい遅い。

Requests per second: 1.07 [#/sec] (mean)
Time per request: 930.939 [ms] (mean)
Time per request: 930.939 [ms] (mean, across all concurrent requests)

次にPlone+COREblogのトップページ → さらに遅い。

Requests per second: 0.57 [#/sec] (mean)
Time per request:1751.151 [ms] (mean)
Time per request: 1751.151 [ms] (mean, across all concurrent requests)

ということで、ボトルネックはCOREblogにあるような気がするのだが、どうなんだろうか???

最近妙にWebの応答が悪ぃなーー、なんて思ってたのでチューニングした。

問題は、以前にFC3からFC4にした際にapacheの設定がごっそり変わったこと。

FCのapache(2.0.54)の場合、/etc/httpd/conf.d以下にモジュール毎の設定ファイルをじゃぶじゃぶ入れているのだが、これがFC4のタイミングでめちゃめちゃ増えてしまった。しかも微妙にセキュリティ上問題になるようなconfファイルが平然とぶち込まれてた。

なんで、とりあえず、

  • /etc/httpd/conf.dから不要設定ファイルを全て削除
  • その上で、httpd.confを開き、LoadModuleしている箇所をかなりコメントアウト
  • apacheを再起動。

コメントアウトした内容は以下の通り。かなりの箇所である。

##LoadModule auth_anon_module modules/mod_auth_anon.so
##LoadModule auth_dbm_module modules/mod_auth_dbm.so
##LoadModule ldap_module modules/mod_ldap.so
##LoadModule auth_ldap_module modules/mod_auth_ldap.so
##LoadModule cern_meta_module modules/mod_cern_meta.so
##LoadModule expires_module modules/mod_expires.so
##LoadModule deflate_module modules/mod_deflate.so
##LoadModule dav_module modules/mod_dav.so
##LoadModule asis_module modules/mod_asis.so
##LoadModule info_module modules/mod_info.so
##LoadModule dav_fs_module modules/mod_dav_fs.so
##LoadModule imap_module modules/mod_imap.so
##LoadModule actions_module modules/mod_actions.so
##LoadModule speling_module modules/mod_speling.so
##LoadModule userdir_module modules/mod_userdir.so
##LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
##LoadModule cache_module modules/mod_cache.so
##LoadModule disk_cache_module modules/mod_disk_cache.so
##LoadModule file_cache_module modules/mod_file_cache.so
##LoadModule mem_cache_module modules/mod_mem_cache.so

結果、当社比で3割ほど性能向上した模様。ついでに

HostnameLookups Off

にして、当初の性能の倍程度を実現。あとはKeep-Alive関係いぢれば吉。

#そんだけやってもZope使っているとサイトが遅い罠・・・・。

2006/08/29 00:00:00 Linux, apache none Comments Tags: ,

とりあえずこの記事が256番目の記事らしい。なんと縁起の良い数字であることかw

単なるメモ。

analogでは、langファイルやドメインファイル(jpedom.tabとかjpsdom.tabとか)の指定をanalog.cfgに書くわけだが、サンプルのcfgではlang/jpedom.tabというように相対パス指定で記載されている。

これが実はハマリの要素で、cronなどでanalogを動作させると、カレントディレクトリがanalogのバイナリとは異なる場所になるので、きちんと設定が反映されないことになる。

したがってanalog.cfgの外部ファイルの読み込みは、すべて絶対パス指定で書いておいた方が無難。

DNSFILEとかの指定も同様。

2006/08/19 23:28:19 apache none Comments Tags: ,

mod_rewriteの大ハマリだが、冷静にやったら解決。ちなみにRewriteRuleだけではできない。

答えは以下のとおり。

RewriteCond %{SCRIPT_FILENAME} ^/cgi-bin/from.cgi
RewriteCond %{QUERY_STRING} ^x=([0-9]{6})([0]{2})$
RewriteRule ^(.*)$ /to.php?y=%1 [R]

肝はRewriteCondを使用してQUERY_STRINGのマッチをかけて、その値をRewriteRuleに引き渡す。

その1点のみ。上記の例だと、

/cgi-bin/from.cgiへのリクエストで

QUERY_STRINGがx=[0~9の数字6桁+00]で構成されているときは

/to.phpに転送する。そのときにはパラメータはy=に数字頭6桁を指定する

ということになる。

あーーーーー、すっきり。

2006/08/18 01:44:03 apache none Comments Tags:

apacheのmod_rewriteにえらくはまってます。会社で2時間程度いじったけど解決せず。そのあといままで家の鯖で試してた。

こんなに熱くなったの久々(w

はまっている内容(やりたいこと)は/cgi-bin/from.cgi?x=1にアクセスが来たら、/to.php?y=1に振り替える

んでもって書いたRewriteRuleがこれだが、うまくいかん

RewriteRule ^/cgi-bin/from.cgi?x=([0-9]{1})$?? /to.php?y=$1 [R,L]

はまってそうなポイントとして

  • 変換前URLに?が含まれている。ちなみにでエスケープしてみたけど変わらない。
  • RewriteBaseも設定してみたりしたが効果はない
  • ?以降がやばそうってことでfrom.cgi(.*)とすると$1に何も値が入ってこない。なぜ?

 

日記 PHP オープンソース インストールマニアックス IIS Trac MySQL Perl Linux Agile・生産性向上 wordpress フリーソフト 自宅サーバ 書評 ブックマーク phpMyFaq TraM Plugin 早起き Delphi apache CakePHP Firefox Ruby eclipse セキュリティ プラグイン アジャイル mojavi Subversion Ajax/Web2.0 SQLServer Zope サーバ フレームワーク phpBB 仮想化 PostgreSQL OpenVZ scuttle CMS 文字化け 自宅 翻訳・日本語化 ApacheDS LDAP Excel 生産性向上 CodeIgniter XAMPP hacks taskfreak 修正 言語ファイル Ajax SBM ダウンロード HTML::FillInForm mod_security 情報共有


ads

読まなきゃモグリ