○ httpd/phpのインストール

・WEBサーバを構築します
・httpd-2.4.26をソースからインストールし、設定します
・php-5.6.30をソースからインストールし、設定します
・charsetはhttpd、php共にUTF-8で運営します
・suexecオプションを有効にしています
・運営・管理は各自の考えを元にお願いします
・make はメンテナンスマシンで行っています

PHP 5.4.x から PHP 5.5.x への移行を参照してください
PHP 5.5.x から PHP 5.6.x への移行を参照してください

・新規インストールした openssl を使います
・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:httpd-2.4.26.tar.bz2  (http://httpd.apache.org/)
:apr-1.6.2.tar.bz2 (http://apr.apache.org/)
:apr-util-1.6.0.tar.bz2 
:php-5.6.30.tar.bz2 (http://www.php.net/)
:re2c-0.16.tar.gz (https://sourceforge.net/projects/re2c/)

○参照ファイル

パッケージの追加
最初の設定 (Xen)
opensslのインストール

○インストール環境

:OS CentOS 6.9
:selinux disabled or permissive
:インストール先  httpd: /usr/local/apache2  /home/www
:  php: /usr/local/lib /usr/local/include
:作業 ~/src
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスは一般ユーザから行います

○仮設定
:User apache
:Group apache
:DocumentRoot  /home/www/htdocs
:管理ユーザ sola



○httpd-2.4.26

○既存環境の保存

[root@jupiter:~]
# service httpd stop
# mv /etc/httpd /etc/httpd2231
# mv /usr/local/apache2 /usr/local/apache2231
# mv /usr/local/lib/php /usr/local/lib/php5445

○httpdユーザ (apache) を登録します

uid/gid情報を参照
・/home/wwwディレクトリを作ります

[root@jupiter:~]
# groupadd -g 48 apache
# useradd -M -u 48 -g 48 -d /home/www -s /sbin/nologin apache
# mkdir -p /home/www/myhome/{cgi-bin,linux,hobby,archi}
# chown -R apache:apache /home/www

○httpdソースの展開・インストール

・configureオプションで指定がない場合、eventモードでインストールされます
・OSの指定がない場合、config.layoutの<Layout Apache>を読み込みます
・apr,apr-utilはソースをコピーし、--with-included-aprオプションで組み込みます
・オプションの設定を間違えないようにスクリプトを作り、configureを実行します

# cd ~/src
[root@jupiter:~/src]
# tar jxf httpd-2.4.26.tar.bz2
# tar jxf apr-1.6.2.tar.bz2
# tar jxf apr-util-1.6.0.tar.bz2
# mv apr-1.6.2 httpd-2.4.26/srclib/apr
# mv apr-util-1.6.0 httpd-2.4.26/srclib/apr-util
# chown -R root:root httpd-2.4.26
# cd httpd-2.4.26
[root@jupiter:~/src/httpd-2.4.26]

・config.layoutを一部修正します (下記)

# vi config.layout

・コンフィグシェルスクリプトの実行
・同じディレクトリで実行します
httpd24cfg.sh (詳細別記)

# source httpd24cfg.sh

・コンパイル

# make

・インストール (アップデートは別項参照)

# make install

・起動ファイルなどのコピー

# cp build/rpm/httpd.init /etc/init.d/httpd
# cp build/rpm/htcacheclean.init /etc/init.d/htcacheclean
# cp build/rpm/httpd.logrotate /etc/logrotate.d/httpd
# cd ~/src
[root@jupiter:~/src]
# tar jcf httpd-2.4.26-170621.tar.bz2 httpd-2.4.26/

・cache_disk用ディレクトリの作成 (必要な場合)

# mkdir /var/cache/httpd
# chown apache:apache /var/cache/httpd

シンボリックリンクの作成 (必要な場合)

# cd /usr/local/apache2
[root@jupiter:/usr/local/apache2]
# ln -s /var/log/httpd logs

○アップデート

・新規インストールの場合は、次項へ進みます
・ソースの展開・コンパイルの表記は略します

・設定ファイル(旧)を保存します

# cp -a /etc/httpd ~/src/httpd2425

・アップデート

# cd ~/src/httpd-2.4.26
[root@jupiter:~/src/httpd-2.4.26]
# make install

・新旧の設定ファイルの差分を取り、必要があれば設定ファイルを修正します
・(アップデートではoriginal部分のみ修正されます)

# cd ~/src
[root@jupiter:~/src]
# cp -a /etc/httpd httpd2426
# diff -urp httpd2425 httpd2426

・設定ファイルを検査し、再起動します

# service httpd configtest
# service httpd restart
# service htcacheclean restart

:config.layout

・Layout ApacheをコピーしてLayout Apache2を作ります
・OSの再インストールに備えてdatadirを/home/wwwに移します
・installbuilddirをprefix指定のディレクトリに移します

<Layout Apache2>
    prefix:        /usr/local/apache2
    exec_prefix:   ${prefix}
    bindir:        ${exec_prefix}/bin
    sbindir:       ${exec_prefix}/bin
    libdir:        ${exec_prefix}/lib
    libexecdir:    ${exec_prefix}/modules
    mandir:        ${prefix}/man
    sysconfdir:    /etc/httpd/conf
    datadir:       /home/www
    installbuilddir: ${prefix}/build
    errordir:      ${datadir}/error
    iconsdir:      ${datadir}/icons
    htdocsdir:     ${datadir}/htdocs
    manualdir:     ${datadir}/manual
    cgidir:        ${datadir}/cgi-bin
    includedir:    ${prefix}/include
    localstatedir: /var
    runtimedir:    ${localstatedir}/run
    logfiledir:    ${localstatedir}/log/httpd
    proxycachedir: ${localstatedir}/cache/httpd
</Layout>



○php-5.6.30

○re2cのインストール

・phpのconfigureで警告がでるので念の為入れておく

・rpmパッケージの削除 (存在する場合)

# yum erase re2c

・ソースの展開・コンパイル

# cd ~/src
[root@jupiter:~/src]
# tar zxf re2c-0.16.tar.gz
# chown -R root:root re2c-0.16
# cd re2c-0.16
[root@jupiter:~/src/re2c-0.16]
# ./configure
# make

・インストール

# make install

# cd ..
[root@jupiter:~/src]
# tar jcf re2c-0.16-160531.tar.bz2 re2c-0.16/

○phpソースの展開・インストール

・オプションの設定を間違えないようにスクリプトを作り、configureを実行します
・httpdがpreforkモード以外の場合、特別なオプションの設定が必要です

# cd ~/src
[root@jupiter:~/src]
# tar jxvf php-5.6.30.tar.bz2
# chown -R root:root php-5.6.30
# cd php-5.6.30
[root@jupiter:~/src/php-5.6.30]
# make distclean

・コンフィグシェルスクリプトの実行
・同じディレクトリで実行します
php56cfg.sh (詳細別記)

# source php56cfg.sh

・コンパイル

# make

・テスト&インストール (アップデートは別項参照)

# make test
# make install

・設定ファイルをコピーします

# cp php.ini-production /etc/php.ini

・ディレクトリ・ログファイルの作成

# mkdir /etc/php.d
# touch /var/log/httpd/php_log
# chown apache:apache /var/log/httpd/php_log

・デフォルト設定ファイルを保存しておきます

# mkdir ~/src/php5630
# cp -a {php.ini-development,php.ini-production} ~/src/php5630

# cd ~/src
[root@jupiter:~/src]
# tar jcf php-5.6.30-170125.tar.bz2 php-5.6.30/

○アップデート

・新規インストールの場合は、次項へ進みます
・ソースの展開・コンパイルの表記は略します

・testの実行の前に、既存のphp.iniファイルがあるなら、リネームしておく

# mv /etc/php.ini /etc/php.ini.bak

・テスト&アップデート

# cd ~/src/php-5.6.30
[root@jupiter:~/src/php-5.6.30]
# make test
# make install

・新旧のデフォルト設定ファイルの差分を取り、必要があれば設定ファイルを修正します

# mkdir ~/src/php5630
# cp -a {php.ini-development,php.ini-production} ~/src/php5630
# cd ~/src
[root@jupiter:~/src]
# diff -urp php5629 php5630

・httpdの再起動

# mv /etc/php.ini.bak /etc/php.ini
# service httpd configtest
# service httpd restart



○configファイルの設定

○httpd.conf

/etc/httpd/conf/httpd.conf
/etc/httpd/conf/extra/httpd-modules.conf
/etc/httpd/conf/extra/httpd-mpm.conf
/etc/httpd/conf/extra/httpd-info.conf
/etc/httpd/conf/extra/httpd-default.conf
/etc/httpd/conf/extra/httpd-php.conf
/etc/httpd/conf/extra/httpd-personal.conf

○php.ini

/etc/php.ini

○error_logの出力調整

・httpd-2.4では"ErrorLogFormat"でerror_logを調整できます
・%{u}t デフォルトではカレントタイムにマイクロ秒を出力します

・変更前

# default format for threaded MPMs 2.4マニュアル(英語)より
ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"

・エラーログ(変更前)

[Sun Mar 13 05:02:35.163292 2016] [mpm_event:notice] [pid 1662:tid 3074382432] AH00489: 
Apache/2.4.18 (Unix) OpenSSL/1.0.1k-fips configured -- resuming normal operations

・変更後

ErrorLogFormat "[%t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"

・エラーログ(変更後)

[Fri Mar 18 12:52:42 2016] [mpm_event:notice] [pid 11032:tid 3074796128] AH00489: 
Apache/2.4.18 (Unix) OpenSSL/1.0.1k-fips configured -- resuming normal operations



○httpd(apache)の起動

○/home/wwwのユーザ・グループ・アクセス権を変更

# cd ~
[root@jupiter:~]
# chown -R apache:apache /home/www
# find /home/www -type f | xargs chmod g-w,o-rwx
# find /home/www -type d | xargs chmod g-rw,o-rw

○httpd起動スクリプトの修正

・省略

#
# httpd        Startup script for the Apache Web Server
#
# chkconfig: 235 85 15
# description: The Apache HTTP Server is an efficient and extensible  \
#             server implementing the current HTTP standards.
# processname: httpd

・省略

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

httpd=${HTTPD-/usr/local/apache2/bin/httpd}
pidfile=${PIDFILE-/var/run/${prog}.pid}
lockfile=${LOCKFILE-/var/lock/subsys/${prog}}
RETVAL=0

・省略


○htcacheclean起動スクリプトの修正

・cache_diskを定期的に縮小するスクリプトです
・cache_diskの設定に合わせて修正します

・省略

#
# htcacheclean    Startup script for the Apache cache cleaner
#
# chkconfig: 235 85 15
# description: The Apache htcacheclean daemon maintains and prunes the
#              size of the mod_cache_disk cache directory.
# processname: htcacheclean

・省略

# Path to htcacheclean, server binary, and short-form for messages.
htcacheclean=${HTTPD-/usr/local/apache2/bin/htcacheclean}
lockfile=${LOCKFILE-/var/lock/subsys/${prog}}
pidfile=/var/run/${prog}.pid
interval=${INTERVAL-10}
cachepath=${CACHEPATH-/var/cache/httpd}
limit=${LIMIT-100M}
RETVAL=0

・省略


○selinuxヘの対応 (selinuxが有効の場合)

・新規インストールファイルのselinuxラベルを修正

[root@jupiter:~]
# restorecon -Rv /etc
# restorecon -Rv /usr/local
# restorecon -FRv /home/www
# restorecon -Rv /var

○自動起動登録をonにし、httpd, htcacheclean を起動します

[root@jupiter:~]
# chkconfig --add httpd

・startする前にhttpd.confのチェックしておきます

# service httpd configtest
# service httpd start

・htcachecleanを起動します (必要な場合)

# chkconfig --add htcacheclean
# service htcacheclean start

○iptablesの設定

Netfilter (iptables) で制御している場合、ポートを開けてください

Netfilter (iptables) の設定参照

・外へのポートは公開するときに開けます

○apacheの起動確認

・2ndマシンからサーバにアクセスします
 URL http://192.168.0.21:80

○phpの起動確認

・test.phpを作りドキュメントルートに置いて実行します
・php.ini の disable_functions で phpinfo を指定すると表示されません

<?php phpinfo(); ?>

○ Copyright(c) 528p.com All Rights Reserved.