#author("2019-11-17T01:32:40+09:00","default:nowsky","nowsky")
*Apache [#d1379e89]
[[Apache:+http://httpd.apache.org/]]
Linux用WWWサーバの代名詞。
apache2.4からは設定方法が色々と変更されているので注意。
~
*インストール [#l4783199]
&size(16){&font(b){1. 前準備};};
ソースから入れる前にpkgconifgを統一しておく。
他の場合でもやった方がよさそうだが、書くのが面倒くさいので省略。
(Linux入れたら、とりあえずLAMP構築するだろうからここだけで大丈夫だべ)
 # cd /usr/local/lib64
 # ln -s /usr/lib64/pkgconfig .
 # cd /usr/local/lib
 # mkdir /usr/lib/pkgconfig
 # ln -s /usr/lib/pkgconfig .
後は、https通信用に[[OpenSSL>Linux/Source/OpenSSL]]も入れておく。
~
&size(16){&font(b){2. APRのインストール};};
apacheのソースと一緒にコンパイルする方法もあるらしいが、
自分の環境では上手くいかなかったので別でコンパイルする。
&size(16){&font(b){2. APRのビルド・インストール};};
apacheのソースと一緒にビルドする方法もあるらしいが、
%%自分の環境では上手くいかなかった%%ので別々にビルドする -> [[一括ビルドも出来た>#aprbuild]]
 # tar zxvf apr-1.4.6.tar.gz
 # cd apr-1.4.6
 # ./configure --prefix=/usr/local/apr
 # make
 # make test
 # make install
~
&size(16){&font(b){3. APR-Utilのインストール};};
&size(16){&font(b){3. APR-Utilのビルド・インストール};};
 # tar zxvf apr-util-1.5.1.tar.gz
 # cd apr-util-1.5.1
 # ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-util
 # make
 # make test
 # make install
~
&size(16){&font(b){4. Apacheのインストール};};
&size(16){&font(b){4. Apacheのビルド・インストール};};
initの名前を“httpd”にするとyumとかで入れた物と被ってエラーになる場合がある。
よって、今回は“apache”という名前にしてインストールする。
[[PCRE>Linux/PCRE]]がまだ入ってない場合は、apacheのソースをコンパイルする前に入れておく事。
[[PCRE>Linux/PCRE]]がまだ入ってない場合は、apacheのソースをビルドする前に入れておく事。
 # tar zxvf httpd-2.4.3.tar.gz
 # cd httpd-2.4.3
 # vi config
 
&font(b){※全部一行で書く};
 --prefix=/usr/local/apache
 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl=/usr/local/openssl --with-pcre=/usr/local/pcre
 --enable-ssl --enable-suexec --enable-rewrite --enable-auth-digest --enable-dav --enable-so

 # ./configure `cat ./config`
 # make
 # make install
~
&size(16){&font(b){5. aprとapacheの一括ビルド};};
#aname(aprbuild)
いつの間にか、ポータブルランタイムとapacheの一括ビルドが出来るようになっていた。
[[Apache PRP:+https://apr.apache.org/download.cgi]]から、apr / apr-iconv / apr-utilをダウンロードし、
それぞれを下記の様に配置すれば、apacheと同時にビルドする事が出来る。
一括ビルドを行う時は./configureに「--with-included-apr」を付与して、srclib内を参照するようにする。
 httpd-2.4.**/srclib/apr
 httpd-2.4.**/srclib/apr-iconv
 httpd-2.4.**/srclib/apr-util
~
*設定 [#i61f7aa6]
&size(16){&font(b){I. apacheスクリプトのコピー};};
 # cp /usr/local/apache/bin/apachectl /etc/init.d/apache
 # cp ${Apache_SrcDIR}/build/rpm/httpd.init /etc/init.d/apache
 # chmod 755 /etc/init.d/apache
 # ln -s /etc/init.d/apache /etc/init.d/httpd
 # ln -s ../init.d/apache /etc/rc3.d/S96apache

 
systemdの場合は次のファイルを作成する
 # vi /usr/lib/systemd/system/apache.service
 # echo 'd /var/run/apache 755 root root -' > /usr/lib/tmpfiles.d/apache.conf
 # systemctl enable apache
 # cat /usr/lib/systemd/system/apache.service
 ---
 [Unit]
 Description=The Apache HTTP Server
 After=network.target remote-fs.target nss-lookup.target
 Documentation=man:httpd(8)
 Documentation=man:apachectl(8)
 
 [Service]
 Type=simple
 PIDFile=/var/run/apache/httpd.pid
 Environment=CONFIG=/usr/local/apache/conf/httpd.conf
 ExecStart=/usr/local/apache/bin/httpd -f ${CONFIG} $OPTIONS -DFOREGROUND
 ExecReload=/usr/local/apache/bin/httpd -f ${CONFIG} $OPTIONS -k graceful
 ExecStop=/usr/local/apache/bin/httpd -f ${CONFIG} $OPTIONS -k graceful-stop
 KillSignal=SIGCONT
 PrivateTmp=true
 
 [Install]
 WantedBy=multi-user.target
 Alias=httpd.service
~
&size(16){&font(b){II. ユーザーの準備};};
 # adduser www -d /var/apache -s /sbin/nologin
 # rm -rf /var/apache
 # mkdir -p /var/apache/html
 # chown -R root.www /var/apache
~
&size(16){&font(b){III. apacheの設定};};
 # cd /usr/local/apache/conf
 
&font(b){※以下のファイルを設定していく。他は必要の応じて};
 # vi httpd.conf
 # vi extra/httpd-default.conf
 # vi extra/httpd-languages.conf
~
*アクセス制限 [#qeaec962]
apache2.2系統とapache2.4系統ではアクセス制限のやり方が変わっているので注意
&size(16){&font(b){A. apache2.2};};
全てのアクセス許可する
 Order allow,deny
 Allow from all

全てのアクセスを拒否する
 Order deny,allow
 Deny from all
~
&size(16){&font(b){B. apache2.4};};
全てのアクセスを許可する
 Require all granted

全てのアクセスを拒否する
 Require all denied
~
----
また、apache2.2系統でIPv6をAllow/Denyすると、バグ影響で細かいIPv6指定が出来ない。
内部処理的には、IPv6アドレスを指定してもIPを2進数に直した際の前方完全一致となる為、
&font(b){広範囲のIPv6アドレス制御};しか出来なくなる
-参考:[[CentOS bugs:+https://bugs.centos.org/view.php?id=9313&history=1]]
-参考:[[serverfault:+https://serverfault.com/questions/484239/apache-ipv4-deny-directive-blocks-ipv6-addresses]]
 0010 1010 . 0000 0001 . 000 |
    42     .     1     . 0   |
 
 0010 1010   0000 0001 : 000 | 0 0001 1110 1000
          2a01         :     |  1e8
                             |
                             ^ cut here

バグを回避する場合は、APR-v1.4.7以上にアップデートするか、
apache2.4系にアップグレードすると修正されている。
~
*モジュール改変 [#jca360bb]
一部のApacheモジュールはApache2.2用に作られている為、
APIが大幅に変更されたApache2.4ではビルドが通らず、追加インストール出来ない物がある。
しかし、有名なモジュールについてはCentOSやopenSUSE辺りが、
Apache2.4でもビルド出来るようにするパッチをリリースしているので、それらを当てればビルドが通る様になる。
~
&size(16){&font(b){mod_auth_kerb};};
ApacheでSingleSign-Onを実装する場合に必須となるモジュール
パッケージ管理で入れる時は自動でインストール出来るのだが、
Apacheをソースからインストールしている時は、モジュールもビルドする必要がある。
 
&font(b){・ドキュメント類};
| ドキュメント     | [[Kerberos Module for Apache:+http://modauthkerb.sourceforge.net/]]                |
| オリジナルソース | [[sourceforge:+https://sourceforge.net/projects/modauthkerb/files/mod_auth_kerb/]] |
| 適用ファイル名   | mod_auth_kerb-5.4.tar.gz                                                           |
 
&font(b){・オリジナルパッチ};
|ディストリ|パッチ配布元|適用済みパッチリスト|
|CentOS|[[httpd24-mod_auth_kerb:+https://git.centos.org/tree/rpms!httpd24-mod_auth_kerb.git/b2b3b1132acba0201623b58fc0ad1a3e9e8dc3f2/SOURCES;jsessionid=1nf4zqhuagt051k2g9mccxzqm1]]|delegation.patch|
|~|~|fixes.patch|
|~|~|handle-continue.patch|
|~|~|httpd24.patch|
|~|~|longuser.patch|
|~|~|rcopshack.patch|
|~|~|s4u2proxy.patch|
|openSUSE|[[Kerberos Module for Apache:+https://build.opensuse.org/package/show/Apache:Modules/apache2-mod_auth_kerb]]|configure.patch|
|~|~|cache_auth.patch|
 
&font(b){・適用方法};
 [1] オリジナルソース(mod_auth_kerb-5.4.tar.gz)をダウンロード
 [2] パッチ適用済みソース(mod_auth_kerb-5.4.src_patch.tar.gz)を下記添付ファイルリストからダウンロード
 [3] ダウンロードした2つのファイルを解凍
 [4] パッチ適用済みソースの(README、configure.in、src/mod_auth_kerb.c)をオリジナルに上書き
 -----
 $ md5sum mod_auth_kerb-5.4.src_patch.tar.gz 
 e9260e537e498b88429074c12185e817  mod_auth_kerb-5.4.src_patch.tar.gz