タグ: apache

メンテナンス画面、移転しました画面にリダイレクトする

該当ドメインのどこにアクセスしてもメンテナンス画面、移転しました画面にリダイレクトさせる、
そんなmod_rewrite。

ここに書いてあることは
Webサイトのメンテナンス中画面を出す正しい作法と.htaccessの書き方
そのままなので、むしろここより読みやすいWeb担Forumをオススメ。

予期しないことが起きると精神的にいただけない[httpd.conf]は書き換えない。
すべて[.htaccess]で済ませます。

cd /var/web-root/

あたりで公開ディレクトリに行って

vi .htaccess

ErrorDocument 503 /hikkoshimashita.html

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} !=/hikkoshimashita.html
RewriteCond %{REMOTE_ADDR} !=192.168.0.2
RewriteRule ^.*$ - [R=503,L]
</IfModule>

なカンジ。

REMOTE_ADDRの行は引っ越しましたページを表示させたくないクライアントIPなので、
メンテナンスページの時は自分のIPを入れる。引っ越しましたページの時は必要ない。

あとは、hikkoshimashita.htmlに

<meta http-equiv="refresh" content="10; url=http://katzplus.com/" />

とか、好きなことを書けばいい。

mod_rewrite を適用するために httpd.conf を修正

新しいサーバに mod_rewrite を使ったシステムをそのままコピーしても使えない。
これは当たり前。
「.htaccess」をコピーしても使えない。
なんで?

httpd.conf も修正する必要があるから。
修正する箇所は次の2ヶ所。
両方共「AllowOverride」の設定。

1つ目。305行目付近にある。

<Directory />
    Options FollowSymLinks
    # AllowOverride None
    AllowOverride All
</Directory>

「None」を「All」に修正する。

2つ目も同じような修正。339行目付近にある。

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    # AllowOverride None
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

この2箇所を修正すると .htaccess の mod_rewrite が動くようになる。

自宅CentOS

なんとかして1台のサーバですべての用事を済まそう計画…

  1. minimum install
  2. date –set=’****/**/** **:**:**’
  3. vi /etc/sysconfig/network-scripts/ifcfg-eth0
  4. vi /etc/selinux/config
  5. vi /etc/sysconfig/iptables
  6. vi /etc/resolv.conf
    nameserver 192.168.1.1
  7. vi /etc/yum.conf (Proxy check only)
  8. yum install ntp openssh-clients wget rsync mlocate
  9. vi /etc/ntp.conf
    server 192.168.1.1 iburst
  10. /etc/init.d/ntpd start
  11. chkconfig ntpd on
  12. chkconfig ntpdate on
  13. ssh-keygen -t rsa
  14. cd /root/.ssh/
  15. mv id_rsa.pub id_rsa.pub.192.168.1.2
  16. scp id_rsa.pub.192.168.1.2 root@192.168.1.1:/root/.ssh/
  17. (on 192.168.1.1)
    cat id_rsa.pub.192.168.1.2 >> authorized_keys
  18. vi /etc/wgetrc (Proxy check only)
  19. vi /etc/profile
    HISTSIZE=5000
  20. cd /root
  21. wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
  22. rpm -ivh mysql-community-release-el6-5.noarch.rpm
  23. vi /etc/yum.repos.d/mysql-community.repo
  24. wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
  25. rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
  26. vi /etc/yum.repos.d/rpmforge.repo
  27. cd /etc/pki/rpm-gpg/
  28. wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
  29. cd /root/
  30. vi /etc/yum.repos.d/epel.repo
    [epel]
    name=Extra Packages for Enterprise Linux (EPEL)
    baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/
    enabled=0
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
  31. wget http://mirror.sysadminguide.net/centalt/repository/centos/6/x86_64/centalt-release-6-1.noarch.rpm
  32. rpm -ivh centalt-release-6-1.noarch.rpm
  33. vi /etc/yum.repos.d/centalt.repo
    [CentALT]
    name=CentALT Packages for Enterprise Linux 6 - $basearch
    baseurl=http://mirror.sysadminguide.net/centalt/repository/centos/6/$basearch/
    enabled=0
    gpgcheck=0
  34. yum install –enablerepo=mysql-community,rpmforge,epel,CentALT httpd php mysql transmission kernel-devel unzip gcc ccid pcsc-lite pcsc-lite-devel pcsc-lite-libs perl-Gtk2
  35. yum update –enablerepo=mysql-community,rpmforge,epel,CentALT
  36. cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.original
  37. vi /etc/httpd/conf/httpd.conf
    Timeout 20
    ServerName 192.168.0.2:80
    <Directory />
    AllowOverride All
    </Directory>
    AddDefaultCharset off
  38. /etc/init.d/httpd start
  39. chkconfig httpd on
  40. cp /etc/my.cnf /etc/my.cnf.original
  41. vi /etc/my.cnf
    sql_mode=NO_ENGINE_SUBSTITUTION
    # for Replication
    log-bin=mysql-bin
    server-id       = 168001002
    max_connections = 1000
    
    #log = /var/log/mysql/query.log
  42. /etc/init.d/mysqld start
  43. chkconfig mysqld on
  44. mysql -u root -p
  45. > grant all privileges on *.* to username identified by ‘password’ with grant option;
  46. > quit

