カテゴリー: Server

WordPressのサーバ移設とnginxで無料SSLをやってみた

はじめに

最近swift3を勉強が本格的に行なっております。はじめです。

セキュリティーやSEO対策も含めブログをSSL化をすることになりましたが、
以前契約していたサーバーでは月額料金がかなりかかってしまうことがわかったので、
今回サーバーの移設をすることになりました。

自分の理解を深めるという意味も含め今回行った「サーバ移設の手順」、「nginxでWordPressを動かす設定」、「無料SSLの設定」を記事にすることにしました。

環境

  • conohaのVPS
  • CentOS 7
  • WordPress

サーバー準備

ConohaのVPSサーバーの契約

今回conohaのVPSサーバーを使用します。
OSは[CentOS 7]を使用します。

sshログイン用のユーザーを作成

セキュリティー面も考えsshユーザーを作成します。(実際はtestユーザとかではなく、ちゃんとしたユーザ名にしています。)

# sshログイン用のユーザーを作成
ssh root@example.com
useradd test
passwd test

# testユーザーでsudoを使えるようにする
visudo
    ----
    # 以下を追記
    test    ALL=(ALL)       ALL
    ----

# testユーザーに切り替え
su - test

# 秘密鍵を作成(すべてenterでOK)
ssh-keygen -t rsa

# rootの許可リストをtestユーザーへ変更
sudo cp /root/.ssh/authorized_keys ~/.ssh/
sudo chown test:test ~/.ssh/authorized_keys
chmod 644 ~/.ssh/authorized_keys

# 一度ログアウトし、秘密鍵を使用して、ローカルのMacPCからtestユーザでログインできることを確認
# test.pem.txtはconohaでサーバを構築した際に取得できます。
cd /Users/test/
ssh test@XXX.XX.XXX.XXX -i test.pem.txt

# rootユーザーでのsshログインを禁止
sudo vi /etc/ssh/sshd_config
    ---
    # 以下のように編集
    /PermitRootLogin yes
    ↓
    /PermitRootLogin no
    ---

# sshサービスを再起動
sudo systemctl restart sshd.service

# testユーザをログアウトして、ローカルのMacPCからrootでログインができないことを確認
ssh root@XXX.XX.XXX.XXX -i test.pem.txt
-> Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

# testユーザならばログインできることを確認
ssh test@XXX.XX.XXX.XXX -i test.pem.txt

必要なソフトウェアのインストール

yum remove mariadb-libs
rm -rf /var/lib/mysql/
yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
yum info mysql-community-server
yum -y install mysql-community-server
vi /etc/yum.conf
    ---
    [main]内追記
    exclude=kernel* tzdata*
    ---
sudo yum install -y bash-completion unzip nginx php php-gd php-mbstring php-mysql php-pspell php-xml php-xmlrpc php-fpm

# プロセスの起動・プロセスの自動起動設定
systemclt start nginx.service
systemctl start php-fpm.service
systemctl start mysqld.service
sudo systemctl enable nginx.service
sudo systemctl enable php-fpm.service
sudo systemctl enable mysqld.service

WordPressの移行

※事前に移行前のサーバーからDBのdumpとrootディレクトリ配下のファイルを取得しておきます。

DBの準備

# mysqlでDBの作成
mysql -u root -p
create database 'DB名';
grant all on DB名.* to DBユーザー名@'localhost' identified by 'パスワード';

# 移行前のDBと同じDB名・パスワードを使用するため、mysqlのパスワードバリデーションレベルをLOWに設定
validate_password_policy=LOW

# dumpファイルをインポート
mysql -uユーザー名 -pパスワード DB名 < test.sql

WordPressのソースをアップロード

FTPツールで取得しておいたrootディレクトリ配下のファイルを移行先サーバーのrootディレクトリにアップロードします。

nginxの設定

