自分で作ったり提供したりするものは、まず自分自身で使ってみろろということです。自分じゃ使わないものなら人はいくらでも無責任にも無思考にもなれる。そういう投げやりな「サービス」やら「プロダクツ」なんて、だれだってイヤだ。自分が作り手と同時に利用者の立場になれば、ちゃんと使えるレベルのものを提供しようとします。

2012年8月28日火曜日

Apacheノーハウ(Ubuntu)

●Ubuntu Apacheインストール
sudo apt-get install apache2

パッケージ内容:
apache2.2-common (= 2.2.22-1ubuntu1)
apache2-mpm-worker (= 2.2.22-1ubuntu1)
apache2-mpm-prefork (= 2.2.22-1ubuntu1)
apache2-mpm-event (= 2.2.22-1ubuntu1)
apache2-mpm-itk (= 2.2.22-1ubuntu1)

●Apacheフォルダ説明
インストールフォルダ:/etc/apache2

apache2.conf―グローバル設定ファイル、基本は修正しない
conf.d/―普通の設定内容
envvars―環境変数、基本は修正しない
httpd.conf―ユーザー設定ファイル
magic―MIME設定、基本は修正しない
mods-available/―インストールされたモジュール
mods-enabled/―起用されたモジュール
ports.conf―httpdサービスポート
sites-available/―利用可能なバーチャルホスト
sites-enabled/―利用中のバーチャルホスト

●モジュール

未使用モジュール確認
sudo a2enmod

使用中モジュール確認
sudo a2dismod

新しいモジュール検索とインストール
sudo apt-cache search libapache2-mod
sudo apt-get install <libapache2-mod-XXX>

●ウェブフォルダ
基本はウェブフォルダは【/var/www】(DocumentRoot)となります、拡張性を考慮するため、下記のように構成するほうがいいでしょう。

/var/www/www.example1.com
/var/www/www.example2.com
/var/www/www.example3.com

●ウェブサイト起用
sudo a2ensite
sudo a2dissite

●バーチャルホスト
http://komanew.blogspot.jp/2011/11/apache-virutalhost.html

●SSL
SSL起用手順:
①mod_sslを有効にする
sudo a2enmod ssl
sudo service apache2 restart
②ドメイン証明書を作成、インストールする
ビジネス運用場合はCAに申請する
③バーチャルホスト設定ファイルを修正し、Apapcheサービスを再起動する
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>

■ドメイン証明書作成
openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

●Rewrite
すべてのhttpリクエストをhttpsにリライトする
sudo nano -wci /etc/apache2/sites-available/default

#VirtualHostタブの中に下記を追加する
...
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)?$ https://%{HTTP_HOST}$1 [R,L]
...

●負荷テスト(Apache ab)
ab -n 100 -c 10 http://xxx.xxx.xxx.xxx/

-n 数値:リクエストの回数を指定
-c 数値:同時に発行するリクエストの数を指定
-A ユーザ名:パスワード(ベーシック認証に必要なユーザ情報を指定)

●セキュリティ
①Apacheバージョン情報を隠す
sudo nano -wc /etc/apache2/conf.d/security

編集内容:
ServerTokens Prod

確認方法:
telnet xxx.xxx.xxx.xxx 80
HEAD / HTTP/1.0

②必要ないモジュールを禁止
sudo a2dismod

③DDos攻撃を弱める
sudo apt-get install libapache2-mod-evasive
sudo nano -wc /etc/apache2/conf.d/evasive

<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10

#DOSEmailNotify you@yourdomain.com
#DOSSystemCommand "su - someuser -c '/sbin/... %s ...'"
DOSLogDir "/var/lock/mod_evasive"

DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*
</IfModule>

DDos攻撃テスト
cd /usr/share/doc/libapache2-mod-evasive/examples
perl test.pl

●アクセスIP限定
<Location /jsp/>
    ProxyPass ajp://localhost:8009/jsp/
    <Limit GET POST PUT> 
        Order Deny,Allow
        Deny From all
        Allow From 192.168.1.1
    </Limit> 
</Location>

●パフォーマンス
sudo nano -wciE /etc/apache2/apache2.conf
...
#KeepAliveTimeout 5
KeepAliveTimeout 3
...

●圧縮転送
sudo a2enmod deflate
sudo nano -wciE /etc/apache2/sites-available/default
...
#DeflateFilterNote Input input_info
#DeflateFilterNote Output output_info
#DeflateFilterNote Ratio ratio_info
#LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
#CustomLog /var/log/apache2/deflate_log deflate
...
sudo service apache2 restart

●キャッシュ(disk)
sudo a2enmod disk_cache
sudo nano -wciE /etc/apache2/sites-available/default
...
<IfModule mod_disk_cache.c>
CacheEnable disk /
CacheRoot /var/www/cache
CacheDefaultExpire 3600
CacheMaxExpire 3600
</IfModule>
...
sudo mkdir /var/tomcat/webapps/cache
sudo chown www-data.www-data /var/tomcat/webapps/cache
sudo service apache2 restart

●キャッシュ(memory)
sudo a2enmod mem_cache
sudo nano -wciE /etc/apache2/sites-available/default
...
<IfModule mod_mem_cache.c>
CacheEnable mem /
CacheDefaultExpire 3600
CacheMaxExpire 3600
</IfModule>
...
sudo service apache2 restart

■AWStats
sudo apt-get install awstats

sudo nano -wciE /etc/default/awstats
...
#AWSTATS_LANG="en"
AWSTATS_LANG="jp"
...

sudo nano -wciE /etc/awstats/awstats.conf
...
LogFile="/var/log/apache2/access.log"
SiteDomain="yourdomain.ext"
HostAliases="localhost 127.0.0.1 yourdomain.ext"
...

sudo nano -wciE /etc/apache2/conf.d/awstats
...
Alias /awstatsclasses "/usr/share/awstats/lib/"
Alias /awstats-icon/ "/usr/share/awstats/icon/"
Alias /awstatscss "/usr/share/doc/awstats/examples/css"
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ScriptAlias /awstats/ /usr/lib/cgi-bin/
Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
...

sudo service apache2 restart

#awstats収集のため
sudo nano /etc/logrotate.d/apache2
create 640 root adm ⇒ create 644 root adm

sudo chmod 755 /var/log/apache2
sudo chmod 644 -R /var/log/apache2/*

Done!

/usr/lib/cgi-bin/awstats.pl -config=yourdomain.ext -update
http://yourdomain.ext/awstats/awstats.pl

※ログ合併
各サーバーログを[/var/log]にコピーする
/var/log/access_log_web1.log
/var/log/access_log_web2.log

合併:
/usr/share/awstats/tools/logresolvemerge.pl /var/log/access_log_web* > /var/log/access_log_weball.log

0 件のコメント:

コメントを投稿

ホームページ