pepponの日記 このページをアンテナに追加 RSSフィード

2009-12-18

Apacheのapachectlの結果がperlからとれないの

/usr/local/httpd2/bin/apachectl configtest

なconfigtestな結果をperl

単純に``でくくるとかパイプかませてみたりしてもSyntax OKとかを取得できなかった。

/usr/local/httpd2/bin/httpd -tでも童謡だ。

なのでServer::Control::Apacheを入れてみた。

    use Server::Control::Apache;

    my $apache = Server::Control::Apache->new(
        server_root  => '/my/apache/dir'
       # OR    
        conf_file => '/my/apache/dir/conf/httpd.conf'
    );
    if ( !$apache->is_running() ) {
        $apache->start();
    }

プラグインも簡単につくれるよう

For example, here is a role that sends an email whenever a server is successfully started or stopped:


   package Server::Control::Plugin::EmailOnStatusChange;
   use Moose::Role;
   
   has 'email_status_to' => ( is => 'ro', isa => 'Str', required => 1 );
   
   after 'successful_start' => sub {
       shift->send_email("server started");
   };
   after 'successful_stop' => sub {
       shift->send_email("server stopped");
   };
   
   __PACKAGE__->meta->make_immutable();
   
   sub send_email {
       my ( $self, $subject ) = @_;
   
       ...;
   }
   
   1;

2009-05-26

複数のCatalystアプリをApacheでfastcgi編

ゆーすけべーさんの

複数の Catalyst アプリ を複数の apacheサーブさせる .confCommentsAdd Star

http://yusukebe.com/archives/09/05/26/124559.html

をみました。

うちでもApache + mod_perlならだいたい同じような感じになりますね。

フロントエンドで画像、CSSjavascriptを配信して、アプリはバックエンドmod_perlになげちゃう設定です。

ただ最近mod_perl+DBICでめんどうな事がおこったりしてからApache + fastcgiでやってたりするのでその設定を書いてみる。

lighttpdはあまり好きじゃないので使ってませんです。

フロントエンド

基本的にはとばしてやるだけ。 あまり変わりない。

<VirtualHost IPアドレス>
    ServerName myapp1
    DocumentRoot /home/myapp1/release/myapp1/root/
    ErrorLog /home/myapp1/http-error.log
    CustomLog /home/myapp1/http-access.log combined env=!no_log
    ErrorDocument 404 /home/error/404.html

    RewriteEngine     On
    ProxyPreserveHost On
    RewriteLog        /home/myapp1/rewrite_log
    RewriteLogLevel   0
    RewriteRule ^/(static/|favicon.ico) - [L]
    RewriteRule ^/(.*)$ http://127.0.0.1:8765/myapp_fastcgi.pl/$1 [P]
    ProxyPassReverse / http://127.0.0.1:8765/
</VirtualHost>

複数有るなら複数のvirtualhostを記述

バックエンド(fastcgi)

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1

NameVirtualHost *:8765
FastCgiConfig   -maxClassProcesses 3
FastCgiConfig   -startDelay 60
FastCGIConfig   -idle-timeout 600

<VirtualHost *:8765>
        ServerName myapp1
        DocumentRoot "/home/myapp1/release/myapp1/script"
        <Directory /home/myapp1/release/myapp1/script>
                AddHandler fastcgi-script .pl
        </Directory>
        ErrorLog /home/myapp1/fastcgi_error.log
        CustomLog /home/myapp1/fastcgi_access.log combined
</VirtualHost>
こちらも複数有るなら複数記述か、1個のアプリで1個のサーバ

fastcgiの場合1個のサーバでも複数のアプリサーブする場合に便利だと思う。

mod_perlでも同じように複数のvirtualhostで記述すれば1個のサーバで複数のmod_perlもできる。 でもmod_perlの場合1アプリサーバでやった方がいいと思う。 念のために書きますがこれらの設定は個人でサーブできるような比較的小さなアプリです。大規模なのはもちろん想定外です。

2007-07-07

mod_access_rblのapache2.2.4用のパッチ

おかしかったらごめんなさい。

対象はApacheソースのmodules/mod_authz_host.c

--- mod_authz_host.c.orig       2007-07-07 10:12:12.000000000 +0900
+++ mod_authz_host.c    2007-07-07 11:11:08.000000000 +0900
@@ -19,6 +19,7 @@
 *
 * Module derived from code originally written by Rob McCool
 *
+ * 'via' mods to handle RBL style dns lookup by blarson@blars.org
 */

 #include "apr_strings.h"
@@ -45,6 +46,7 @@
    T_ALL,
    T_IP,
    T_HOST,
