タグ: apache

ログファイルの位置を変更する

アクセスログをデフォルトの場所にいつまでも保存しておくと、ディスクの容量が…
って事にならないよう、予めログファイルを作成するディレクトリを指定しておく。

httpd.conf の500行目あたりに以下の指定があるのでそれぞれ変更する。
場所はServerRoot(デフォルトだと[ /etc/httpd ])からの
相対パスで記入されているので、それに合わせる。

ErrorLog logs/error_log
CustomLog logs/access_log combined
↓
ErrorLog ../../home/httpd_logs/error_log
CustomLog ../../home/httpd_logs/access_log combined

こんなカンジで。

書き換えたら、httpdの再起動で指定した場所にログが生成されていくことを確認して終了。

いまさらのnamazuインストール(途中)

分かってる。
使う期間は数週間、もしくは数日しかないことはよく分かってる。
けど、全く同じ環境を構築しなきゃいけない以上やらざるを得ない…!
でも最低限でいいや。
なんか書いてたら長くなってきたのであとで分割しよう。

namazuを入れるにはいろいろと下準備が必要。

  • kakasiインストール
  • nkfインストール
  • File-MMagicインストール

下準備を経てnamazuインストールにいたるのだが、その後もいろいろと作業が必要。

  1. kakasi のインストール
    • まず、kakasi をダウンロードしてくる。kakashi ではなく、kakasi 。
      http://kakasi.namazu.org/ にある [ ダウンロード > ソース ] から持ってくる。2013/05/31 時点での最新は2.3.4みたい。

      wget http://kakasi.namazu.org/stable/kakasi-2.3.4.tar.gz
    • ダウンロードが終わったら解凍。
      tar -zxvf kakasi-2.3.4.tar.gz
    • [ kakasi-2.3.4 ] というディレクトリができるので、そちらに移動。
      cd kakasi-2.3.4
    • configure と make と make install をおこなう。
      configure
      make
      make install
  2. nkf のインストール
    • nkfを sourceforge からダウンロード。
      http://sourceforge.jp/projects/nkf/ にある [ ダウンロード > ソース ] から持ってくる。2013/05/31 時点での最新は2.1.2。

      wget http://iij.dl.sourceforge.jp/nkf/53171/nkf-2.1.2.tar.gz
    • ダウンロードが終わったら解凍。
      tar -zxvf nkf-2.1.2.tar.gz
    • [ nkf-2.1.2 ] というディレクトリができるので、そちらに移動。
      cd nkf-2.1.2
    • configure がないので、make と make install をおこなう。
      make
      make install
  3. namazu 前の File-MMagic インストール
    • namazuを サイトからダウンロード。
      http://www.namazu.org/ にある [ ダウンロード ] から持ってくる。2013/05/31 時点での最新は2.1.2。

      wget http://www.namazu.org/stable/namazu-2.0.21.tar.gz
    • ダウンロードが終わったら解凍。
      tar -zxvf namazu-2.0.21.tar.gz
    • [ namazu-2.0.21 ] というディレクトリができるので、そちらに移動。
      cd namazu-2.0.21
    • [ File-MMagic ] というディレクトリがあるので、そちらに移動。
      cd File-MMagic
    • ここに [ Makefile.PL ] というファイルがあるのでこれを以下のようにして実行。
      実行時に「Can’t locate ExtUtils/MakeMaker.pm」とか出てきたら、その旨対処。

      perl Makefile.PL LIB=/root/lib INSTALLMAN3DIR=/root/man
    • 同一階層内に [ Makefile ] というファイルを作ってくれるので、makeとmake installする。
      make
      make install
    • ここまでで[ File-MMagic ]のインストールが終わるので、一つ上の階層に戻ってnamazu本体のインストールに戻る。
  4. namazu インストール
    • [ File-MMagic ]の位置を指定しつつ、configure。
      ./configure --with-pmdir=/root/lib

      「./configure」だけだと、途中でエラーが出る。

    • いつもどおり、make & make install。
      make
      make install
    • ここまで出来たら、[ /usr/local/libexec ] に [ namazu.cgi ] が入っているので、これを [ /var/www/cgi-bin/namazu ] あたりにコピー。
      cp /usr/local/libexec/namazu.cgi /var/www/cgi-bin/namazu/.
    • 続いて、[ /usr/local/etc/namazu ] に [ namazurc-sample ] が入っているので、これを [ /var/www/cgi-bin/namazu ] あたりにリネームしつつコピー。
      cp /usr/local/libexec/namazurc-sample /var/www/cgi-bin/namazu/.namazurc

PHP Warning: DOMDocument::loadHTML() がジャマ

PHP上で loadHTML() を使って取り込んでる時に、
HTMLがきちんとマークアップされていないと、Apacheのエラーログにこんなものが出力される。

[Mon Apr 22 01:35:15 2013] [error] [client 192.168.11.110] PHP Warning: DOMDocument::loadHTML() [function.DOMDocument-loadHTML]: htmlParseEntityRef: expecting ‘;’ in Entity, line: 1053 in /var/www/html/hogeee/ugyaaa.php on line 20, referer: http://katzplus.net/hogeee/hidebu.php