[warn] module proxy_ajp_module is already loaded, skipping

# /etc/init.d/httpd restart
httpd を停止中:						[ OK ]
httpd を起動中: [Wed Jul 16 02:44:58 2014] [warn] module proxy_ajp_module is already loaded, skipping
							[ OK ]

普通に起動しているっぽいけどなんか「イラッ」とする。
[ proxy_ajp_module ]は既にロードされているよ、的なことなので httpd.conf を確認すると

vi /etc/httpd/conf/httpd.conf
196 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

とあった。

もう一つは conf.d の中にある proxy_ajp.conf に書いてあった。

vi /etc/httpd/conf.d/proxy_ajp.conf
2 LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

確かに2ヶ所の指定はいらないので、httpd.conf 側をコメントアウトする。

CentALTリポジトリの追加

httpdのバージョンをCentOSデフォルトで配布される2.2.15よりも
上にあげなくてはならないということで、このリポジトリからアップデートします。

リポジトリファイルとしてどこかにあるわけではないので、作成します。

# vi /etc/yum.repos.d/centalt.ru.repo
[CentALT]
# CentOS 6 の場合
name=CentALT Packages for Enterprise Linux 6 - $basearch
baseurl=http://centos.alt.ru/repository/centos/6/$basearch/
# CentOS 5 の場合
#name=CentALT Packages for Enterprise Linux 5 - $basearch
#baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
# CentOS 5 / 6 共通
enabled=0
gpgcheck=0

で、作成。

# yum --enablerepo=CentALT update httpd

でアップデート。
途中、
警告: /etc/httpd/conf/httpd.conf は /etc/httpd/conf/httpd.conf.rpmnew として作成されました。
とか出てくるので、現状に合わせて httpd.conf を適宜修正する。

# /etc/init.d/httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
# httpd -v
Server version: Apache/2.2.27 (Unix)
Server built:   Apr  9 2014 23:22:50

うむ。

epgdump と epgrec の導入

