速度的に欲を言えばNginxの方が良さそう?なのですが
利便性(やっぱりhtaccessは使いたい)を考えてApacheにしています。
下手にソースコードをビルドするとその後に脆弱性が見つかったなどでアップデートするのが面倒になったりするのですが、既にそんなことせずとも何とかなりそうだったのでメモしておきます。
リポジトリ(epel + IUS)を追加
$ sudo yum -y install epel-release $ sudo rpm -ivh https://centos7.iuscommunity.org/ius-release.rpm
Apache2.4(HTTP/2対応)のインストール
$ sudo yum -y install httpd24u httpd24u-devel httpd24u-mod_ssl
設定方法は Webサーバー構築(Apache) (CentOSで自宅サーバー構築様) を参照
マルチプロセッシングモジュール (MPM)の確認
ApacheでHTTP/2を実現するためにはMPMがEVENTになっている必要がある。
以下の設定ファイルを開きMPMがEVENTになっているのを確認する。
$ sudo vi /etc/httpd/conf.modules.d/00-mpm.conf
# Select the MPM module which should be used by uncommenting exactly # one of the following LoadModule lines: # prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so # worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html # #LoadModule mpm_worker_module modules/mod_mpm_worker.so # event MPM: A variant of the worker MPM with the goal of consuming # threads only for connections with active processing # See: http://httpd.apache.org/docs/2.4/mod/event.html # LoadModule mpm_event_module modules/mod_mpm_event.so
HTTP/2用の設定ファイルを作成
設定ファイルを新規追加する。
パラメータ
- h2(TLS接続)
- h2c(非暗号接続)
- H2Direct(HTTP/2でのダイレクト接続の許容の可否)
$ sudo vi /etc/httpd/conf.d/http2.conf
<IfModule http2_module> Protocols h2 h2c http/1.1 H2Direct on </IfModule>
MariaDBのインストール
$ sudo yum -y install mariadb-server
設定方法は データベースサーバー構築(MariaDB) (CentOSで自宅サーバー構築様) を参照
PHP7.1のインストール(PHP-FPM)
$ sudo yum -y install php71u-mysqlnd php71u-fpm-httpd \ php71u-cli php71u-mcrypt php71u-gd php71u-xml \ php71u-mbstring php71u-json php71u-devel php71u-pdo \ php71u-process
PHP-FPMの設定
実行ユーザ、グループを適切なものに変更します。
実行ユーザをユーザ毎に変えたい(suPHPの様な事をしたい)場合は、その度に設定ファイルを追加してPHP-FPMを再起動してやる必要がありそうです(未確認)。
$ sudo vi /etc/php-fpm.d/www.conf
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = apache group = apache
$ sudo systemctl start php-fpm.service $ sudo systemctl enable php-fpm.service
Apache24への設定反映
基本はデフォルトで特に問題ないはずです。
$ sudo cat /etc/httpd/conf.d/php-fpm.conf
# This configuration requires httpd 2.4 with support for UDS (Unix domain # sockets). This was added upstream in version 2.4.10, and was also backported # to 2.4.6 in EL7. # The following lines prevent .user.ini files from being viewed by Web clients. <Files ".user.ini"> Require all denied </Files> # Allow php to handle Multiviews. AddType text/html .php # Add index.php to the list of files that will be served as directory indexes. DirectoryIndex index.php # Enable http authorization headers. SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1 <FilesMatch \.php$> SetHandler "proxy:fcgi://127.0.0.1:9000" #SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch>
Let’s Encryptで証明証を発行するためのコマンドをインストール
$ sudo yum -y install certbot python-certbot-apache
証明書発行時に利用する公開ディレクトリの作成と設定
Let’s Encryptがドメイン保有者からの発行依頼であることを確認するためにアクセスしにくるファイルを設置する公開ディレクトリを、サーバ内で共通の場所を使用するようにする(バラバラでも良いが、何かと面倒なので共通化)。
$ sudo mkdir -p /var/www/letsencrypt/.well-known $ sudo vi /etc/httpd/conf.d/letsencrypt.conf
Alias /.well-known /var/www/letsencrypt/.well-known
証明書の発行と自動更新
証明書を発行する
途中、色々聞かれるが特に難しい事は無い
$ sudo certbot certonly --webroot -w /var/www/letsencrypt/ -d example.net -d www.example.net
証明書を自動で更新するためにcronに以下のように設定を追加する
$ sudo vi /etc/cron.d/certbot
0 5 * * * root certbot renew --quiet
WordPressのインストール
インストール方法は ブログサイト構築(WordPress) (CentOSで自宅サーバー構築様) を参照
※ php-mysqlインストールとApacheの設定は不要
WordPressを公開するVirtual Hostの設定
HTTPで接続してきた場合はHTTPSになるようにリダイレクトします。
HSTSを指定しているので、ブラウザが覚えて常にHTTPSで接続するようになります。
$ sudo vi /etc/httpd/conf.d/virtualhost-01.www.conf
<VirtualHost *:80> ServerName example.net ServerAlias www.example.net <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </IfModule> </VirtualHost> <VirtualHost *:443> SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.net/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.net/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/example.net/chain.pem ServerName example.net ServerAlias www.example.net DocumentRoot "/var/www/html" Header set Strict-Transport-Security "max-age=31536000" </VirtualHost>
Apache24を再起動します。
$ sudo systemctl restart httpd.service
参考サイト
0 Comments.