京都大学では、ウェブサイトのためのホスティングサービスを、さくらインターネットのレンタルサーバー(以後、さくらレンタルサーバーと呼ぶ)へ移行しました。
京都大学独自に、WEBホスティングサービス・タイプS という名前で、スタンダード、ビジネス、マネージドの契約ができるようになっています。
本情報処理室では、このうち「ビジネス」を使って手持ちのウェブサイトを移行しています。その過程で得た知見ついて TiPSという形でまとめます。新しいものが先に来るようにしています。
DNS は存在せず hosts で設定した公開前HPにアクセスすると hostname lookup: Name or service not known が出る
作成:2021年1月26日
WAFを有効にしている場合、hosts に指定していたとしても DNS情報がなければ、「hostname lookup: Name or service not known」エラーとなりサイトにアクセスできないようです。公開前HPなどの場合には、パスワードロックやIP制限をした上で、WAFをオフにしてテストするのがよいと思います。
移行した WordPress で Warning: Use of undefined constant ** が出る
作成:2021年1月19日
PHP 7.2 以降は、クォートしない文字列は警告が出るようになっているためです。
PHP 7.2.x で推奨されなくなる機能 のクォートしない文字列参照(php.net)
駄目な例
if ($lang === ja){
}
PHP 7.2 でエラーがでないようにした例(もともと、下記が推奨された書き方)
if ($lang === ‘ja’){
}
WordPress のサイトヘルスで「一つ以上の推奨モジュールが存在しません」
作成:2021年1月19日
さくらインターネットの場合、
- オプションのモジュール imagick がインストールされていないか、無効化されています。
が出るようです。
さくらコントロールパネルより php.ini の設定に
extension = imagick.so
を追加する必要があります。これで imagick が php で扱えるようになります。保存するとウェブシステム(Apache)が再起動しているようです(エラーログに Apache起動の resuming normal operations が記載される)。
参考:「imagickがインストールされていない」解決方法【WPサイトヘルス】
さくらレンタルサーバーへのファイルアップロード
作成:2021年1月15日
- SSH : 契約時の渡された管理者アカウントのみ(作成したユーザーはログインできません)
- サーバーコントロールパネル内のファイルマネージャー(各ユーザーがログイン可能)
- FTPSソフト
上記の3種類存在します。
1つ目は、サーバーの全権限をもつ管理者が可能です。最初はパスワード認証になっているので公開鍵を登録しましょう。
2つ目は、管理者によって作成されたユーザー(ビジネス以上)がログインできます。Web管理者の場合サーバーの全アクセスログを見ることができてしまうため、通常は一般ユーザーにし、FTP接続可能なドメインを限定設定するのがよいでしょう。
ユーザー:ユーザー名@初期ドメイン
パスワード:ユーザーのパスワード
でログインできます。
3つ目は、FTP接続のIPアドレス制限:https://help.sakura.ad.jp/206206721/ によって接続を制限できます。
参考:https://help.sakura.ad.jp/206054272/
に説明されるように国内限定の制限は最初なら備わっています。大学等組織内部のネットワーク限定など、それ以上の制限をしたい場合には制限してください。
*京都大学ネットワーク限定にしたい場合には
http://www.iimc.kyoto-u.ac.jp/ja/services/kuins/external/use/proxy.html#ipaddress
の「学外サーバーで識別されるIPアドレス」を参考にすると良いです。
権限がないフォルダは、FTPソフトからは「非表示」(アクセス不可)になります。
*過去HPを残す場合、アップロードする必要はないため、そのフォルダは全拒否しておくと安全です。
FileZilla の設定例は下記の通りです。
初期ドメイン、ユーザー、パスワードは、サーバー管理者より発行してもらってください。
*京都大学 KUINS-III からは直接外部へFTP接続できません。
http://www.iimc.kyoto-u.ac.jp/ja/faq/whs/web_s/ftp.html
上記を参考にプロキシ設定をしてください。Filezilla では下記の汎用プロキシ設定をするとよいです。
QNAP(ファイルサーバー)への FTP over SSL/TLS 接続(FIREWALL設定)
作成:2021年1月12日
さくらレンタルサーバーから FTPS を使って接続する場合、QNAPへの接続について パッシブモードで通信する場合、FTPポート(21/tcp)に加えて、QNAPのFTP データポート「55536-56559/tcp」も許可する必要があります。
たとえば、WordPress の BackWPUPプラグインで QNAPの FTPS 接続する場合、FTPデータポートが閉じている状態だと、
WARNING: ftp_nb_fput(): php_connect_nonb() failed: Operation now in progress (36)
WARNING: ftp_nb_fput(): Entering Passive Mode (QNAPのIPアドレス,***,**).
ERROR: Cannot transfer backup to FTP server!
というエラーが起こって通信出来ません。
参考サイト
SSHログインしたターミナル上で more が日本語が文字化けする
作成:2021年1月12日
more はファイルを一定ページごとに表示するCUI コマンドです。さくらレンタルサーバーのシェルは csh のため、ホームディレクトリの .cshrc の末尾に
setenv LANG ja_JP.UTF-8
を追加することで文字化けしなくなります。
参考サイト
.htaccess でトップページのみリダイレクトする方法
作成:2021年1月12日
トップページ以外は転送したくない、別転送が必要などの場合があります。ウェブサイトの設定は .htaccess である程度許容されており、下記のRewriteルールによって実現可能です。
RewriteEngine on
RewriteRule ^$ 転送先URL(ディレクトリ) [R=301,L]
*上記はそのままコピー&ペーストしてもHTMLサニタイズの影響で動かない可能性があります(特に記号部分)。記号部分は手打ちし直してください
参考サイト
他サーバーからさくらレンタルサーバーへの移行時に、既存のSSL証明書をインポートする方法
作成:2021年1月12日
さくらレンタルサーバーのSSL証明書(無料版の場合)を使いたい場合は、DNS変更した後でしか申請できません。
情報基盤管理担当としては、他のサーバーで稼働中の常時SSLサイトを移行する場合には、事前にサイトとSSL証明書を移行して、端末のホスト情報(/etc/hosts 等)をさくらレンタルサーバーに切り替えて、その端末独自で事前確認した上でDNS変更したいと思うでしょう。その手順を書き出しておきます。
- さくらレンタルサーバーで移行するドメイン(サブドメイン)を登録
- 登録したドメインの SSL設定から、独自SSLを選択
- 秘密鍵、証明書(CER)、中間証明書は、移行前の他サーバーで利用中のものをインポートします(CSRの作成は不要)
下図は京都大学の例になっていますが、導入している証明書がただしいかどうか確認してください。
- 追加し終わったら、SSL設定内の「SSLの利用」が有効になるまで待ちます。
あとは、下図のようにSNI SSLを利用するにチェックをいれます。
- サイトのデータを移行します
- Windowsなら hosts (C:\Windows\System32\drivers\etc フォルダに作成)ファイルを作成、
Macなら、ターミナルから sudo vi /etc/hosts として hosts ファイルを編集します。さくらレンタルサーバーのIPアドレス ウェブサイトのドメイン(サブドメイン)とすることで、その端末のみ DNS変更前の状況で変更後のチェックをできます。
*このあたりは、わかった上でしないとトラブルの元ですので詳しい話はしません。それがわかっている管理者向けの情報のためです。 - 問題ない状況なら、DNS変更をします。
- DNS変更後に、 hosts ファイルの設定を削除し確認します。
移行後に、SSL証明書をさくらレンタルサーバーの SSL証明書に切り替えたい場合
一旦SSL証明書を削除した上で、改めて新規設定をする必要があります。その間は一時的にSSL接続(https://)は途切れます。そのため、稼働中のサイトについては、メンテナンス中などの事前アナウンスが必要です。
無料版の Let’s Encrypt の場合、申請して 15分ぐらいで有効化できるようになりました。あくまで数サイトのお試しでの経験時間であり、その時間を保証するわけではありません。
設定が終わったら、HTTP→ HTTPSへの転送を必要ならしておくとよいでしょう。
www.ドメイン のウェブサイトの場合には、ドメインで申請するとよい
作成:2021年1月12日
さくらレンタルサーバーでは、ドメインに対しての接続を www.ドメインへ転送するサービスが存在します。つまり、www.ドメインと ドメインの2つを申請した場合、後からややこしくなるので、www.ドメインのウェブサイトを利用する場合には、ドメインで申請しておくことがトラブルを引き起こす可能性が低くなるかと思います。
ドメインが登録出来ない場合
過去に誰かがドメインを登録していると、重複してドメインを登録できません。
たとえば、 ○○.ドメイン だけを登録したらよいのに、うっかりドメインも登録されていたら、たとえ使っていなくてもドメインの登録ができなくなります(△△.ドメインは登録可)。過去にサポートとやり取りしたことがありますが、過去の登録者に連絡してもらって削除してもらう必要がありました。
こうしたややこしいことが起こるのは、過去に外注業者やすでに離任されてしまった担当者が登録してしまっていて現担当者が把握できていない場合があります。組織統合等で管理外のドメインを管理する必要がでたときに起こり得る問題でもあります。そうした場合には、さくらインターネットのサポート経由で対応してもらう必要があります。
HTTPS転送を有効にした状態で、フォルダ変更するとリダイレクトループになる
作成:2021年1月12日
一日程度放置したら解決したので、さくらレンタルサーバー側のリバースプロキシのキャッシュ問題だろうなと推測しています。
.htaccess で BASIC認証+IP制限をする方法(Apache 2.4)(サンプル例)
作成:2021年1月12日
さくらレンタルサーバーのウェブシステムは Apache 2.4系です。
そのため、.htaccess は Apache 2.2 系に加えて 2.4系の書き方ができます。今後のことを考えると、 2.4系で書いておくほうが無難だろうと判断するかもしれません。しかし書き方が大きく変わっているので、どうやって書いたらよいか戸惑いました。そのため、サンプル例を載せておきます。
なお、さくらレンタルサーバーでは、HTTP/HTTPS についてはデフォルトで、特定のファイルやディレクトリ(WordPressのログイン)に対して国内IP限定の制限が掛かっています。JetPackプラグイン用に特別に許可設定をしていたりと基本的なセキュリティ制限はすでにされています。
参考:https://help.sakura.ad.jp/206054272/
とはいえ、もっと制限を厳しくしたい場合もあると思います。そのケースの参考にしてみてください。
Require all denied
<RequireAll>
# BASIC 認証
AuthType Basic
AuthName “Sample”
AuthUserFile .htpasswd の場所(絶対パス:ユーザーのHOMEディレクトリ直下推奨)
AuthGroupFile /dev/null
Require valid-user
# IP 制限
<RequireAny>
Require ip AAA.BBB.CCC.DDD
Require ip AAA.BBB.CCC.0/24
</RequireAny>
</RequireAll>
*上記はそのままコピー&ペーストしてもHTMLサニタイズの影響で動かない可能性があります(特に記号部分)。記号部分は手打ちし直してください
*京都大学ネットワーク限定にしたい場合には
http://www.iimc.kyoto-u.ac.jp/ja/services/kuins/external/use/proxy.html#ipaddress
の「学外サーバーで識別されるIPアドレス」を参考にすると良いです。
上記の青部分を .htaccess に書くことで、 BASIC認証かつIPアドレス制限をすることができます。
公開前のサイトなどに使う場合もあると思います。
Apache 2.4系では、IP制限が Require all denied で全拒否した上で、Require ip によって許可をするというスタンスになります。ANDをする場合には、タグでくくる必要があります。
WordPress のログイン(/wp-admin/ と /wp-login.php)のIP制限を厳しくする場合
<Files ~ “wp-login.php|wp-admin”>
Require all denied
Require ip AAA.BBB.CCC.DDD
Require ip AAA.BBB.CCC.0/24
</Files>
*上記はそのままコピー&ペーストしてもHTMLサニタイズの影響で動かない可能性があります(特に記号部分)。記号部分は手打ちし直してください
のように、全拒否した上で許可するIPアドレスやネットワークを記載することができます。
*京都大学ネットワーク限定にしたい場合には
http://www.iimc.kyoto-u.ac.jp/ja/services/kuins/external/use/proxy.html#ipaddress
の「学外サーバーで識別されるIPアドレス」を参考にすると良いです。
WordPress のバックアップと更新を自動化する方法
作成:2021年1月12日
さくらレンタルサーバーでは、WP-CLIコマンドが標準搭載されています。
参考サイト
バックアップ
BackWPUPプラグインを使ってバックアップ設定をして、そのジョブ番号をメモしておけば
cd WordPressインストールフォルダ
wp backwpup start [jobid]
でCUIから BackWPUPのジョブを実行できます。さくらレンタルサーバーでは cronが使えるため、バックアップの自動化が可能です。
プラグイン更新→本体更新→DB更新→言語データ更新
cd WordPressインストールフォルダ
wp plugin update –all
wp core update
wp core update-db
wp core language core update
テーマ更新もできますが、場合によってはテーマが崩れてしまう場合もあるのでここでは推奨しません。
以上、バックアップ→各種更新の流れを1つのシェルスクリプトにして、cronで毎日実行すれば、毎日バックアップして更新もするという自動化が可能です。
WordPress 管理をリモートから行う
作成:2021年1月12日
WP-CLIを利用すれば、WordPressにログインせずとも管理が可能になります。
参考サイト
- 【備忘録】WP-CLI エイリアスを利用したリモートサーバーの WordPress 管理 #wckyoto2017
- LogBook プラグインを使って WordPress の重要操作ログを手軽に取ってみよう
ユーザー追加や Logbookプラグインを利用した重要ログ確認、手軽なところでは WordPressのバージョン確認が一括で可能です。