今回は録画を簡単に行うというところまで。
途中、LAMPの構築が入っちゃってやたら長い記事に…
設定から録画テストまではこちらの記事を参照。

  1. epgdumpのインストール
    1. epgdumpをsourceforgeから持ってくる。
      # wget http://iij.dl.sourceforge.jp/epgrec/53385/epgdumpr2_20111001.tar.gz
    2. 解凍。
      # tar -zxvf epgdumpr2_20111001.tar.gz
    3. epgdumpr2ディレクトリに移動してmakeしたいのだけど、
      # cd epgdumpr2
      # make
      make: `all' に対して行うべき事はありません.

      と言われてしまう。
      ので、

      # touch *
      # make clean
      rm -f core epgdump *.o
      # make

      のように、touch と make clean を挟んでからmakeする。

    4. 出来上がったepgdumpを/usr/local/bin/にコピーする。
      # cp epgdump /usr/local/bin/
    5. コピーしたepgdumpが正常に動作するか確認。
      # epgdump test /tmp/test_video.ts -
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE tv SYSTEM "xmltv.dtd">
      <tv generator-info-name="tsEPG2xml" generator-info-url="http://localhost/">
      ……………………
      ……………………
      </tv>

      と、番組情報がダーっと出てくれば動作している事になる。

  2. epgrecで必要になるものを事前にインストール
    epgrecはPHPで書かれているので、事前にPHPが動作するWebサーバ(Apacheでもnginxでも)が必要。
    ついでにMySQLも利用するので、これも必要。
    要するにLAMP環境が必要。

    1. Apache をインストール
      # yum install httpd

      以上。

    2. Apache の設定
      1. httpd.conf を編集
        # vi /etc/httpd/conf/httpd.conf

        で、
        292行目辺りの

        DocumentRoot "/var/www/html"

        317行目辺りの

        <Directory "/var/www/html">

        を好きなディレクトリに変更する。

    3. PHP のインストール
      # yum install php?php-cli php-mysql?php-mbstring php-xml

      ぐらい?
      あとで、あれこれ足りないと言われるのが面倒なら、少々乱暴だが

      # yum install php*

      で、PHPと名のつくものが全部入る。
      まともにサーバ作るならこんな事してちゃダメ。
      ちゃんと必要な物を考えて入れましょう。

    4. PHPの設定
      1. php.ini を編集
        # vi /etc/php.ini

        で、
        946行目辺りの

        ;date.timezone =

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

        date.timezone = Asia/Tokyo

        としておく。

      2. php.conf の存在確認
        /etc/httpd/conf.d/ 配下に php.conf が存在することを確認しておく。
    5. MySQLをインストール
      # yum install mysql-server mysql

      で、バージョン5.1 辺りを入れてくれると思う。
      もうちょっと新しいものを入れたいなら、MySQLのリポジトリを導入して、

      # yum --enablerepo=mysql-community install mysql-server mysql

      でもいい。

    6. MySQLの設定
      1. MySQLにログイン
        # mysql -u root -p
         Enter password:

        一番初めはパスワードは無いので、そのままReturnで入れる。

      2. まずはrootのパスワードを設定。
        > grant all privileges on *.* to root@localhost identified by 'rootのPW' with grant option;

        設定したら一度ログアウトして、

        • パスワードが正しく設定されていること
        • パスワード無しではログイン出来ないこと

        を確認しておく。

      3. epgrec 用のデータベースの作成
        > create database データベース名;
        で、データベースを作成しておく。データベース名は epgrec_database でもなんでもいいので、わかりやすく好きなものを。
      4. epgrec 用のMySQLユーザの作成
        別に root でもいいけど、epgrec で使用するMySQLユーザを作成しておく。

        > grant all privileges on epgrec_database.* to epgrec用のID@localhost identified by 'epgrec用のPW' with grant option;
      5. ここまで出来たら、MySQL ログアウト。
    7. chkconfig の変更
      # chkconfig httpd on
      # chkconfig mysqld on

      で、Apache と MySQL が自動的に起動するようにしておく。

  3. epgrecのインストール
    1. epgrecをsourceforgeから持ってくる。
      # wget http://iij.dl.sourceforge.jp/epgrec/53387/epgrec_20111001.tar.gz
    2. 解凍。
      # tar -zxvf?epgrec_20111001.tar.gz
    3. 出来上がった epgrec ディレクトリを Apache の公開ディレクトリ配下にコピーする。
      # cp -r /tmp/epgrec /var/www/html/epgrec
    4. コピー先のディレクトリに移動して、config ファイルを作成・編集する。
      # cd /var/www/html/epgrec
      # cp config.php.sample config.php
      # vi config.php
      
      $GR_CHANNEL_MAP = array(
              "GR27" => "27",         // NHK
              "GR26" => "26",         // Eテレ
              "GR25" => "25",         // NTV
              "GR22" => "22",         // TBS
              "GR21" => "21",         // フジ
              "GR24" => "24",         // TV朝日
              "GR23" => "23",         // TV東京
              "GR28" => "28",         // 放送大学
              "GR18" => "18",         // TVK
              "GR20" => "20",         // 東京MX
              "GR30" => "30",         // 千葉テレ
              "GR32" => "32",         // テレ玉
              "GR19" => "19",         // YOUプレミアム
              "GR53" => "53",         // YOUテレビ
      );

      うちで見ることができるリストはこんなカンジに。
      各地域のチャンネルリストはマスプロ電工のページにある。

    5. 録画用のshファイルもサンプルから作成しておく。
      cp do-record.sh.pt1 do-record.sh
    6. いくつかのディレクトリのパーミッションを777に変更しなくてはならない。
      # chmod 777 templates_c/
      # chmod 777 video/
      # chmod 777 thumbs/
      # chmod 777 settings/
      # chmod 777 cache/
    7. この段階までやってからブラウザで
      http://[SERVER_ADDR]/epgrec/index.php

      にアクセス。
      インストール状態をチェックしてくれる。

      1. ディレクトリとファイルのパーミッションチェック
        地上デジタルのチャンネル設定チェック
      2. MySQL設定
        インストール関連設定
      3. デジタルチューナー設定
        録画関連設定
        録画ファイル名の形式は[ %CH%_%ST%_%TITLE% ]に変更。

      すべて記入したら「EPGの初回受信」リンクを押す。
      50分ぐらいかかるかもという記述があったが、自分の環境では10分ちょっとで終わった。

    8. インストール最終ステップのページに
      「/etc/cron.d/以下にcronによるEPG受信の自動実行を設定する必要があります」
      との記述があるので、これを設定する。
      CentOSなので、ubuntu用の設定は使えない。
      けど「要はgetepg.phpを走らせれば良い」ということなので、

      # crontab -e
      30 10 * * * php -f /var/www/html/epgrec/getepg.php

      で走らせることにする。
      該当チャンネルが放送時間帯でなければいけないので、放送大学の放送がない深夜帯には設定できなかった。

  4. epgrec で録画テスト
    1. epgrec の画面が出たら予約してみる。
      「custom job番号の取得に失敗」というエラーが出たらatコマンドがインストールされていない。

      # yum install at

      でインストールする。

    2. 録画先がepgrecディレクトリ内のvideoディレクトリなので、これを変更しておく。

.htaccess でアクセス制限

ディレクトリごとに設定を変えたいなら .htaccess をいじったほうが楽。

DirectoryIndex index.php index.html
order allow,deny
allow from all
deny from .cn
deny from .kr
deny from .kp

<Files login.php>
Order deny,allow
Deny from all
Allow from 121.119.
Allow from 60.36.
</Files>

こんなカンジでどうかね。

prefork と worker の切り替え

Apache はデフォルトではプロセスベースの ‘prefork’ モデルが使用されるが、
スレッドベースの ‘worker’ モデルを使用することもできる。
切り替えは逐次できるわけではなくて、サービスの再起動とか必要になるわけだけど、
いちおう、そのやり方。
vi /etc/sysconfig/httpd
で中身を見てみると、9行目に
#HTTPD=/usr/sbin/httpd.worker
という部分がコメントアウトされているので、これを外す。

.htaccess に mod_rewrite を書き足す

もう「?」の後ろにGETくっつけて次のページに指示を送るの飽きた!
wordpressみたいにスラッシュで区切って送りたい!

と思ったので、mod_rewrite をいじってみたかった。
けどサーバは既に運用中。httpd.conf を適当に書き換えるのはいただけない。
ので、.htaccess を書いてそのディレクトリのみに今回の仕様を適用することにします。

マニュアルは http://httpd.apache.org/docs/current/mod/mod_rewrite.html
日本語はちょっと古いけど http://japache.infoscience.co.jp/japanese_1_3_6/manual/mod/mod_rewrite.html このへんかな?

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule \.(jpg|gif|ico|css|js)$ - [L]
RewriteRule ^(.*)$ index.php?com=$1 [QSA,L]

こんな?
あとは com 以下の文章が普通に投げられるので、この部分を色々切り取ったりしてコマンドにする、と。

違うディレクトリのログファイルにも logrotate を適用する

うちはapacheのアクセスログの置き場所を変更しているので、logrotate の設定ファイルも書き換えておかないとキチンとrotateしてくれない。
変更するのは

/etc/logrotate.d/httpd

ファイル。
コピーを取って httpd_log とでも名前をつけておく。
中には

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

のように書いてあるので
1行目の指定を次のように変更。

/var/log/httpd_log/*log {
・・・
・・・

おわり。

一定期間の access_log を抽出する

ログの見方の問題ではなく、grepの使い方の問題だった。
2013/09/01 の 00時部分のログだけ切り取りたい時は

# cat /var/log/httpd/access_log | grep '01/Sep/2013:00:' >> 20130901_00_access_log.txt

こんなカンジ?
・・・
cat する必要あるかな?無いな。

# grep '01/Sep/2013:00:' /var/log/httpd/access_log >> 20130901_00_access_log.txt

これでいいんじゃないかな?
内部的には全行なめてることに変わりないんだろうけど。