表題の通り。できたので、やり方をまとめておきます。
参考にしたページ
Amazon公式
(1) チュートリアル: Amazon Linux 2 に LAMP ウェブサーバーをインストールする
(2) チュートリアル: Amazon Linux を使った WordPress ブログのホスティング
(3) チュートリアル: Amazon Linux 2 で SSL/TLS を使用できるように Apache ウェブサーバーを設定する
Nginx公式
(5) Installation
(4) Installing WordPress with NGINX Unit
site1.com, site2.com の2サイトを作成する。DNS設定はすでにこのサーバー向きに設定されているとする。
(ステップ1) ミドルウェアのインストールと初期設定
MariaDB, PHP, Nginx
AL2用のNginx Unitのバイナリが5.4対応のためPHP 5.4をインストールする
sudo yum update -y
sudo yum install -y mariadb-server php php-devel php-mysqlnd
sudo amazon-linux-extras install nginx1.12
// 起動もここで行う
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl start nginx
sudo systemctl enable nginx
// MariaDBの初期設定
sudo mysql_secure_installation
*** 適当に全てyと応える。rootユーザのパスワードも設定する。***
Nginx Unit
sudo vi /etc/yum.repos.d/unit.repo
[unit]
name=unit repo
baseurl=https://packages.nginx.org/unit/amzn2/$releasever/$basearch/
gpgcheck=0
enabled=1
sudo yum install -y unit unit-devel unit-php
// 起動
sudo systemctl start unit
sudo systemctl enavle unit
// Nginx Unitの PHP用初期設定
sudo curl -X PUT --data-binary @/usr/share/doc/unit-php/examples/unit.config --unix-socket /var/run/unit/control.sock http://localhost/config
(ステップ2) WordPressのインストール
今回は /var/www/site1
, /var/www/site2
のように配置する。ステップ2は普通のWordPress導入と同じで特別なことはない。
(既存WordPressの引越しの場合、データベースのダンプをMariaDBに入れ、wordpress
フォルダを丸々site1
などの名前でここに置き、パーミッションをいい感じにnginxに付ける(後述)。)
以下新規の場合
WordPress本体の配置
// 最新のWordPressを持ってくる
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
// 2サイト分コピー
sudo mkdir /var/www/site1
sudo cp -r wordpress/* /var/www/site1/
sudo mkdir /var/www/site2
sudo cp -r wordpress/* /var/www/site2/
// パーミッション設定
sudo usermod -a -G nginx ec2-user
sudo chown -R nginx /var/www
sudo chgrp -R nginx /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
DBの作成
mysql -u root -p
> CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
> CREATE DATABASE `wordpress-db`;
> FLUSH PRIVILEGES;
// これをもう1サイト分
> CREATE USER 'wordpress-user2'@'localhost' IDENTIFIED BY 'your_strong_password2';
> CREATE DATABASE `wordpress-db2`;
> FLUSH PRIVILEGES;
wp-confgの設定
以下作業はsite1
についてのみ。site2
についても同様に行う。
cd /var/www/site1
cp wp-config-sample.php wp-config.php
vi wp-config.php
// 更新が必要な行のみを記している。
define('DB_NAME', 'wordpress-db');
define('DB_USER', 'wordpress-user');
define('DB_PASSWORD', 'your_strong_password');
define('AUTH_KEY', 'Yv+g6TVojj-:49!Gye?<$#-.6y`w)v^>Em&7.L!|x##n>,D<g*K;wQTIDNtz&jj<');
define('SECURE_AUTH_KEY', 'qCrymu+AJu.W3$7HVD-WF]XCL_z4P+C`O-;mV tk`@XPXO`0%0K%}((r3-z(m-(M');
define('LOGGED_IN_KEY', '6<R7 vXjj PVb-)Bnm2-GgH-NGXnYhWxi!6^6BR>HbG~c5wLe~g&m[m~o?DR`j<&');
define('NONCE_KEY', '@*|zA-#8bB+kD,1~Tfv9UtHm+*|BJq_ei8hC/yc>^ uZe :1%RN6I&LUcCbyU6!-');
define('AUTH_SALT', 'FL9X=tt~xJ}|F>S-::s[NN)_N:GR?_,86t,tl*2|tLi4eB~b9ni)0QQ?W4xia`a)');
define('SECURE_AUTH_SALT', 'P; lpAD^0?=`z||>j0C8)C+UHvjn1%(DlPA_/)E>O@HR]0OXdcYlF f/tN02nzMw');
define('LOGGED_IN_SALT', 'v&d8!DOhFaJ1Ox0%&Ej8@RH<{u.it^C8*l%Q)`CD_S/f,-SG4fFo.OWK;b ub_cO');
define('NONCE_SALT', ';dXT*@6!Y#:s|$`/ccgM{-6Xh8}0wvs-aqG&ts#(R;|ugwpkdAx!vHA#wTV0Iw1H');
(ステップ3) Nginx と Nginx Unit と WordPress の結合
Nginx Unit の設定
vi /var/www/wordpress.conf
{
"listeners": {
"127.0.0.1:8090": {
"application": "script_index_php_1"
},
"127.0.0.1:8091": {
"application": "direct_php_1"
},
"127.0.0.1:8092": {
"application": "script_index_php_2"
},
"127.0.0.1:8093": {
"application": "direct_php_2"
}
},
"applications": {
"script_index_php_1": {
"type": "php",
"processes": {
"max": 20,
"spare": 5
},
"user": "nginx",
"group": "nginx",
"root": "/var/www/site1",
"script": "index.php"
},
"direct_php_1": {
"type": "php",
"processes": {
"max": 5,
"spare": 0
},
"user": "nginx",
"group": "nginx",
"root": "/var/www/site1",
"index": "index.php"
},
"script_index_php_2": {
"type": "php",
"processes": {
"max": 20,
"spare": 5
},
"user": "nginx",
"group": "nginx",
"root": "/var/www/site2",
"script": "index.php"
},
"direct_php_2": {
"type": "php",
"processes": {
"max": 5,
"spare": 0
},
"user": "nginx",
"group": "nginx",
"root": "/var/www/site2",
"index": "index.php"
}
}
}
sudo curl -X PUT --data-binary @/var/www/wordpress.config --unix-socket /var/run/unit/control.sock http://localhost/config
Nginxの設定
vi /etc/nginx/conf.d/site1.conf
upstream index_php_upstream_1 {
server 127.0.0.1:8090; # NGINX Unit backend address for index.php with
# 'script' parameter
}
upstream direct_php_upstream_1 {
server 127.0.0.1:8091; # NGINX Unit backend address for generic PHP file handling
}
server {
listen 80;
server_name site1.com;
root /var/www/site1/;
location / {
try_files $uri @index_php;
}
location @index_php {
proxy_pass http://index_php_upstream_1;
proxy_set_header Host $host;
}
location /wp-admin {
index index.php;
}
location ~* .php$ {
try_files $uri =404;
proxy_pass http://direct_php_upstream_1;
proxy_set_header Host $host;
}
}
site2についても同様に /etc/nginx/conf.d/site2.conf
を作成する。
以上で設定が完了したのでリロードし、http://site1.com
でアクセスできることが確認できるはず。
sudo nginx -s reload
(ステップ4) HTTPS 設定
certbotを使ってLet's Encrypt 証明書を導入します。
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm
sudo yum-config-manager --enable epel*
sudo yum install -y certbot
sudo certbot
*** 指示に従う ***
/etc/nginx/conf.d/site1.conf
を以下のように更新
upstream index_php_upstream_1 {
server 127.0.0.1:8100; # NGINX Unit backend address for index.php with
# 'script' parameter
}
upstream direct_php_upstream_1 {
server 127.0.0.1:8101; # NGINX Unit backend address for generic PHP file handling
}
server {
listen 443 ssl http2;
server_name site1.com;
root /var/www/site1/;
ssl_certificate "/etc/letsencrypt/live/site1.com/cert.pem";
ssl_certificate_key "/etc/letsencrypt/live/site1.com/privkey.pem";
ssl_session_timeout 10m;
ssl_protocols TLSv1.2;
ssl_ciphers EECDH+AESGCM:EECDH+AES;
ssl_ecdh_curve prime256v1;
ssl_prefer_server_ciphers on;
keepalive_timeout 70;
sendfile on;
client_max_body_size 0;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
try_files $uri @index_php;
}
location @index_php {
proxy_pass http://index_php_upstream_1;
proxy_set_header Host $host;
}
location /wp-admin {
index index.php;
}
location ~* .php$ {
try_files $uri =404;
proxy_pass http://direct_php_upstream_1;
proxy_set_header Host $host;
}
}
wp-config.phpを更新
$_SERVER['HTTPS']='on'; // https化のためにはこの行が必要
雑感
アクセスのほとんどないサイトを運営し続けたいことが時々あります。t2インスタンス時代にはt2.microでも辛かったWordPressですが、今ではt3.nanoで複数サイトを運営できるようになっている感じがあります。
複数言語で動かせるAPサーバーということでNginx Unitに注目していましたが、実際に触ったところ、案外すんなりできました。しかし、まだまだ情報が少ないので、どんどん利用者が増えるといいなと思いました。