+    T_VIA,
    T_FAIL
 };

@@ -116,8 +118,17 @@
    char msgbuf[120];
    apr_status_t rv;

-    if (strcasecmp(from, "from"))
-        return "allow and deny must be followed by 'from'";
+    if (!strcasecmp(from, "via")) {
+      if (strlen(where) > 80)
+       return "'via' location limited to 80 characters";
+      a = (allowdeny *) apr_array_push(cmd->info ? d->allows : d->denys);
+      a->limited = cmd->limited;
+      a->type = T_VIA;
+      a->x.from = where;
+      return NULL;
+    }
+    else if (strcasecmp(from, "from"))
+      return "allow and deny must be followed by 'from' or 'via'";

    a = (allowdeny *) apr_array_push(cmd->info ? d->allows : d->denys);
    a->x.from = where;
@@ -199,6 +210,41 @@
    }
 }

+static int check_via(request_rec *r, const char *via_list)
+{
+  char hb[100];
+  char *ha, *s, *sb, *sc;
+
+/* take the network address, convert to ascii, reverse the order of
+ * the numbers, tack on the rbl-style list to search, add a period
+ * at the end if there isn't one already, and see if it's listed */
+/* perhaps caching results would be a good idea */
+
+  ha = r->connection->remote_ip;
+  s = ha + strlen(ha);
+  sb = hb;
+  while (--s != ha) {
+    if (*s == '.') {
+      sc = s;
+      while (*++sc != '.' && *sc) *sb++ = *sc;
+      *sb++ = '.';
+    }
+  }
+  sc = s;
+  while (*sc != '.' && *sc) *sb++ = *sc++;
+  *sb++ = '.';
+  sc = (char *)via_list;
+  while (*sb++ = *sc++) ;
+  if (sb[-2] != '.') {
+    sb[-1] = '.';
+    *sb = '\0';
+  }
+  ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_DEBUG, 0, r,
+               "looking up %s\n", hb);
+  return gethostbyname(hb) != NULL;
+}
+
+
 static int find_allowdeny(request_rec *r, apr_array_header_t *a, int method)
 {

@@ -251,6 +297,11 @@
            }
            break;

+       case T_VIA:
+         if (check_via(r, ap[i].x.from))
+           return 1;
+         break;
+
        case T_FAIL:
            /* do nothing? */
            break;

2007-05-23

mod_access_rblが消えたのでmod_defensible

mod_access_rblのパッチ探してたら、見つけれなかったので古いダウンロードしたやつを使う

※2.2用のパッチは

ここギコ!さんが作ってくれています。

http://kokogiko.net/m/archives/001601.html

とおもってたらよさげなのがあった

その名もmod_defensible

http://julien.danjou.info/mod_defensible.html

とりあえず使ってみようー

configureオプションに--with-udnsってのがあって

  --with-udns
    To compile mod_defensible with udns support (better performance).
    This options needs libudns.

とのこと。 udnsって何?って感じなのですが、何?

UDNS http://www.corpit.ru/mjt/udns.html

UDNS is a stub DNS resolver library with ability to perform both syncronous and asyncronous DNS queries.

同期、非同期をさぽーとするライブラリのようです。

でmakeしたらエラー

MakefileのAPXS=にAPXS指定したら、こんどはずらーっとエラーでた。

エラーみてるとapr関係のヘッダーファイルの場所がちがってるっぽい。

めんどくさくなったのでmod_access_rblいれる・・

あとでしらべてみよう。

2007-05-02

mod_layout 5.0のマニュアルないのでメモ

LayoutCacheNeeded

This directives makes sure that all Layout headers and footers get Cache-Control: no-cache methods in all situations. This directive either takes On or Off.

ヘッダー Cache-Contro:no-cache

LayoutHeader

A URI which prints the header contents.

ヘッダー

LayoutFooter

A URI which prints the footer contents.

フッター

Layout

Add a layout to be inserted when a tag is found, this takes two options, with a third optional parameter. The first is a pattern, the second is the layout and the third is how the layout should be inserts (either prepend, append, or replace). The default is to replace.

タグねタグ

パターン,レイアウト,レイアウト(option)

置換(replaced、デフォルト)か、追加(prepend)

LayoutHandler

"Enter either a mime type or a handler type. This type will then be handled by mod_layout."

LayoutIgnoreURI

Enter a URI that should be ignored, regular expressions are allowed.

LayoutIgnoreURI *.cgi

LayoutIgnoreURI *.pl

LayoutIgnoreURI *.hdml

みたいな?

LayoutIgnoreHeaderURI

"Enter a URI that should be ignored by the header, regular expressions

