CentOS Nginx

Nginx環境へWordPressをインストールする手順と注意点 パーマリンクに気を付ける

2018年7月23日

nginx-wp-install-img

Photo by Fikret tozak on Unsplash

こんにちは、ITエンジニアの小村(@system_kom)です。

今までの記事でウェブサーバーNginx(エンジンエックス)の導入や関連する設定について紹介してきました。そこで今回の記事ではNginxの環境へ代表的なCMSの「WordPress」を導入する場合の手順を紹介します。

WordPressの導入は、基本的には以前に紹介したApache環境向けの記事に記載した手順とほぼ同じですが、一部、注意が必要な設定があります。

Open Source
centos-apache-wordpress-install-top2
CentOSに構築したApache環境へ最短でWordPressをインストールする手順

こんにちは、ITエンジニアの小村(@system_kom)です。 昨今のウェブサイトはLAMP(Linux、Apache、MySQL、PHPの頭文字をとってLAMP)で構成されていることが殆どです。 今回は、以前の記事で構築したLAMP環境 ...

本記事では、その注意点について設定手順を紹介していきます。
是非、本記事を参考にNginx環境でWordPressをインストールしてみて下さい。

参考 WordPressの導入に必要なデータベースの導入については、以下の記事で紹介していますので、未導入の場合には参考にしてください。

Open Source
centos-mariadb-install-top2
MySQL互換のオープンソースDB MariaDB 10をインストールして利用する

