Apache 再起動

Apache

Apache 再起動

WebサーバーであるApache。
再起動するには、

 /etc/init.d/httpd restart

というコマンドを打ちましょう。
ちなみに、/etc/init.d/のディレクトリまで行って、

 httpd restart

とやってもダメです。

補足

CentOS7 から

 # systemctl start httpd.service

になりました。

  • service httpd restart — {2016-09-14 (水) 15:21:33}

Apache 全I/Oデータをログする

Apache

Webアプリケーションのデバッグのために、POSTデータをログに保存したいことがあります。
mod_dumpioを使うと、簡単にPOSTデータを含む全入出力データをエラーログに記録することができます。

 LoadModule dumpio_module modules/mod_dumpio.so
 DumpIOInput On
 DumpIOOutput On

また、I/OデータをロギングするにはLogLevelをdebugに設定する必要があります。

 LogLevel debug

なお、デフォルトのhttpd.confではmod_dumpioはロードされませんが、RHEL/CentOS5の標準のRPMにふくまれています。
ちなみに、httpdに含まれるモジュールは下記コマンドで確認できます。

 rpm -ql httpd|grep "mod_.*\.so"|awk -F'/' '{print $6}'

参考
http://httpd.apache.org/docs/2.0/mod/mod_dumpio.html

Apache エラーログを見る

Apache
Linuxサーバー

Apache エラーログを見る

Webサーバー ApacheのログはApacheの設定ファイルに

 ErrorLog

ディレクティブで場所を指定できます。

大体は

 /var/log/httpd

におくことが多いようです。

ログを見るには、

 tail

というコマンドが便利です。

 tail -n 20 filename

とやると、ログファイルの末尾から20行が見られます。

参考:Apache公式 ログファイル
http://httpd.apache.org/docs/2.0/ja/logs.html

Apache mod_rewrite 特定の文字列を含まない条件を定義したい

Apache

mod_rewriteのRewriteCondで「特定の文字列を含まない」条件を定義してみました。
RewriteCondでは条件を正規表現で記述でき、正規表現の否定先読みや否定戻り読み機能を使うと「特定の文字列を含まない」条件を定義することができます。

今回はmod_rewriteでクエリーストリングに”action=login”が含まれる場合はHTTPS通信を、そうでない場合はHTTP通信を強制するように設定しました。
/action=(?!login)/という正規表現で”action=login”以外の”action=”にマッチする条件を定義できます。

このmod_rewrite設定は下記のようになりました。

 RewriteEngine on
 RewriteCond %{HTTPS} off
 RewriteCond %{QUERY_STRING} action=login
 RewriteRule ^.*$  https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
 
 RewriteCond %{HTTPS} on
 RewriteCond %{QUERY_STRING} action=(?!login)
 RewriteRule ^.*$  http://%{HTTP_HOST}%{REQUEST_URI} [R,L]

これで下記のような動作を設定できました。

  • HTTP通信時にクエリーストリングがaction=loginの場合はHTTPSにリダイレクトする
  • HTTPS通信時にクエリーストリングがlogin以外のactionの場合はHTTPにリダイレクトする

Apache ab(ApacheBench)で負荷テストする

Apache

Apacheに付属するApacheBenchというプログラムで単一のURLに対して負荷テストを行うことができます。
※複数のURLに対して複雑なテストを行いたい場合は、Apache JMeter等がつかえます。

「-n」でリクエスト数を、「-c」で同時接続数を指定します。

 $ ab -n 100 -c 100 http://localhost/
 This is ApacheBench, Version 2.3 <$Revision: 655654 $>
 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
 Licensed to The Apache Software Foundation, http://www.apache.org/
 
 Benchmarking example.com (be patient).....done
 
 
 Server Software:        Apache
 Server Hostname:        localhost
 Server Port:            80
 
 Document Path:          /
 Document Length:        13888 bytes
 
 Concurrency Level:      100
 Time taken for tests:   6.815 seconds
 Complete requests:      100
 Failed requests:        0
 Write errors:           0
 Total transferred:      1432400 bytes
 HTML transferred:       1388800 bytes
 Requests per second:    14.67  (mean)
 Time per request:       6815.211 [ms] (mean)
 Time per request:       68.152 [ms] (mean, across all concurrent requests)
 Transfer rate:          205.25 [Kbytes/sec] received
 
 Connection Times (ms)
               min  mean[+/-sd] median   max
 Connect:      119  163  25.8    163     209
 Processing:    97 3593 1900.9   3737    6696
 Waiting:       78 3569 1903.5   3691    6678
 Total:        217 3756 1914.7   3912    6815
 
 Percentage of the requests served within a certain time (ms)
   50%   3912
   66%   4911
   75%   5451
   80%   5824
   90%   6346
   95%   6646
   98%   6751
   99%   6815
  100%   6815 (longest request)
 

BASIC認証が必要な場合は「-A」で、ユーザー名:パスワードを指定します。

  ab -n 100 -c 100 -A ユーザー名:パスワード "http://localhost/param1=value1&param2=value2"

GET

  • クエリーストリングを含むURLを「”」でくくります
  •  ab -n 100 -c 100 -A ユーザー名:パスワード http://localhost/?
    

    POST

    • ポストするデータをテキストファイルに記述し、「-p」でそのファイル名を、「-T」でポストするデータのContent-typeを指定します。
     ab -n 10 -c 10 -p post_data.txt -T "application/x-www-form-urlencoded" http://localhost/
    

    ポストデータファイルは以下のように記述し、URLエンコードしたものを使います。

     param1=value1&param2=value2+value3
    

    URLエンコードされたファイルを作成する例です。

     php -r 'echo urlencode("param1=value1&param2=value2+value3");' > post_data.txt
    
    • ファイルをポストする場合は下記のようになります
     ab -n 100 -c 10 -p post_file -T "multipart/form-data"