curl -X TRACE 127.0.0.1 | grep TRACE
TRACE / HTTP/1.1
が返ってくると、TRACEメソッドが有効です。(OFFにしましょう!)
vi /etc/httpd/conf/httpd.conf
次の設定をファイルのどこかに記述します
# HTTP TRACE method off
TraceEnable off
apachectl configtest
apachectl restart
curl -X TRACE 127.0.0.1 | grep TRACE
<p>The requested method TRACE is not allowed for the URL /.</p>
が返って来ればOKです。
とにかく急ぎで検証用環境が欲しい方に。
今回作業するマシンはMac。インストールする仮想マシンのOSは ubuntu とします。
https://www.vagrantup.com/downloads.html
http://www.oracle.com/technetwork/jp/server-storage/virtualbox/downloads/index.html
ここにインストールしたいOSの種類を入力して検索します。
https://app.vagrantup.com/boxes/search
今回はこのボックスを使用します
https://atlas.hashicorp.com/michaelward82/boxes/trusty64-php7
まず仮想マシンを格納したいフォルダ( Ubuntu_PHP7 とします )を作成しそこに移動します。
ターミナルから
mkdir Ubuntu_PHP7
cd Ubuntu_PHP7
次に vagrant コマンドを使ってインストールと起動を行います
vagrant init michaelward82/trusty64-php7;
vagrant up
# ● Vagrantfile の編集
インストールが完了すると Vagrantfile というファイルが作成されているのでそれを好きなエディタアプリで起動し編集します。
下記の行の先頭のコメントを取って実行できるようにします
config.vm.network "private_network", ip: "192.168.33.10"
再びターミナルから次のコマンドを実行して ssh の接続情報を表示します
vagrant ssh-config
表示例
Host default
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/hogehoge/.vagrant.d/boxes/michaelward82-VAGRANTSLASH-trusty64-php7/1.1.13/virtualbox/vagrant_private_key
IdentitiesOnly yes
LogLevel FATAL
この情報から ssh での接続コマンドが分かるので 実行して ssh 接続します。
ssh vagrant@127.0.0.1 -p 2200 -i /Users/hogehoge/.vagrant.d/boxes/michaelward82-VAGRANTSLASH-trusty64-php7/1.1.13/virtualbox/vagrant_private_key
【ここから先は vagrant 内の仮想マシンでの作業となります】
su - (パスワードは vagrant)
apt-get update
apt-get install php7.0-mbstring
vi /etc/apache2/apache2.conf
ユーザーとグループを下記のように書き換えておきます
User vagrant
Group vagrant
/etc/init.d/apache2 restart
curl localhost
ウェブブラウザに以下のように入力してアクセスする
http://192.168.33.10/
以上です。
さきほど表示したSSH設定にでてきた鍵を使用します。
/Users/hogehoge/.vagrant.d/boxes/michaelward82-VAGRANTSLASH-trusty64-php7/1.1.13/virtualbox/vagrant_private_key
これをFTPソフトの鍵選択画面から選択してください。 (接続プロトコルは SFTP にします)
Mac だとTransmit がお勧めです。
# telnet で接続 telnet hoge.com 80 # telnet接続後に次のコマンドを入力 TRACE / HTTP/1.0 TEST: HOGE (エンターを2回押す)
これで TEST:HOGE がサーバーから帰ってきた場合TRACEが有効です。
# telnet で接続 telnet hoge.com 80 # telnet接続後に次のコマンドを入力 OPTIONS * HTTP/1.1 HOST: localhost
TRACEが表示されれば使用出来る状態になっています。
httpd.confにて以下を記述し、再起動する。
TraceEnable off
旧なアクセス増加によってWEBサーバが重い。そんな時は別のマシンでapacheのログを解析するとよいです。
そこで
■ Visitors
http://www.hping.org/visitors/index_jp.php
ダウンロードして、解凍して make すると「visitors」という実行可能なファイルが出来ます。
それを /usr/bin 等へコピー
使い方
visitors オプション ログファイル > out.html
とすると 解析結果が out.html ファイルに出力されます。
オプションは
visitors -h
とすると表示されますが、とりあえずは
visitors -A ログファイル > out.html
と「 -A 」オプションをつけて解析してみるのがいいかと思われます。
◆ mod_rewriteで変換前URIに「%2F」があると、サーバーエラーになります。
これの対処方法は
◆ 1. apacheのバージョンを調べる
httpd -v Server version: Apache/2.2.0 Server built: Feb 11 2006 18:10:38
◆ 2. Apache 2.0.46 以降の場合は「AllowEncodedSlashes ディレクティブ」をONにするとスラッシュ"/"の受け渡しを許可することが出来る。
httpd.conf (.htaccessには記述できません) に以下の内容を記述
AllowEncodedSlashes On
◆ 3. apache を再起動
apachectl graceful
実在するファイル名には mod_rewrite を適用しない
RewriteCond %{REQUEST_FILENAME} !-f
実在するディレクトリ名には mod_rewrite を適用しない
RewriteCond %{REQUEST_FILENAME} !-d
http://www.cheatography.com/davechild/cheat-sheets/mod-rewrite/
apacheのログ「access_log」「error_log」はほっておくとどんどん容量が増えて無駄にディスクを消費する上にapacheのパフォーマンスが落ちます。
ログをローテーションするには「logrotate」を使用します。
vi /etc/logrotate.conf
weekly
rotate 4
errors root
create
include /etc/logrotate.d
weekly:週単位でローテーション(daily:日単位 monthly:月単位)
rotate 4:最大4つ前までのファイルを残す
errors root:エラーがあれば rootまでメールする
create [パーミッション] [グループ名] [ユーザ名]:ローテーション後すぐに同名のログファイルを作成する。
compress:.gz ファイルに圧縮する
notifempty : ログがカラならローテーションしない
missingok : ファイルが存在しない場合でもエラーとしない
include /etc/logrotate.d:/etc/logrotate.d ディレクトリ以下の設定ファイルを読み込む
dateext : ローテーションしたファイルに日付をつける
dateformat _%Y-%m : ローテーションしたファイルに指定したフォーマットの日付をつける
vi /etc/logrotate.d/httpd
でファイルを開くと
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
となっている。
notifempty があると ログファイルがから場合ローテーションを実行しないので、
テストの段階ではこれを削除しておくほうが挙動がわかりやすくなります。
使用しているログファイルが「access_log」「error_log」ならこのままでOK。
ログファイルが「access_log.sitename.com」「error_log.sitename.com」等に変更してある場合は
/var/log/httpd/*log {
↓
/var/log/httpd/*log.sitename.com {
に変更する。
また複数のファイルはスペースで区切って指定する
/var/log/httpd/*log.siteA.com /var/log/httpd/*log.siteB.com {
ローテーション設定の確認をするには -d オプションをつけて実行します
logrotate -d /etc/logrotate.d/httpd
ローテーション設定の確認をするには -f オプションをつけて実行します
動作を確認するには -v オプションもつけて実行するとより良いです。
logrotate -f -v /etc/logrotate.d/httpd
crontabの設定にで logrotate が組み込まれているかどうかを調べる
ls /etc/cron*
表示されるリストに
/etc/cron.daily:
logrotate man-db.cron
logrotate があればanacronで起動する設定になっています。
実際に起動されたかどうかを見るには
cat /var/log/cron | grep 'cron.daily'
で確認します。
logrotate は設定ファイル /etc/cron.daily/logrotate に記述がされてあり、
このファイルは anacron から実行されます。
anacronはcronと違って以下のような特徴があります
なので決まった時刻に正確に事故した場合はクーロンから起動するとよいでしょう。 例
mv /etc/cron.daily/logrotate /root/
crontab -e
(毎日4時半に実行するには以下のように記述する)
30 4 * * * /root/logrotate