[WordPress] 開発/検証環境は、JetPackを開発モードへ変更する

WordPress移行時の、Plugin Jetpackの挙動

検証環境に本番データを複製すると、Jetpackがセーフモードとなる。
Jetpackサイトに接続すると、WordPress.comはURLを記録する。Jetpack対応サイトでそのURLが変更されても、WordPress.com上のURLが更新されない場合がある。ほとんどの場合、URLを安全に更新でき、この判定危機を引き起こすことはない。しかし、Jetpackが複製サイトのURLを更新する必要があるかどうかを自動的に判断できないケースが数多くある。

セーフモードになることで、以下の利点がある。

  • Jetpackが有効なサイトの情報をWordPress.comの複製(シャドウ)サイトに同期しない。
  • Jetpackセーフモードの通知が表示される。
  • サイトの管理者がドメイン判定危機を解決するまで、この通知を引き続き表示する。

Jetpackを開発モードへ変更

検証環境にて移行したJetPackはWordPress.comと連携しており、サイトの統計情報等一部本番と混在するデータを含む可能性がある為、開発モードに変更する。

“wp-config.php” へ以下を記述し、JetPackを開発モードへ変更する。

define( 'JETPACK_DEV_DEBUG', true );

[AWS][WordPress] サーバー移管/初期設定

環境例

環境 Ver.
OS Amazon Linux AMI 2017.03.1.20170812 x86_64 HVM GP2
WordPress 4.8.1
Apache 2.4
MySQL 5.7
PHP 7.0
EC2 type t2.micro

環境構築

インスタンスを立てる

VPCの構築、Security Groupの設定、ELBの設定、RDSの構築、DNSの登録、Certificate Managerから証明書の発行等は今回、省略する。

既存サーバの状況確認

ミドルウェアインストール状況、DBの状態、バージョン確認等。

$ php -m
mysql> SELECT HOST, USER FROM `mysql`.`user`;
mysql> SHOW GRANTS FOR '{USER_NAME}'@'{HOST_NAME}'\G;

パッケージアップデート

$ yum update

# セキュリティパッケージの更新のみの場合
$ yum update --security

パッケージインストール

$ yum install tree dstat sysstat iotop htop

Crontab(オプション)

開発環境の場合、節約の為に例えば毎日22時にインスタンスが停止するよう設定する。
/etc/crontab

0 22 * * *     root    /sbin/shutdown -h now >/dev/null 2>&1

TimeZoneの変更

# オリジナルをバックアップ
$ cp /etc/localtime /etc/localtime.org
$ diff /etc/localtime /etc/localtime.org

$ ln -sf  /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
$ cp /etc/sysconfig/clock /etc/sysconfig/clock.org
$ diff /etc/sysconfig/clock /etc/sysconfig/clock.org

/etc/sysconfig/clock

# ZONEの変更
ZONE="Asia/Tokyo"
# falseにするとハードウェアのクロックもローカルタイムで設定されてしまう為、変更しない
UTC=true

反映の確認

$ /etc/init.d/crond restart
$ strings /etc/localtime
TZif2
TZif2
JST-9

ntpdateの起動

Amazon Linuxは初期状態でNTPによるシステムクロックの同期を行っている。

$ chkconfig ntpdate on
$ chkconfig --list | grep ntpdate

iptablesの停止

セキュリティグループを利用しているため、iptablesは停止する。

chkconfig iptables off
chkconfig ip6tables off
chkconfig --list | grep ip

文字コードの変更

/etc/sysconfig/i18n

LANG="ja_JP.UTF-8"

ホスト名の変更

/etc/sysconfig/network

HOSTNAME={YOUR_HOSTNAME}

各種パッケージインストール

$ yum install httpd24 php70 mysql php70-mysqlnd php70-mbstring php70-bcmath php70-gd php70-pecl-imagick php70-imap php70-intl php70-pecl-oauth php70-pgsql php70-soap php70-xmlrpc php70-opcache
$ service httpd start
$ chkconfig httpd on

# httpdが有効であることを確認。実行レベル 2/3/4/5 がonの必要がある。
$ chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