are allowed."

LayoutIgnoreHTTPHeaderURI

"Enter a URI that should be ignored by the HTTPHeader, regular expressions are allowed."

LayoutIgnoreFooterURI

"Enter a URI that should be ignored by the footer, regular expressions are allowed."

LayoutComment

"This can either be On or Off (default it Off). It places HTML comments in the outbound text describing when and where mod_layout has been inserting text."

LayoutProxy

"This can either be On or Off (default it Off). This is both experimental and probably quite broke."

LayoutDisplayOriginal

"This can either be On or Off (default it On). When off the original document is not displayed."

LayoutDefaultHandlers

"Turns On (default) or Off a list of standard types to handle."

LayoutTimeFormat

"This takes a SSI style timme format that can be used to change the output by mod_layout's internal TIME environmental variables that it introduces."

LayoutHTTPHeader

"Takes a URI to call for the HTTP Header."

LayoutHTTPOverrideHandler

"Specify handlers that mod_layout should produce HTTP headers for."

LayoutHTTPOverrideURI

"Specify URI's that mod_layout should produce HTTP headers for."

LayoutFooterOff

"This takes no arguments. If found it will turn off the footer."

LayoutHeaderOff

"This takes no arguments. If found it will turn off the header."

LayoutHTTPHeaderOff

"This takes no arguments. If found it will turn off the http header."

LayoutPostAsync

"Turns on and off asynchronous POSTs (AKA everything can see the post data)."

LayoutCache

"This moves the default cache from /tmp to another directory(or a RAM disk)."

LayoutAppend

"Turning this On or Off afffects whether or not headers and footers are appended when creating subsections."

LayoutMerge

"Turning this on and off will tell mod_layout to attempt to resolve conten (do a merger of the footer, body and header text"

<body></body>前後か、ファイルの前後か?

使うとエラー5.0にはなす

LayoutMergeBeginTag

"Use this to change the default begin tag to use during merges (the default string is \"<HTML>\""

LayoutMergeEndTag

"Use this to change the default end tag to use during merges (the default string is \"<\\HTML>\""

LayoutHeaderAppend

"Use this to change the default end tag to use during merges (the default string is \"<\\HTML>\""

LayoutFooterAppend

"Use this to change the default end tag to use during merges (the default string is \"<\\HTML>\""

LayoutMergeErrorIgnore

"When enabled (it takes on and off flags) mod_layout will not try to wrap any errors. Merge must be enabled for this to work. The default for this is off."

LayoutIgnoreTag

"If this tag is found during a merge, no footer or header will be inserted into the document"

LayoutIgnoreTagFooter

"If this tag is found during a merge, no footer will be inserted into the document"

LayoutIgnoreTagHeader

"If this tag is found during a merge, no header will be inserted into the document"

LayoutHTMLHandler

"This turns on mod_layout's own text/html and text/plain handler"

LayoutReplaceTags

"If this is enabled and you are doing a merge, the tags used for the merge will be replaced."

LayoutNotes

"If you want applications to do notes (a set of directives to control actions inside apache)."

utility.cの"<"を別のに変えたりいろいろするとはてなキーワード埋め込みとかアプリ側でやらなくてもできそうな感じ。

Apache 2.2の場合Filter経由かも

LAYOUTディレクティブ指定しても表示されないとかはFilter関係を疑うといいかも。

AddOutputFilter LAYOUT html cgi

2007-04-25

Apache2.2のドキュメントキャッシュってモジュールをキャッシュできる?

T/O できるんかいなー

アプリ毎に専用のサーバとか用意してる場合には問題ないだろうけど、たとえば共有的に利用したい場合にモジュールキャッシュできるととても便利だと思う。

CGIでCatalystとかRoR起動した時の遅さって1回ごとにモジュール読み込むからなんだとおもうけど、キャッシュで公開しない、よく使うモジュールファイルもキャッシュできるならいいなあと。

2007-04-19

Apache RPMとソースからmakeでだいぶ違う罠

ヤフオクで鯖買って自宅サーバしてみててすっかりyum信者になりつつある。

Apache2.2RPM版とソースからconfigure;make;make installで比べてみたら、ベンチマークでだいぶ差が出た。

RPM版速いぃぃー だいたい10 3倍以上の差がついた。 ある程度の最適化程度だとおもってたけど、下手にオプションつけないでやるとこんなにも差が出るものなのか?

それともベンチマークのやり方がわるかったのか。

以前intelコンパイラーでやったことあるけど、今回は軽くエラーが出たので試さなかったけど、コンパイラに渡す変数とかちゃんとやらんといかんなー。

