LoginSignup
1
5

More than 3 years have passed since last update.

AmazonLinux2+Nginx+NginxUnitでWordPressを複数サイト動かす

Last updated at Posted at 2019-05-04

表題の通り。できたので、やり方をまとめておきます。

参考にしたページ

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
/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
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
/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
/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
を以下のように更新

/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を更新

wp-config.php
$_SERVER['HTTPS']='on'; // https化のためにはこの行が必要

雑感

アクセスのほとんどないサイトを運営し続けたいことが時々あります。t2インスタンス時代にはt2.microでも辛かったWordPressですが、今ではt3.nanoで複数サイトを運営できるようになっている感じがあります。
複数言語で動かせるAPサーバーということでNginx Unitに注目していましたが、実際に触ったところ、案外すんなりできました。しかし、まだまだ情報が少ないので、どんどん利用者が増えるといいなと思いました。

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5