Apacheのテストページがブラウザへ表示されることを確認。
PHP情報ページが表示されることを確認。

$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

現行環境とPHPモジュールの差異がないことを確認。

PHP設定ファイル更新

$ cp /etc/php.ini /etc/php.ini.org

/etc/php.ini

# 検証/開発環境のみ
display_errors = On
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
date.timezone = Asia/Tokyo
expose_php = Off
[imagick]
extension=imagick.so

RDSのパラメータグループの設定

以下の設定でRDSのパラメータグループを作成/適用。

  • character-set-client-handshake: 1
  • skip-character-set-client-handshake: 1
  • character_set_client: utf8
  • character_set_connection: utf8
  • character_set_database: utf8
  • character_set_filesystem: utf8
  • character_set_results: utf8
  • character_set_server: utf8
  • time_zone: Asia/Tokyo
  • collation_connection: utf8_general_ci
  • collation_server: utf8_general_ci
  • max_connect_errors: 999999999
  • max_connections: 2048
  • wait_timeout: 100

httpd.confとVirtualHostの設定

$ cd /etc/httpd/conf/
$ cp -p httpd.conf httpd.conf.org
$ mkdir /etc/httpd/conf/vhosts
$ mkdir -p /var/www/vhosts/xxx/htdocs

/etc/httpd/conf/httpd.conf

# 96行目付近
#ServerName www.example.com:80
ServerName xxx.com:80

# 121行目付近
DocumentRoot "/var/www/vhosts"

#
# Relax access to content within /var/www.
#
#<Directory "/var/www">
#    AllowOverride None
#    # Allow open access:
#    Require all granted
#</Directory>

# 133行目付近
#<Directory "/var/www/html">
<Directory "/var/www/vhosts">

# 154行目付近
#AllowOverride None
AllowOverride All

# 最終行付近
Include /etc/httpd/conf/vhosts/*.conf
KeepAlive On
KeepAliveTimeout 15
Timeout 300
$ mkdir /var/www/dvh

/etc/httpd/conf/vhosts/00_default_virtualhost.conf

<VirtualHost *:80>
    DocumentRoot /var/www/dvh/
    ServerName dummy
    ServerSignature Off
    <Location />
       Order deny,allow
       Deny from All
       Allow from 172
    </Location>
</VirtualHost>

/etc/httpd/conf/vhosts/httpd-vhosts.conf

<VirtualHost *:80>
    ServerName xxx.com
    DocumentRoot /var/www/vhosts/xxx/htdocs/wordpress
    <Directory "/var/www/vhosts/xxx/htdocs/wordpress">
        Require all granted
    </Directory>
</VirtualHost>

コンテンツ/DBデータを復元

# コンテンツ/dumpの取得
$ mysqldump --databases {DB_NAME} --default-character-set=utf8 --add-drop-database --user={USER_NAME} --password --host={HOST_NAME} > ./xxx.sql
$ GZIP=-9 tar czf xxx.tar.gz /path/to/directory

$ scp -P {PORT_NUM} -p {USER_NAME}@{HOST_NAME}:/path/to/xxx.sql.tar.gz ~/

# コンテンツ/dumpの復元
$ tar -zxf contents.tar.gz
$ tar -zxf dump.sql.tar.gz
$ mysql --databases {DB_NAME} --user={USER_NAME} --password --host={HOST_NAME} < ./xxx.sql

コンテンツディレクトリのPermission変更

$ chown apache:apache htdocs
$ find . -type d -exec chmod 0755 {} \;
$ find . -type f -exec chmod 0644 {} \;
$ chown -R apache:apache .
$ chmod -R g+w .
$ chmod 400 wp-config.php
$ chmod 644 .htaccess

wp-config.php の書き換え

/var/www/vhosts/xxx/htdocs/xxx/wp-config.php

define('DB_NAME', '{DB_NAME}');

/** MySQL のユーザー名 */
define('DB_USER', '{DB_USER}');

/** MySQL のパスワード */
define('DB_PASSWORD', '{DB_PASS}');