MySQLとかも下手するとすごい遅い環境で動かしてるかもと思った。

2007-03-14

Apache 2.2.2でproxy が502エラーをだす件 2.2.4で修正だと

今までこういう事無かったんだけど、新しい環境で頻発してた。

proxy: Error reading from remote server returned by /, referer: http://***/

2.2.4ってのがあったのもしらんかったけど、Yahoo!で検索したら(Googleはまたもひっかからなかったよ)

http://issues.apache.org/bugzilla/show_bug.cgi?id=41150

でアパッチいれようとしたら、さくらにつながんないので

http://apache.happysize.com/dist/httpd/ - ハッピーサイズ ってところに

そうしたら・・

---------------------------
Microsoft Internet Explorer
---------------------------
ご注意:コンピュータはお客様が開いたすべてのアダルトサイトの跡が入っています。ファイルがコンピュータにインストールしプライバシーを侵入するのがたぶん分からず、お仕事とご結婚が危険です。
このファイルはインターネットの動作の跡が残り、クレジットカードの保護も危険になります。コンピュータにこのあとが残らないために、一時的ファイルとインターネット歴史の削除ができます。

無料でパソコンをスキャンするためにDriveCleaner をインストールしますか。(推奨)
---------------------------
OK   キャンセル   
---------------------------

なんですか=? めっちゃきもいんだけど コストかかってるから少しでも回収したいのもわかるけど・・

ま、そういうこともあり、ダウンロードしてインストールしていろいろためしてみたも、また同じようにでちゃう罠。 タイムアウトとか関係ありそうなので、いろいろと値変えてみる。

追記:FC5使ってたんだけど、yumで全部アップデートしたら、タイムアウトしなくなった。

ログをみて何がどうなのか見ておこう。

2007-01-16

Proxy + バックエンド(Catalyst + mod_perl)で

今までフロントエンドでApache2.2でバックエンドでApache2.0(Catalyst+mod_perl)で動かしていましたが。 なんか微妙に動作がおかしいので、いろいろとサイトとか見てまわった。

うちの場合のHttpd.confは以下のようになる。

フロントエンド(Apache2.2)のhttpd.conf

#### mysite ####
<VirtualHost X.X.X.X>
    ServerName www.example.com
    DocumentRoot /home/mysite/public_html
    ErrorLog /home/mysite/error.log
    CustomLog /home/mysite/access.log combined env=!no_log
    AddDefaultCharset off
     RewriteEngine     On
     RewriteLog        /home/mysite/rewrite_log
     RewriteLogLevel   0
     RewriteRule ^(.*)\.css - [L]
     RewriteRule ^(.*)\.gif - [L]
     RewriteRule ^(.*)\.png - [L]
     RewriteRule ^/(.*)$ http://127.0.0.1:8888/$1 [P]
     ProxyPassReverse / http://127.0.0.1:8888/
     RewriteRule ^proxy:.* - [F]
</VirtualHost>

バックエンド(Apache2.0+mod_perl)のhttpd.conf

### mysite
略
PerlSwitches -I/home/mysite/mysite/lib -I/home/その他たくさん

LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1

<VirtualHost 127.0.0.1:8888>
  PerlModule mysite
  PerlSwitches -I/home/mysite/mysite/lib
  ServerName   www.example.com
  DocumentRoot  "/home/mysite/mysite/root"
  <Location />
    SetHandler          modperl
    PerlResponseHandler mysite
  </Location>
  ErrorLog /home/mysite/mod_error.log
  CustomLog /home/mysite/mod_access.log combined
</VirtualHost>

こんな感じにしてて複数のVirtualHostで複数のCatalystあぷ動かしていたんだけど、たくさんのmod_perlおなじApacheで動かすのはやばいんでしょうか。

あとこちらのサイトをみまして。

http://d.hatena.ne.jp/webdoraku/20061117/p2

PerlOptions +Parentってのをみたんでやろうとしたら、

Syntax error on line 90 of /usr/local/httpd_mp2/conf/httpd.conf:
PerlOption `Parent' requires an ithreads enabled Perl

とエラー

ithreadsが有効になってないから? うちのperlは5.8.0だけど 有効になってないのか?

うーん ようわからん。 つづく・・

その後なんかえらい苦労してLighttpdを入れて試してみた。

(Catalyst::Plugin::Charsets::Japaneseがまともにうごいてるっぽい! 注:普通はまともに動きます。 http://d.hatena.ne.jp/peppon/20061221/1166687273 )

でも、その他いろいろな問題は解決せずつーか、プログラム側の問題だって事で。

それがわかっただけでも嬉しい。 が、lightyいろいろと苦労したー。。