こんにちは、ITエンジニアの小村(@system_kom)です。 前回の記事でウェブサーバーであるhttpdとアプリケーションサーバーであるphpのインストールが完了しました。 今回は作成した環境にデータベースとしてあるMariaDB(以前 ...

1. WordPressをインストールする環境

WordPressをインストールする環境はNginxへSSLを設定した以下の記事で紹介しています。

Open Source
centos-nginx-ssl-top2
CentOS 7のNginxにLet's Encryptを導入してサイトをHTTPS化する方法

前回の記事でnginxの設定とphpの導入までが完了しました。 本記事では、ウェブサーバー(nginx)のHTTP通信を暗号化してセキュアな通信を行うための機能であるHTTPS通信をnginxで利用するまでの手順を紹介します。 HTTPSは ...

本記事でも確認の意味で再度纏めておきます。基本的な環境は以下の通りです。

OSのバージョンCentOS 7.5.1804. 2016年7月時の最新
ウェブサーバーnginx 1.15.0 2018年7月時の最新
バーチャルホストwww.testdom.com / www.testdom2.com
PHPPHP/php-fpm 7.2系インストール
SSLLet's EncryptによるHTTPS有効
IPアドレスグローバルIPアドレスを割り当て
FirewallfirewalldでHTTP/HTTPSを許可済み

この環境を前提にWordPressのインストールを進めていきます。
インストールするWordPressは2018年7月時点で最新のバージョンである4.9.7を利用します。

2. WordPressカスタムパーマリンク用の設定

Nginx環境のWordPressの場合、パーマリンクの設定(ここではパーマリンクの説明については割愛します。)を基本から、異なるものへ変更した場合、以下のように404エラーでアクセスできなくなります。

Nginx-wp-404

例えばカテゴリーやアーカイブ、記事の本体などが対象となります。
トップページは正常に表示できますので一見、問題が無いように見えますが、記事の本文へアクセスすると404エラーになります。

このエラーを回避するためにバーチャルホスト用の設定ファイルに設定を追加します。

なお、この設定についてはパーマリンクの設定によっては変更する必要があります。ここではパーマリンクの設定として「投稿名」及び「日付と投稿名」で問題がないことを確認しています。

Nginx-wp-404-2-1

パーマリンクに対応するために設定が必要なファイルは"/etc/nginx/sites-available"ディレクトリに含まれるバーチャルホスト用の設定ファイル"ドメイン名.conf"になります。

以下が現状のディレクトリとファイルの構成です。

 directory
/etc/nginx/
|-- conf.d
|-- fastcgi_params
|-- koi-utf
|-- koi-win
|-- mime.types
|-- modules -> ../../usr/lib64/nginx/modules
|-- nginx.conf
|-- scgi_params
|-- sites-available
| |-- default.conf
| |-- www.testdom.com.conf
| |-- www.testdom2.com.conf
|-- sites-enabled
| |-- default.conf -> /etc/nginx/sites-available/default.conf
| |-- www.testdom.com.conf -> /etc/nginx/sites-available/www.testdom.com.conf
| `-- www.testdom2.com.conf -> /etc/nginx/sites-available/www.testdom2.com.conf
|-- ssl
| `-- dhparam.pem
|-- uwsgi_params
`-- win-utf

上記ディレクトリツリー上の「sites-available」ディレクトリに含まれる設定ファイル
"www.testdom.com.conf"と"www.testdom2.com.conf"
が設定の対象です。

今回の記事では、設定は"www.testdom.com.conf"のみに行います。
他のバーチャルホストにもWordPressを導入する場合はバーチャルホストの設定ファイル毎に、同じ設定が必要になることをご注意ください。

2-1. www.testdom.com.conf設定ファイルのバックアップ

パーマリンクに関する設定はバーチャルホスト用設定ファイルである"www.testdom.com.conf"に行います。まずはこのファイルをバックアップします。
"cp"コマンドを使って、以下の手順でコピーを行います。

 command
# cp -p /etc/Nginx/sites-available/www.testdom.com.conf /etc/Nginx/sites-available/www.testdom.com.conf.org2

コピーされたバックアップファイルが存在することを"ls"コマンドで確認します。

 command
$ ls /etc/Nginx/sites-available/
default.conf www.testdom.com.conf www.testdom.com.conf.org www.testdom.com.conf.org2 www.testdom2.com.conf

コピーしたファイル"www.testdom.com.conf.org"があることが確認できました。
これでファイルのバックアップは完了です。

2-2. www.testdom.com.conf 設定ファイルの編集

ファイルのバックアップが完了しましたので、オリジナルの設定ファイル"www.testdom.com.conf"を編集していきます。
SSLの設定までが完了している、変更前の"www.testdom.com.conf"ファイルの内容は以下のようになります。

 config
server {
    listen 80;
    server_name testdom.com www.testdom.com;
    rewrite ^ https://$server_name$request_uri? permanent;
}
 
server {
    listen 443 ssl;
    server_name testdom.com www.testdom.com;
    access_log /var/log/Nginx/www.testdom.com-access.log main;
    error_log /var/log/Nginx/www.testdom.com-error.log;
    root /home/www/www.testdom.com;
 
    ssl_certificate /etc/letsencrypt/live/www.testdom.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.testdom.com/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets on;
    ssl_dhparam /etc/Nginx/ssl/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
 
    location / {
    index index.php index.html index.htm;
    }
 
    location ~ \.(png|jpg|gif|ico|css|js)$ {
    index index.html;
    break;
    }
 
    location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
}

上記の記載内容で、変更が必要な部分は、一番上のlocationディレクティブになります。

 config
location / {
    index index.php index.html index.htm;
    }

このlocationディレクティブに、以下の「try_files」設定を追加します。

 config
try_files $uri $uri/ /index.php?$args;

これは要求されたURIにファイルかディレクトリが存在するかチェックして、存在しない場合はindex.php へリダイレクトするという設定です。

設定後のlocationディレクティブは以下のようになります。

 config
location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
    }

設定が完了したらファイルを保存します。変更後の設定ファイル全体は以下のようになります。

 config
server {
    listen 80;
    server_name testdom.com www.testdom.com;
    rewrite ^ https://$server_name$request_uri? permanent;
}
 
server {
    listen 443 ssl;
    server_name testdom.com www.testdom.com;
    access_log /var/log/Nginx/www.testdom.com-access.log main;
    error_log /var/log/Nginx/www.testdom.com-error.log;
    root /home/www/www.testdom.com;
 
    ssl_certificate /etc/letsencrypt/live/www.testdom.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.testdom.com/privkey.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets on;
    ssl_dhparam /etc/Nginx/ssl/dhparam.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
 
    location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
    }
 
    location ~ \.(png|jpg|gif|ico|css|js)$ {
    index index.html;
    break;
    }
 
    location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
}

これで設定ファイルの変更は完了です。

2-3. 設定ファイルの確認

設定ファイルの作成と配置が完了したら、間違いや問題がないかを確認します。
"nginx"コマンドに"-t"オプションを付けて実行することで設定ファイルの間違いをチェックできます。設定変更後には実行することをお勧めします。

以下のように実行します。

 command
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

上記のように「test is successful」と表示されていればファイルには問題ありません。

2-4. 設定の有効化

設定ファイルの変更を行った場合には、ファイル再読み込みとしてNginxの再起動が必要になります。"systemctl"コマンドでNginxを再起動します。

 command
# systemctl restart nginx

エラーが出力されなければ、正常に再起動は完了しています。これで設定の有効化は完了です。
これ以降のWordPress導入についてはApache環境と同じになりますので、以下の記事を参考にして頂いて、同じように作業を進めて下さい。

参考 Apache環境でのWordPressインストール手順

3. まとめ

WordPressをNginxで導入する場合は、キャッシュの利用も含めて幾つかの注意点が必要になります。

設定はApacheより分かり難い点がありますが、Nginxによるウェブサイトの高速化は魅力的です。
今後はWordPressを高速化させるためのFastCGIキャッシュの設定手順や、キャッシュの削除するためのモジュールの導入方法など、WordPressを運用する上で便利だと思われる記事を予定しています。

Nginxをご利用の方は是非、更新を楽しみにして下さい。

レムシステムでは、ブログで紹介した設定ができない場合や、利用中のシステムについての相談を受け付けています。お困りの点がございましたら、お気軽にご相談ください。

メールでのお問い合わせ

メールフォームからシステムの
知りたいことや問題点をお問い合わせ

メールで問い合わせる

電話でのお問い合わせ

電話でお気軽にお問い合わせください
(受付時間:平日10:00〜18:00)

053-525-7357

  • この記事を書いた人
  • 最新記事

小村定

SIerでIT系インフラの設計と構築を経験したのちに独立、「レムシステム株式会社」を設立する。インフラ系エンジニア歴20年の経験を活かしてITに関わる課題解決や効率化に取り組む日々を送っている。

-CentOS, Nginx

© 2020 レムシステム エンジニアブログ