【GCP/Nginx/WordPress】トップページ以外404エラーになる時の対応
- GCP × Nginx環境でWordPressを運用したい
- GCPのMarketPlaceからWordPressを簡易インストールするのではなく、既に立っているサーバ上に手動でインストールする
- ~~~.com/news/のように、WordPressはサブディレクトリにインストールする構成
- ~~~.com/news/のトップページは表示されるが、それ以外のWordPressページが表示できず、404エラーページになってしまう
こんな状況で困ったことになったので、解決方法をメモしておきます。
(WordPressをサブディレクトリ構成にしたとき特有の問題かもしれません)
Nginxのコンフィグを書き換えて無事にWordPressで作成したコンテンツが表示されるようになりました。
前提:
- GCPのサーバーインスタンス上にPHP実行環境がすでに構築済みとします。
- サブディレクトリ上にWordPressをインストール済みとします。
ー もくじ ー
【GCP/Nginx/WordPress】トップページ以外404エラーになる時の対応
WordPressをインストールしたサブディレクトリ(/news)にアクセスしたときに、正常なルーティングができていなかったのが原因でした。
/newsにアクセスしたらphpで正しく処理します、といったNginxの設定を書き加えます。
僕の場合は以下ディレクトリにあるNginx設定ファイルを編集しましたが、
/etc/nginx/sites-available/~~~.com
環境によっては、
/etc/nginx/nginx.conf
のファイルに直接記述しているかと思うので、どの設定ファイルを編集するかはあなたの環境に合わせてください。
では、以下手順です。
- Nginxコンフィグファイルを編集
- コンフィグファイルの記述が正しいかテスト
- Nginxを再起動
- サブディレクトリ以外のWordPressコンテンツへアクセスして解消を確認
1. Nginxコンフィグファイルを編集
以下、修正前のNginxコンフィグです。この状態で404エラーが出てしまっていました。
/etc/nginx/sites-available/~~~.comserver {
listen 443 ssl;
listen [::]:443 ssl;
root /var/www/~~~.com;
index index.php index.html index.htm;
server_name ~~~.com;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}
以下、修正後のNginxコンフィグ(#以下、追加 の部分)。これでエラーが解消しました。
あくまでも、僕の環境でのコンフィグ変更です。修正の記述方法は参考程度にしていただき、あなたの環境に合わせて書き換えてください。
/etc/nginx/sites-available/~~~.comserver {
listen 443 ssl;
listen [::]:443 ssl;
root /var/www/~~~.com;
index index.php index.html index.htm;
server_name ~~~.com;
location / {
try_files $uri $uri/ =404;
}
# 以下、追加
location @wp {
rewrite ^/news(.*) /news/index.php?q=$1;
}
location ^~ /news {
root /var/www/~~~.com;
index index.php index.html index.htm;
try_files $uri $uri/ @wp;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}
# ココまで
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}
編集したら、保存します(保存した段階では反映はされません)。
2. コンフィグファイルの記述が正しいかテスト
sudo nginx -t
これで手順1で記述した文字列が正しいかどうかテストします。
※sudoが必要かどうかは環境に合わせてください。
正しい場合は以下のように「syntax is ok」「test is successful」と表示されます。
admin@web:/$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
上記のように表示されない場合、手順1で記述を加えたNginxコンフィグの書き方がどこか誤っていることになるので修正してください。
カッコの閉じ忘れなどに気をつけましょう。
3. Nginxを再起動
手順2のテストがOKなら、Nginxを再起動します。
sudo nginx -s reload
これで手順1で追加した設定が反映されました。
4. サブディレクトリ以外のWordPressコンテンツへアクセスして解消を確認
今まで404エラーになっていたWordPressのコンテンツへアクセスし、解消しているかどうか確認しましょう。
参考サイトNginx - wordpress in a subdirectory, what data should be passed?