CentOS6/CentOS7 Apache2.4.17以降へアップグレードかつHTTP2対応 SSL&phpも考慮
2019/08/07
2020/01/25
タグ: Apache2.4, CentOS6, CentOS7, http2, php, SSL, アップグレード
CentOSはバージョン6,7ともレポジトリーISUを追加してhttp2対応が必要。CentOS7はApache2.4ではあるがマイナーバージョンがhttp2に対応していない。
尚更、CentOS6は対応できていない。Ubuntu/Debian系のLinuxなら比較的簡単に入れられるのでそこがCentOSの場合面倒なところ。ちなみに秋頃にリリースされたCentOS8はデフォルトでApache+php-fpmの組み合わせでhttp2仕様になっています。特にhttp2に対応するための特別な設定は不要です。
まず最初に現在使っているhttpd2.2.xのWEBサーバとphpを外す必要があるだろう。標準のものを使っている場合はremiの進んだバージョンのphpを使っている
場合もあるだろうが概ね下記のような感じで依存関係もチェックしながら外してゆく。その後にISUのレポジトリーを追加してhttp2対応のhttpd2.4を導入する。
このバージョンではmod_phpが古いhttpdでなければ動かないようなのでphpはfastCGIを使った方法に変更する。
現行環境の削除、レポジトリー追加とapache2.4(http2対応バージョン)+fastCGI導入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# yum remove httpd # yum remove php* # yum remove httpd-tools* mod_php* # yum install https://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-15.ius.centos6.noarch.rpm <--CentOS6の場合 # yum install https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/ius-release-1.0-15.ius.centos7.noarch.rpm <--CentOS7の場合 # vi /etc/yum.repos.d/ius.repo 一箇所編集 enabled = 1 ===> enabled =0 # yum --disablerepo=base,extras,updates --enablerepo=ius install httpd # yum --disablerepo=base,extras,updates --enablerepo=ius install httpd-devel mod_ssl # yum install php71u-fpm-httpd # yum --disablerepo=base,extras,updates --enablerepo=ius php71u-pdo php71u-mysqlnd php71u-xml php71u-mcrypt php71u-mbstring php71u-cli php71u-gd php71u-common |
※httpd2対応のモジュールロード設定は/etc/httpd/conf.modules.d/00-base.confに追加されています。
プロセスをevent型に切り替える
httpd2対応にはhttpdプロセスのprefork型の動作では駄目です。event型に切り替える必要があります。
1 2 3 4 5 6 7 |
# vi /etc/httpd/conf.modules.d/00-mpm.conf 編集して下記のようにpreforkをコメントアウト(無効)してください。 そのかわりにeventモジュールをコメントremoveしてください。 #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so LoadModule mpm_event_module modules/mod_mpm_event.so |
fastCGIの設定修正
mod_phpが使えないのでfastCGI経由でphpを動作させます。それにあたり基本設定の動作ユーザをapacheに切り替えます。
1 2 3 4 5 6 |
# vi /etc/php-fpm.d/www.conf 以下の二箇所をapacheに変更する。 user = apache group = apache |
仮想サーバ設定にhttp2動作のためのデイレクティブ追加
1 2 3 4 5 6 7 8 9 10 |
# vi /etc/httpd/conf.d/http2.conf 途中省略 下記を/etc/httpd/conf.d配下にhttp2.confで配置してください。 <IfModule http2_module> Protocols h2 h2c http/1.1 H2Direct on </IfModule> |
eventモジュールのパラメータ設定
Apache2.4ではMaxClientsがMaxRequestWorkersに変わっています。
/etc/httpd/conf.dの配下にmpm_event.confのような名前で配置します
1 2 3 4 5 6 7 8 |
<IfModule mpm_event_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 50 ThreadsPerChild 50 MaxRequestWorkers 50 MaxConnectionsPerChild 2500 </IfModule> |
fastcgiのプロキシー設定
fastcgiとapacheをつなぐ設定です。これがないとphpが動きません。
proxyfcgi.confのような名前で/etc/httpd/conf.dに配置してください
1 2 3 4 5 6 7 8 9 10 11 12 13 |
AddHandler application/x-httpd-php php <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" </FilesMatch> <Proxy fcgi://127.0.0.1:9000> ProxySet connectiontimeout=5 timeout=240 </Proxy> RewriteCond %{REQUEST_FILENAME} \.php$ RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_URI} !-f RewriteRule (.*) - [H=text/html] |
サーバの起動
1 2 |
# service php-fpm start # service httpd start |
http2になっているかチェックする。
http2に対応していることがブラウザの検証ツールで確認できます。 またレスポンスヘッダーを見て確認する事もできます。PHPが使えなかったりhttp/1.1のままになっている方は何が原因?
それはopensslが古いままだからです。openssl1.0.2以降を使いましょう。あるいはapacheとphp-fpmの連携が噛み合っていない場合もありえます。phpのバージョンとphp-fpmのバージョンがマッチしてなかったりすることもあるので確認してみましょう。Apacheではfastcgiの連携にproxyを経由します。その設定が適切に行えてなければ連携できていません。なければ自分でproxyfcgi.confを仮想サーバディレクトリで作成して連携させてください。