CentOS Nginx

NginxへWordPressをインストールする時にはパーマリンクに気を付ける

2018年7月23日

nginx-wp-inst-top2

今までの記事でウェブサーバーであるnginx(エンジンエックス)の導入や関連する設定について紹介してきました。今回の記事ではnginxの環境へWordPressを導入する場合の手順を紹介します。基本的には以前に紹介したApache環境向けの記事

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

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

とほぼ同じですが、一部、注意が必要な設定があります。本記事では、その注意点について設定手順を紹介していきます。
尚、WordPressの導入に必要なデータベースの導入については、以前の記事

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

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

で紹介した手順で導入を行ってください。データベースについてはウェブサーバーがApacheでもnginxでも手順は同じです。

昨今では、WordPressは、そのパフォーマンスの高さからApacheではなくnginxで動作させる場合も多いようです。
WordPressがどのようにしてインストールされているかを理解することで、導入手順を理解することができ、カスタイマイズなどにも理解が進むと思っています。是非、本記事を参考にnginx環境でWordPressをインストールしてみて下さい。

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

WordPressをインストールする環境はnginxへSSLを設定した記事

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

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

で紹介していますが、確認の意味で再度纏めておきます。基本的な環境は以下の通りです。

  • OSのバージョンはCentOSで最新のバージョン7.5を利用しています。(2016年7月現在)
  • ウェブサーバーとしてnginx1.15.0がインストールされています。(2018年7月現在、mainline最新版)
  • nginxは基本的な設定が完了して、バーチャルホストが二つ設定されています。
  • バーチャルホストは”www.testdom.com”と”www.testdom2.com”になります。
  • phpとphp-fpmの7.2系がインストールされて、テスト用のphpinfoが表示されています。
  • Let's Encrypytを利用してHTTPS通信の機能を有効化しています。
  • サーバーはインターネットへ接続されており、グローバルIPアドレスが一つ、割り当てられています。
  • ファイアウォールとしてfirewalldを設定しています。

この環境を前提に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になります。以下が現状のディレクトリとファイルの構成です。

/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 -p /etc/nginx/sites-available/www.testdom.com.conf /etc/nginx/sites-available/www.testdom.com.conf.org2

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

$ 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の設定までが完了している、変更前の設定ファイルの内容は以下のようになります。

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 ~ \.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ディレクティブになります。

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

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

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

本設定は要求されたURIにファイルかディレクトリが存在するかチェックして、存在しない場合は、index.php へリダイレクトするという設定です。
設定後のlocationディレクティブは以下のようになります。

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

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

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 ~ \.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”オプションを付けて実行することで設定ファイルの間違いをチェックできます。設定変更後には実行することをお勧めします。
以下のように実行します。

# 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を再起動します。

# systemctl restart nginx

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

>「CentOSのサーバーへWordPressをインストール。WordPressを理解するにはインストールからがお勧め。」

を参照頂いて、同じように作業を進めて下さい。

3. まとめ

WordPressをnginxで導入する場合は、キャッシュの利用も含めて、幾つかの注意点が必要になります。設定はApacheより分かり難い点がありますが、nginxによるウェブサイトの高速化は魅力的です。
今後はWordPressを高速化させるためのFastCGIキャッシュの設定手順や、キャッシュの削除するためのモジュールの導入方法など、WordPressを運用する上で便利だと思われる記事を予定しています。
nginxをご利用の方は是非、更新を楽しみにして下さい。

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

メールでのお問い合わせ

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

メールで問い合わせる

電話でのお問い合わせ

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

053-525-7357

  • この記事を書いた人
  • 最新記事
レムシステム

小村定

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

Copyright© レムシステム エンジニアブログ , 2019 All Rights Reserved.