/** MySQL のホスト名 (ほとんどの場合変更する必要はありません。) */
define('DB_HOST', '{DB_HOST}:3306');

/** データベーステーブルのキャラクターセット (ほとんどの場合変更する必要はありません。) */
define('DB_CHARSET', 'utf8');

# 開発環境の場合は、Jetpackを開発者モードへ変更する。
define( 'JETPACK_DEV_DEBUG', true );

DB日付確認

日本時間となっていることを確認する。

mysql> SELECT now();
+---------------------+
| now()               |
+---------------------+
| 2017-04-xx 17:39:19 |
+---------------------+
1 row in set (0.00 sec)

DB内URL置換

xxx.jp → xxx.com/xxx 等へURLを変換する。
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/ のツールを利用する。
“Search Regex” というWordPressプラグインでも置換が可能。

管理画面のサイトURL

http://xxx/wp-admin/options-general.php
サイトURLが新規URLへ変更されていることを確認する。

.htaccessの設定

  • wp-config.phpのアクセス制御
  • SSLへリダイレクト (ELB/CloudFrontへも対応)

/var/www/vhosts/xxx/htdocs/wordpress/wp-config.php

<?php
# add under for ELB
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
    $_SERVER['HTTPS'] = 'on';
}
/**
 * The base configuration for WordPress

/var/www/vhosts/xxx/htdocs/wordpress/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !^https$
RewriteCond %{HTTP:CloudFront-Forwarded-Proto} !=https
RewriteCond %{REQUEST_URI} !^_health_check\.html$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>


<files wp-config.php>
    order allow,deny
    deny from all
</files>

# Not allowed access to .htaccess and .htpasswd
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

/var/www/vhosts/xxx/htdocs/wordpress/wp-admin/.htpasswd

# http://www.luft.co.jp/cgi/htpasswd.php で作成した値を貼り付け。

/var/www/vhosts/xxx/htdocs/wordpress/wp-admin/.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>

# Basic Auth
AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /var/www/vhosts/xxx/htdocs/wordpress/wp-admin/.htpasswd
AuthGroupfile /dev/null
require valid-user

# Not allowed access to .htaccess and .htpasswd
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

# maybe admin-ajax.php used by some plugin
<FilesMatch "(admin-ajax.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

Swapの作成

MB単位でTotal行のメモリ出力を行う。

$ free -tm
total       used       free     shared    buffers     cached
Mem:          3953       3315        637          0        161       2501
-/+ buffers/cache:        652       3300
Swap:            0          0          0
Total:        3953       3315        637

同程度のSwap容量を確保。

$ dd if=/dev/zero of=/swapfile bs=1M count=4000
4000+0 レコード入力
4000+0 レコード出力
4194304000 バイト (4.2 GB) コピーされました、 55.568 秒、 75.5 MB/秒
$ mkswap /swapfile
$ swapon /swapfile
$ chmod 600 /swapfile
$ free -tm

/etc/fstab

/swapfile swap swap defaults 0 0

サーバ構築後の管理画面設定

個人的に下記をインストール/有効化/設定している。

SEO対策プラグインの有効化

“All In One SEO Pack” をインストール/有効化

BackWPup

“AWS S3” へDump/コンテンツのBackupを定期的に行っている。

Better Delete Revision

作成した記事の “Revision” 等を削除し、動作を軽くする。

Comet Cache

キャッシュを消す。

SyntaxHighlighter Evolved

ソースコードのSyntaxをハイライト表示させる。

WordPressのツールバーを利用しないように設定

メニュー > JetPack > Writing > WordPress.com toolbar

“WordPress.com ツールバーを有効化” のチェックを外す。

Markdown設定

メニュー > ジェットパック > 設定 > composing

“プレーンテキストの Markdown 構文で投稿やページに書き込み” にチェック。

メニュー > あなたのプロフィール > ビジュアルエディター

“ビジュアルリッチエディターを使用しない” にチェック。

Jenkinsサーバの構築

環境

環境 Ver.
Jenkins 2.58
Java 1.8

サーバー基本設定

Timezoneの変更

# 現在のTimezoneの確認 ※現在はUTC
$ strings /etc/localtimeTZif2TZif2UTC0

# オリジナルをバックアップ
$ cp /etc/localtime /etc/localtime.org

# Timezoneファイルの変更1
$ ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# Timezoneファイルの変更2
$ cp /etc/sysconfig/clock /etc/sysconfig/clock.org
$ vi /etc/sysconfig/clock
---
# ZONEの変更
ZONE="Asia/Tokyo"// falseにするとハードウェアのクロックもローカルタイムで設定されてしまう為、変更しない
UTC=true
---
# Timezoneが変更されていることを確認
strings /etc/localtime
TZif2
TZif2
JST-9

Swapの追加

$ dd if=/dev/zero of=/swapfile bs=1M count=1000
$ mkswap /swapfile
$ swapon /swapfile
swapon: /swapfile: 安全でない権限 0644 を持ちます。 0600 がお勧めです。
$ chmod 0600 /swapfile

Hostnameの設定

/etc/sysconfig/network

HOSTNAME={YOUR_HOSTNAME}

/etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 {YOUR_HOSTNAME}

文字コードの変更

/etc/sysconfig/i18n

LANG="ja_JP.UTF-8"

各種ツールのインストール

Gitのインストール

$ yum install git

Javaのインストール

# Javaのバージョン確認
$ java -version
java version "1.7.0_131"OpenJDK Runtime Environment (amzn-2.6.9.0.71.amzn1-x86_64 u131-b00)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)

# Java1.8のインストール ※2017年5月現在、Java1.8でなければJenkins2.58が動作しない。
$ yum install java-1.8.0-openjdk-devel
Installed:
java-1.8.0-openjdk-devel.x86_64 1:1.8.0.121-0.b13.29.amzn1

# 既存のJavaからインストールしたJavaに向き先を変更する
$ alternatives --config java
$ java -versionopenjdk version "1.8.0_121"

EB CLIのインストール (デプロイ例として)

$ pip install --upgrade --user awsebcli
$ vi .bash_profile
---
//追加
export PATH=""~/.local/bin"":$PATH
---
$ source .bash_profile$ eb --version
EB CLI 3.10.1 (Python 2.7.1)

Jenkinsの設定

Jenkinsダウンロード

$ wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo

# パッケージ署名チェック用のキーインポート
$ rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key

# Jenkinsをインストール
$ yum install jenkins
Installing:jenkins noarch 2.58-1.1 jenkins 67 M
Transaction Summary

# ReverseProxy用にApacheのインストール
$ yum install httpd24

Jenkinsのポート変更

※デフォルトは8080

/etc/sysconfig/jenkins

JENKINS_PORT="8081"
$JENKINS_USER="root"

権限変更

Jenkins作業ディレクトリをroot権限へ変更する。

$ chown -R root:root /var/lib/jenkins
$ chown -R root:root /var/cache/jenkins
$ chown -R root:root /var/log/jenkins

# Jenkinsの再起動
$ service jenkins restart
$ ps -ef | grep jenkins

以降、Jenkins jobを全てroot権限で実行することとなる。

Digest認証の設定

# 認証可能なユーザの作成
$ htdigest -c /etc/httpd/conf/.htdigest Jenkins jenkins
Adding password for jenkins in realm Jenkins.
New password:
Re-type new password:

# Digest認証の反映を確認
$ less /etc/httpd/conf/.htdigest

ReverseProxyの設定

/etc/httpd/conf.d/jenkins.conf

# Canonicalise URLデコードを抑制
ProxyPass / http://localhost:8081/ nocanon
ProxyPassReverse / http://localhost:8081/
ProxyRequests Off
AllowEncodedSlashes NoDecode

<Proxy http://localhost:8081/*>
Order deny,allow
Allow from all
AuthType Digest
AuthName Jenkins
AuthUserFile /etc/httpd/conf/.htdigest
Require valid-user
</Proxy>
---

jenkins へ sudo の実行許可を付与

$ sudo visudo -f /etc/sudoers.d/cloud-init
$ sudo visudo
---
jenkins ALL=(ALL) NOPASSWD: ALL
---

設定の反映

# Apacheの再起動
$ service httpd restart

# Jenkinsの再起動
$ service jenkins restart

Jenkinsの起動

$ service jenkins start
# chkconfig コマンドを使用して、システムがブートするたびに Jenkinsが起動するように設定
$ chkconfig jenkins on

# 起動設定を確認
$ chkconfig --list jenkins

# ステータスを確認
$ service jenkins status

ブラウザから http://{public DNS} へアクセスし、Jenkinsへアクセスできることを確認。

Webアプリケーションの配置

$ mkdir {project_name}
$ git init
$ git add -A
$ git config user.name "xxx"
$ git config user.email "xxx@xxx"
$ git commit -m 'first commit'
$ git remote add origin https://github.com/xxx/xxx.git
$ git remote -v
origin https://github.com/xxx/xxx.git (fetch)
origin https://github.com/xxx/xxx.git (push)
$ git push -u origin develop
# もしくはclone$ git clone https://github.com/xxx/yyy

shell実行時、Gitのユーザー名/パスワードの入力を省略させるため以下を一旦、設定している。

~/.netrc

machine github.com
login {user_name}
password xxx

shellの設定

デプロイスクリプト 等。

Jenkinsファイルパス

  • 初期ログインパスワード記載ファイル: /var/lib/jenkins/secrets/initialAdminPassword
  • Jenkinsの環境設定ファイル: /etc/sysconfig/jenkins
  • Jenkins作業ディレクトリ: /var/lib/jenkins/*
  • Jenkinsのジョブ定義ファイル: /var/lib/jenkins/config.xml
  • Job格納ディレクトリ: /var/lib/jenkins/jobs
  • ビルド格納ディレクトリ: /var/lib/jenkins/jobs/{job}/builds/
  • ワークスペースディレクトリ: /var/lib/jenkins/workspace/
  • 起動スクリプト: /etc/init.d/jenkins
  • ログ: /var/log/jenkins/jenkins.log

Jenkins コマンド

# Jenkinsの起動
$ service jenkins start

# ステータスを確認
$ service jenkins status

# 起動確認
$ ps -elf | grep [j]enkins

Jenkins 再起動

“/safeRestart” へアクセスする。

Jenkinsのshell

Jenkinsの「シェルの実行」は、ビルド時に以下のオプション付きで実行される。

/bin/sh -xe
  • -x: スクリプト実行結果を表示。
  • -e: 実行後、exit codeが0以外の場合(エラー発生時)、終了させる。

Jenkinsのディスク容量不足

主にビルド履歴やプラグインがメモリを食う。

$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         489M   56K  488M    1% /dev
tmpfs            497M     0  497M    0% /dev/shm
/dev/xvda1       7.8G  6.4G  1.4G   83% /

$ sudo du -sh /var/lib/jenkins/* | sort -h -r | head -20

ジョブ設定で、「古いビルドの破棄」オプションは30日以上、100ビルドまで保存等、適宜設定/保存する。

トラブルシューティング

ログ

“/log/all”の画面へアクセスする。

ログには何も出ていない場合は、以下のようにプロセスを停止し、フォアグラウンドでJenkinsを実行する。

$ service stop jenkins
$ java -jar /usr/lib/jenkins/jenkins.war

ジョブが表示されない。

Jenkinsの管理 > 設定の再読み込み を実行する。

“リバースプロキシの設定がおかしいようです。”と表示される。

  • URLエンコードの設定ミス
  • Jenkinsの設定ミス
    • Jenkinsの設定 > システムの管理 > Jenkins URL

プラグインのアンインストールが出来ない

Jenkins自体を再起動しないと、アンインストールが行われない。

参考サイト

関連記事

ReverseProxy配下でDNSアクセス制御をかけると、Apacheが403となる

他ドメインのDNSアクセス制御

他ドメインのDNSをアクセス制御する場合、下記を設定する。
VirtualHostを設定している場合は、上記設定をしないと他ドメインのネームサーバーに同じドメインが指定された場合、他ドメインが同じサーバを向き、ドメイン以外の全てが同じ表示となってしまう。
Googleのペナルティを受ける可能性もある。

/etc/httpd/conf/httpd.conf

<VirtualHost *:80>
     ServerName dummy
     <Location />
        Order deny,allow
        Deny from all
     </Location>
</VirtualHost>

アクセス制御によるエラー

/var/log/httpd/error_log

client denied by server configuration: /var/www/dvh/xxx, referer: http://yyy.com
  • Aサーバ: http://example.com
  • Bサーバ: http://example.com/xxx

上記のようにプロキシサーバを経由し、ディレクトリでサーバ間を振り分けている場合、/xxx側ではApacheがエラーとなり403 forbidden となる。
この場合は、/xxx側のサーバでは、DNSアクセス制御は不要である。

[WordPress] 管理側へアクセスできない

前提

環境 Ver.
OS Amazon Linux AMI 2017.03.1.20170812 x86_64 HVM GP2
WordPress 4.5.3
Apache 2.4
MySQL 5.7
PHP 7.0
EC2 type t2.micro

調査

ログを確認。
リダイレクトが掛かっている模様。

/var/log/httpd/access_log

10.0.9.222 - example [30/Jun/2019:09:43:46 +0900] "GET /example/wp-admin/ HTTP/1.0" 302 - "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3000.000 Safari/509.00"

htaccessを確認する。

/path/to/wp-admin/.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# Basic Auth
AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /var/www/vhosts/example/htdocs/example/wp-admin/.htpasswd
AuthGroupfile /dev/null
require valid-user

# .htaccessと.htpasswdをアクセス不可に。
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy All
</Files>

# admin-ajax.phpはプラグインで利用する可能性があるので、除外。
<FilesMatch "(admin-ajax.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

キャッシュ系プラグインのフォルダを消す、または名称変更を行う。

$ cd /wp-content/cache/comet-cache/cache/http/
$ mv www.example.com www.example.com.bak

WordPressでキャッシュ系プラグインを無効化する。
wp-content/plugins/ 配下にある該当のプラグイン名を変更する。

※一時的な処置の為、後で元に戻す。

$ mv xxx xxx.bak

DBの”wp_options”テーブルにある”home”と”siteurl”を確認する。
->なぜか”siteurl”だけ、httpsがついている為、修正する。

mysql> SELECT * FROM wp_options WHERE option_name IN ('home','siteurl');
+-----------+-------------+-----------------------------------+----------+
| option_id | option_name | option_value                      | autoload |
+-----------+-------------+-----------------------------------+----------+
|         2 | home        | http://www.example.net/ | yes      |
|         1 | siteurl     | https://www.example.net/| yes      |
+-----------+-------------+-----------------------------------+----------+
2 rows in set (0.01 sec)

mysql> UPDATE wp_options SET option_value = 'http://www.example.net/' where option_name IN ('home','siteurl');
Query OK, 1 row affected (0.03 sec)
Rows matched: 2  Changed: 1  Warnings: 0

mysql> SELECT * FROM wp_options WHERE option_name IN ('home','siteurl');
+-----------+-------------+----------------------------------+----------+
| option_id | option_name | option_value                     | autoload |
+-----------+-------------+----------------------------------+----------+
|         2 | home        | http://www.example.net/ | yes      |
|         1 | siteurl     | http://www.example.net/ | yes      |
+-----------+-------------+----------------------------------+----------+
2 rows in set (0.00 sec)

今回の原因

今回の302リダイレクトは、管理画面側でサイトURLをhttpからhttpsへ変更したことによるリダイレクトであった。

リバースプロキシ配下でWordpressへアクセスさせている場合、管理画面のリンクが正しくない場合がある。
リバースプロキシ経由でWordpressへアクセスされている場合、 $_SERVER['HTTP_HOST'] がプロキシサーバー側を見てしまい、管理画面のリンク先などが正常に取得できない場合がある。

そのような場合、 “wp-config.php”へ以下を追記する。

$_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];