vi /etc/nginx/nginx.conf
    ---
    user engines;
    worker_processes auto;
    ...
    http {
        sendfile            on;
        tcp_nopush          on;
        tcp_nodelay         on;
        keepalive_timeout   65;
        types_hash_max_size 2048;
        ...
        server {
            listen       80;
            listen       [::]:80;
        # ドメインに合わせて適宜変更
            server_name  example.com;
            index        index.php;
        # ドキュメントルートに合わせて適宜変更
            root         /usr/share/nginx/html;
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
        # 設定ファイルを見られないように
            location ~* /wp-config.php { deny all; }
            location ~ \.php$ {
                     try_files $uri @wordpress;
                     fastcgi_pass   127.0.0.1:9000;
                     fastcgi_index  index.php;
                     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                     include        fastcgi_params;
            }
            location / {
                     try_files $uri $uri/ @wordpress;
            }
            location @wordpress {
                     fastcgi_index index.php;
                     fastcgi_split_path_info ^(.+\.php)(.*)$;
                     fastcgi_pass  127.0.0.1:9000;
                     fastcgi_param SCRIPT_FILENAME  $document_root/index.php;
                     include       fastcgi_params;
            }
            error_page 404 /404.html;
            location = /40x.html {
            }
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
            }
        }
    }
    ---

php-fpmの設定

vi /etc/php-fpm.d/www.conf
listen.owner = test
listen.group = test

サービスの再起動

sudo systemctl restart nginx.service
sudo systemctl restart php-fpm.service

ブラウザにてIP直指定でアクセスをし、表示確認

“【502 Bad Gateway】”

conohaでデフォルトで立ち上がっていたファイヤーウォールが原因でだったので、

ファイヤーウォールを停止

systemctl stop firewalld

再度IP直指定でアクセスし、表示の確認ができました。

DNSの切り替え

移行前のDNSを使用していたので、DNSを切り替えます。

ドメインにてアクセスができることを確認して完了です。

SSL化

今回は無料のLet`s Encryptを使用します。

letsencryptをインストール

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/
./letsencrypt-auto --help
./letsencrypt-auto certonly --webroot --webroot-path ルートディレクトリ -d ドメイン名

証明書と秘密鍵を生成

証明書と秘密鍵を生成し、所有者を変更します。

cd /etc/letsencrypt/live/example.com/
# 証明書のグループと所有者を変更
chown test:test fullchain.pem
# 秘密鍵のグループと所有者を変更
chown test:test private.pem

nginxに証明書と秘密鍵を設定

vi /etc/nginx/nginx.conf
    ---
    http {
        ...
        server {
            listen       443 ssl;
            listen       [::]:443 ssl;
            server_name  example.com;
            index        index.php;
            root         /usr/share/nginx/html;
            ssl_certificate "/etc/letsencrypt/live/example.com/fullchain.pem";
            ssl_certificate_key "/etc/letsencrypt/live/example.com/privkey.pem";
            # It is *strongly* recommended to generate unique DH parameters
            # Generate them with: openssl dhparam -out /etc/pki/nginx/dhparams.pem 2048
            # ssl_dhparam "/etc/pki/nginx/dhparams.pem";
            ssl_session_cache shared:SSL:1m;
            ssl_session_timeout  10m;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP;
            ssl_prefer_server_ciphers on;
        ...
        }
    ...
    }
    ---

httpsでの接続確認

httpsで正常にアクセスできるかを確認します。

nginxにてhttpでアクセスされたものをhttpsにリダイレクトさせる

vi /etc/nginx/nginx.conf
    ---
    http {
        ...
        # http:で来たアクセスをhttpsにリダイレクト
        server {
            listen 80 default_server;
            listen [::]:80 default_server;
            server_name  example.com;
            rewrite ^(.*) https://example.com$1 permanent;
        ...
        }
    ...
    }
    ---

さいごに

ミドルウェアのインストールや設定等行いましたが、
改めて自分が理解できていないことが多いことを実感しました。
一つ一つ単語の意味を調べたこともあり理解度が深まったのでよかったです。

hajimenagasawa

シェア
執筆者:
hajimenagasawa
タグ: CentOS

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

2週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

4週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前