2012年5月25日金曜日

Apache2.2 ソースからインストール

CentOSにApacheをソースからインストール(今更ですが・・・きちんと記載したことがなくて)

●構成

  • CentOS 6.2(x86)
  • Apache 2.2.22
CentOSは、以前VMwareへインストールした構成を使います。詳しくはこちらからどうぞ

CentOSは、Minimal構成でパッケージ群から"Base"," Development Tools "をインストールしています。ソースからインストールするにはコンパイラーなど必要となるため必ず開発ツール群をインストールしておきます。

インストールされているか調べる
# yum grouplist
  ・
  ・
Installed Groups: ←インストール済のパッケージ群
   Base
   Development tools ←これです
   E-mail server
   Graphical Administration Tools
   Hardware monitoring utilities
   Legacy UNIX compatibility
   Networking Tools
   Performance Tools
   Perl Support
Available Groups: ←インストール可能なパッケージ群
   Additional Development
   Backup Client
   Backup Server
   CIFS file server
  ・
  ・
  ・

もしなければインストールします。
# yum groupinstall "Development Tools";

また、Apacheの動作が確認できるまでは、Firewall関係をOFFにしておくことをお勧めします。

●Apacheのインストール

  • インストールディレクトリ: /usr/local/apache
  • インストール作業ディレクトリ:/usr/local/src
  • Dynamic Shared Object(DSO):有効
zlib-develが必要になるのでインストールされているか調べます。
# rpm -qa | grep zlib-devel

何も表示されなければインストールされていません。
# yum install zlib-devel

# cd /usr/local/src
# wget http://archive.apache.org/dist/httpd/httpd-2.2.22.tar.gz
# tar zxvf ./httpd-2.2.22.tar.gz
# cd ./httpd-2.2.22
# ./configure --prefix=/usr/local/apache --enable-so --enable-mods-shared=all
※基本的な構成ですので必要なものがありましたらオプションを追加指定してください。
 詳しくは ./configure --help で確認してください。

エラーが出ていないか注意してください。
# make
# make install

●設定(超最低限です)
# vi /usr/local/apache/conf/httpd.conf

ServerAdmin info@example.com ←エラー表示などで問い合わせ先として利用される管理者Email
ServerName www.example.com:80 ←ホスト名:ポートで指定
編集おわり

●起動・停止チェック
# /usr/local/apache/bin/apachectl start

※Firewall設定にて80ポートを許可されているかチェック!

ブラウザでアクセスしてIt works!と表示されればOKです。

# /usr/local/apache/bin/apachectl stop

●ログファイルのローテーション
このままではひとつのログファイルに延々書き込んでいくため肥大化してしまいます。
定期的にログファイルを取り換えるようしていきます。ここでは3か月分残しておく

# vi /etc/logrotate.d/apache