HTMLが正しく書かれていないことが問題なのだが、HTMLを正しく書けと言っても無駄なのでこのWarningを無視することにする。

で、無視する方法。

loadHTML()

を呼び出す前に

libxml_use_internal_errors(true);

って書いとく。以上。

詳細は DOMDocument::loadHTML – php.net あたりで。

date.timezone を設定しておく

デフォルトのままで始めると phpinfo() を置いて見ただけでWARNINGを出してくれる。

You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

とりあえずTimezoneをセットしろという事なので、php.iniでコメントアウトされている

;date.timezone =

のコメントアウトを外して

date.timezone = Asia/Tokyo

とする。
もしくは、PHP書き始めたら頭に

<?php
date_default_timezone_set('Asia/Tokyo');
・・・

を書いておく。

virtualhostの追加

まず、

vi /etc/httpd/conf/httpd.conf


265行目辺りの ServerName をコメントアウト。

265 #ServerName www.example.com:80

972行目辺りの NameVirtualHost のコメントアウトを外す。

972 NameVirtualHost *:80

次に、

vi /etc/httpd/conf.d/virtualhost.conf

で、confファイルを作成。
中に

<VirtualHost *:80>
    ServerAdmin master@katzplus.com
    ServerName www.katzplus.com
    DocumentRoot /var/www/html/www
    ErrorLog logs/www_error_log
    CustomLog logs/www_access_log combined
</VirtualHost>
<VirtualHost *:80>
    ServerAdmin master@katzplus.com
    ServerName storage.katzplus.com
    DocumentRoot /var/www/html/storage
    ErrorLog logs/storage_error_log
    CustomLog logs/storage_access_log combined
</VirtualHost>

こんなカンジ?

どうあってもshift-jisで表示したい

はるか昔からshift-jisで作成されているページをUTF-8環境下で表示させる時の.htaccessファイル。

AddDefaultCharset shift-jis
AddType "text/html; charset=shift-jis" .html .php

php_value default_charset               Shift_JIS
php_value mbstring.language             Japanese
php_value mbstring.http_input           auto
php_value mbstring.http_output          SJIS
php_value mbstring.internal_encoding    Shift_JIS

これだけ書いておけば十分だろうと思って書いたけど、ほんとに十分だった。

Apache起動時のメッセージ

[root@localhost /]# /etc/rc.d/init.d/httpd start
httpd を起動中: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
                                                           [  OK  ]

こんなカンジで出てくるのが邪魔。
なのでこれを消すために /etc/hosts に、httpd.confに設定しているServerNameを書き足す。
ServerNameは275行目あたりに書いてある。

192.168.1.2 katzplus.com

これで再起動しても出ない?

もう一つできることがあるっぽいのでそれもやっておく。

vi /etc/hosts

で、

127.0.0.1               localhost localhost.localdomain

127.0.0.1               localhost.localdomain localhost

に変更する。

[root@localhost /]# /etc/rc.d/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]

WebDAV を使ってみる

外からアップロードしたいものがあったので、簡単にWebDAVサーバにする。
Apache2.2なのですでに mod_dav.so とか mod_dav_fs.so あたりはLoadされている。
となれば httpd.conf に以下の文言を足すだけ。

Alias /doc "/var/www/dav"
<Location /dav>
DAV On
</Location>

これだけだと、認証も何もないので、必要に応じてBasic認証なりDigest認証なりを組み合わせて使う。

DocumentRoot変更時の注意(selinux無効化)

DocumentRootを var/www/html から変更して別のところにしただけなのに

/etc/init.d/httpd restart
httpd を停止中:                                            [失敗]
httpd を起動中: Syntax error on line 293 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory
                                                          [失敗]

となる・・・

SELinuxが有効になっているとこうなるらしいので無効にする。

setenforce 0

これだけだと一時的にしか無効にならないらしいので

vi /etc/selinux/config

で中身を編集する。

SELINUX=enforcing

SELINUX=permissive

に。
これで万事おっけーです。いまのところは。

詳しくは SELinuxを無効化する | Smart -Web Magazine を参照のこと。

default charset の位置

2.2からconfファイルが種類ごとに断片化されているので。

charsetに関する設定は「/etc/apache2/conf.d/charset」にある。

#AddDefaultCharset UTF-8

という部分があるので、これを参考に設定する。

redirect

HTMLではmetaで。

<meta http-equiv="Refresh" content="5; URL=http://katzplus.com/" />

JavaScriptではlocation.hrefで。settimeoutと組み合わせればOK。

<script text/javascript>
<!--
setTimeout("location.href='http://katzplus.com/';",5000);
-->
</script>

PHPではheader関数で。

header("Location: http://katzplus.com/");

で出来るんだけどsettimeoutはどうやればいいんだ?

.htaccessではRedirectかRedirectMatchで。

Redirect permanent / http://katzplus.com/

とか

RedirectMatch 301 .* http://katzplus.com/

でいける。でもこれもsettimeoutは効かないなぁ。