/usr/local/apache/logs/*_log {

  rotate 12  ←12世代を残す

  weekly    ←1週間ごとに交換

  compress  ←圧縮処理(ディスク容量を圧迫するようなら)

  missingok

  sharedscripts

  postrotate

    /bin/kill -USR1 `cat /usr/local/apache/logs/httpd.pid 2>/dev/null` 2> /dev/null || true
  endscript
}
編集おわり

●自動起動設定
OSが起動されるときApacheも自動的に起動されるようにします。
# cp -rP /usr/local/src/httpd-2.2.22/build/rpm/httpd.init /etc/rc.d/init.d/httpd
# chmod 755 /etc/rc.d/init.d/httpd

スクリプトはrpm用なので一部パスを書き換えます。
# vi /etc/rc.d/init.d/httpd
60行目付近
#httpd=${HTTPD-/usr/sbin/httpd}  ←コメント
#pidfile=${PIDFILE-/var/log/httpd/${prog}.pid} ←コメント
httpd=${HTTPD-/usr/local/apache/bin/httpd} ←追記
pidfile=${PIDFILE-/usr/local/apache/logs/httpd.pid} ←追記

70行目付近
#CONFFILE=/etc/httpd/conf/httpd.conf ←コメント
CONFFILE=/usr/local/apache/conf/httpd.conf ←追記
編集おわり

サービスにhttpdを追加して起動ONにします。(ファイル名)
# chkconfig --add httpd
# chkconfig httpd on
# chkconfig --list | grep httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

現在動いている場合は、一度止めます。
# /usr/local/apache/bin/apachectl stop

init.dで起動・再起動・停止してみます。

# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]



# /etc/init.d/httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]



# /etc/init.d/httpd stop

Stopping httpd:                                            [  OK  ]

特殊な再起動(閲覧ユーザにやさしい再起動)
# /etc/init.d/httpd graceful
Gracefully restarting httpd: 
これは現在接続中のセッションがある場合、いきなりブラウジング中断されないよう接続されていないものから再起動していくようにする。特にアクセスの多いサイトでは必要になると思います。

OSを再起動して自動起動されるか確認しましょう。
LAN使用ならこのままでも構わないが、外部へ公開する場合にはもう少しカスタマイズした方がいいです。

●少しセキュリティを強化
# vi /usr/local/apache/conf/httpd.conf
サーバルートに対してアクセスをさせない
<Directory />
 #Options FollowSymLinks ←コメント
 Options None ←追記
 
 AllowOverride None
 
 #Order deny,allow ←コメント
 Order allow,deny ←追記
 
 Deny from all

</Directory>

<Directory "/usr/local/apache/htdocs">
 #Options Indexes FollowSymLinks ←コメント
 Options None ←追記
 
 ・
</Directory>

<IfModule alias_module>
 ・
 ・
 #ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" ←コメント
</Directory>

Include conf/extra/httpd-default.conf ←コメントを取る

# vi /usr/local/apache/conf/extra/httpd-default.conf 
#ServerTokens Full ←コメント
ServerTokens Prod ←追記

#ServerSignature On ←コメント
ServerSignature Off ←追記

TraceEnable Off ←追記

Apacheを再起動


●その他
Apacheの運用ユーザを別途作成する。
# adduser apache

# vi /usr/local/apache/conf/httpd.conf

#User daemon ←コメント

#Group daemon ←コメント
User apache ←追記
Group apache ←追記
編集おわり

ユーザディレクトリを公開してhttp://www.example.com/~ユーザ名/でもアクセスできるようにする。
# vi /usr/local/apache/conf/httpd.conf
Include conf/extra/httpd-userdir.conf ←コメントを取る

# vi /usr/local/apache/conf/extra/httpd-userdir.conf


<Directory "/home/*/public_html">

    #AllowOverride FileInfo AuthConfig Limit Indexes ←コメント
    #Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ←コメント
    AllowOverride None ←追記
    Options None ←追記
   <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
   </Limit>
   <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
   </LimitExcept>
</Directory>

編集おわり

# mkdir /home/hoge/public_html ←存在しなければ
# chmod 711 /home/hoge/
# chmod 755 /home/hoge/public_html


ログの制御、バーチャルホストなどあるが基本的な部分ということで・・・おしまいです。

追記
Apacheが起動できない?

# /usr/local/apache/bin/apachectl start
こんな風に出力されればそれを修正すれば良い
Syntax error on line 156 of /usr/local/apache/conf/httpd.conf:
DocumentRoot must be a directory

修正後はチェック
# /usr/local/apache/bin/apachectl configtest
Syntax OK

# /usr/local/apache/bin/apachectl start
エラーは出力されないが、起動しない?

Apacheのエラーログをチェック
# cat  /usr/local/apache/logs/error_log
[alert] (EAI 2)Name or service not known: mod_unique_id: unable to find IPv4 address of "www.exsample.com"

こんなエラーの場合、hostnameで表示されたホスト名は名前解決できてるでしょうか。
# hostname
www.exsample.com

※/etc/sysconfig/network内に記述されているHOSTNAMEが表示されます。

表示されるIPアドレスは正しい?
# nslookup www.exsample.com
***.***.***.***

その自鯖に振られているIPとnslookupの結果は同じIPですか?合わせましょう。

どうしても違うIPにしなければいけない場合は/etc/hostsにwww.exsample.comを127.0.0.1として追加してnetworkをリスタートします。
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhos www.exsample.com

hostnameの結果がlocalhostの場合、自鯖の/etc/hostsを確認して
127.0.0.1 localhost.localdomain localhosがあれば良い。

0 件のコメント:

Google検索