さくらレンタルサーバー(京大WEBホスティングサービス(タイプS))の管理運用に関するTiPS

京都大学では、ウェブサイトのためのホスティングサービスを、さくらインターネットのレンタルサーバー(以後、さくらレンタルサーバーと呼ぶ)へ移行しました。
京都大学独自に、WEBホスティングサービス・タイプS という名前で、スタンダード、ビジネス、マネージドの契約ができるようになっています。

本情報処理室では、このうち「ビジネス」を使って手持ちのウェブサイトを移行しています。その過程で得た知見ついて TiPSという形でまとめます。新しいものが先に来るようにしています。

以下、さくらインターネットのレンタルサーバーのことを、さくらインターネットなど省略して呼ぶことがあります。

バックアップファイルのアクセス禁止措置(.htaccess)

作成:2024年2月24日

Emacs を使っているとバックアップファイルとして、ファイル名の末尾に ~ が入ることがある。
またリモートログインしてファイルを編集するときに、 .php を .org などバックアップするときもあるかもしれない。
そうしたことが想定されるため、次の設定を全体に適用しておくことを推奨する

ssh によるリモートログインをした上で、
www/.htaccess (なければ作成)において

データベースからエクスポートするとき文字化けする場合がある

作成:2021年6月16日

たとえば WordPress が利用するMySQLのデータベースをエクスポートするのに利用することもある WP-CLI コマンドは、この時点(2021年6月16日)ではUTF8mb3 が標準ののため、UTF8mb4にしかない文字を追加していた場合、その部分が文字化けしてエクスポートされてしまいます。

これを回避するためには

  • wp db export –default-character-set=utf8mb4

のように明示的に文字コードを設定する必要があります。

Service Unavailable が出て、全サイトにアクセスできない

作成:2021年3月15日

アクセス転送量が多い、一時的にウェブアクセスが集中しているなどによって、運営 ( 設置 ) されているコンテンツによりサーバに過負荷が発生した場合、コンテンツへの 【制限】 されている可能性があります。

さくらコントロールパネルにログインし、サーバーステータス > エラーログ > 本日のエラーログにおいて、すべてのファイルについて
Transfer limit exceeded
が付与されていた場合には、転送量の一時的なオーバーによる制限になります。

あわせて、サーバーステータス > リソースのウェブ転送量をみて、突然振り切るぐらいの転送量になっていないかも確認してみてください。

その場合には、さくらサーバーへ SSHでログインし、アクセスログを解析して原因究明をする必要があります。

cat access_log_日付 | awk ‘{print $2}’ | sort | uniq -c > 出力先.log

を行い、アクセス回数  IPアドレス(ホスト名) を出力してみてください。
ウェブサーバーをコマンドベースで管理できるウェブサーバー管理者に依頼するとよいでしょう。
特定IPアドレス(ホスト名)が数千など相当数のアクセスがあるなど、異常なものを発見した場合、今度はそれをキーワードでログを解析します。異常なものを発見できれば、問題を特定できる可能性があります。

たとえば、100MBを超える PDFや動画ファイルなどを大量ダウンロードされているなどの原因もありえます。

原因を取り除く処置が出来た場合

サーバーステータス > リソース > リソースの制限・緩和より、一時的な緩和措置をするとサイトにアクセスできるようになるでしょう。ただ、注意点は2日間の限定緩和措置であること、その間にまた同じようなことが起こってしまうと制限をうけることになります。しかも、この緩和措置は1度使用すると、次に利用できるのは7日後になってしまうため、慎重な運用が必要です。

したがって一日の通信容量に制限があるサーバーについては、大きなファイルのダウンロードをするようなサイトは、他のサイトとサーバーを分けて管理するなどの対策も重要になってきます。

ホストによるサイトの制限(.htaccess / .ftpaccess)

作成:2021年3月9日

さくらインターネットでは、IPアドレス制限に加えてホストによるサイト制限が可能です。ただし、IPアドレスの逆引きができるホストに限ります。

たとえば、サイトへSSHログインして、 w コマンドで、いまアクセスしているホストをチェックする。
https://www.cman.jp/network/support/go_access.cgi
などのサイトで、ホストが表示されている場合には

.htaccess での記述方法(Apache 2.4 /  WordPressのログイン制限)

.ftpaccess での記述方法 (FTP制限)

などを記載することで、 .kyoto-u.ac.jp ドメイン(京都大学)に制限することができるということです。

ただし、京都大学のように利用しているIPアドレスがはっきりしている場合には、IPアドレス制限のほうがサーバーへの負荷が軽いのでおすすめです。Global IPアドレスを取得できない業者などウェブサイトの管理運用や制作を外注しているケースなどの場合、特定プロバイダ限定する設定は有用だと思います。

サーバー負荷の状況判断について

SSHでログインすることで、 uptime や top によってサーバーの稼働状況を調べることができます。

CPU稼働率のチェック

作成:2021年3月3日

Load Averages が 搭載されているコア数に達すると CPUが 100% 使用されているとみなすことができます(I/Oなどによる負荷を無視)。実際のサーバー負荷状況については、メモリやデータ転送量、I/Oまわりなど様々な要因があるので完全に知ることは出来ません。一つの目安だと思っておけば良いです。また「共有サーバー」であることも忘れてはなりません。

実際に稼働している CPUコア数については FreeBSDの場合、

  • sysctl kern.smp.cpus

コマンドでチェックできます。
参考:https://kaworu.jpn.org/kaworu/2007-08-04-1.php

Linux系だと、/proc/cpuinfo の cpu family、あるいは lscpu コマンド で確認できるようです。macOSならアクティビティモニタから確認できますが、Homebrew をインストールして brew install htop でインストールした htop コマンドを使えば表示できます。

たとえば CPUコア数が 6 の場合、Load Averages が 6 になれば、CPUが 100% 使用されているという目安になるということです。

CPUごとの稼働率をチェック

Linux では top コマンドを実行して画面が表示された後に 1 をタイプすることで表示が切り替わるようです。さくらインターネットでは FreeBSDを使っているからか、この方法は使えないようです。macOS だと Homebrew をインストールして brew install htop でインストールした htop コマンドを使えば表示できます。

さて、さくらインターネット(FreeBSD)では、

  • top -P

のように P オプションをつけることで、CPUごとの稼働率が表示されます。

キャッシュを使って WordPress の高速化

作成:2021年3月1日

負荷軽減や速度向上を図りたいときがあるかもしれません。さくらインターネットでは、PHPキャッシュ(APCu)が利用できます。ただし利用するためには設定が必要です。

設定方法と注意点について

にまとめました。

またキャッシュをクリアする方法について下記にまとめておきます。

ファイルアップロードサイズを増やす場合

作成:2021年2月26日

php.ini を編集する必要があります。

さくらコントロールパネルのスクリプト設定 > PHP.ini ファイルの設定か、www/php.ini を直接編集することなります。さくらインターネットでは memory_limit が 128MB のため、こちらもあわせて変更する必要があります。たとえば120MB ぐらいのファイルを WordPressのメディアからアップロードしたい場合

memory_limit = 192M
post_max_size = 144M
upload_max_filesize = 128M

あたりのように、ファイルアップロードサイズを 128MB にした上で、memory_limit > post_max_size > upload_max_filesize の大きさ順になるように設定します。

この設定は管理するすべてのドメインに適用されることになるので、あまり大きな値にするのは望ましくありません。なおさくらインターネットでは .htaccess による個別設定はできません。

また設定が更新されているかどうかは、サーバーに SSHログインして、下記のコマンドを実行することでPHPに関する設定を確認できます。

また memory_limitの値(特定の項目の値)を知りたければ、grep を利用して

と実行することでわかります。

なおデフォルトの値を知りたければ

でチェック可能です。

WAFが有効の場合の問題点

作成:2021年2月26日
更新:2024年2月26日

  1. WordPress で記事や固定ページで保存できないことがある
  2. テーマエディタでテーマのPHPファイルを保存するとファイルが壊れる場合がある

PHP を編集する場合には、テーマエディタは使わず、さくらコントロールパネルのファイルマネージャーやFTPソフト経由が安全だと思います。またさくらインターネットは、 .htaccess で WAFのカスタマイズが出来ないため、問題が生じた場合には WAFをオフにするしかありません。

その場合には、Wordfence Security プラグイン(https://ja.wordpress.org/plugins/wordfence/)など、WAF機能のあるプラグインをいれてこれを有効にしておくのがよいかと思います。ただしこの手のセキュリティ対策ソフトは自動スキャンが有効の場合、サーバーへの負荷がかかるため、サーバーによってはエラーになったり、制限がかかったりするので注意が必要です。その場合には、スケジュールスキャンを無効にしておくとよいでしょう。

常駐型プログラムは使えない

作成:2021年2月25日

バックアップ系スクリプトなどを、& (バックグラウンド実行)したとしても、フォワグラインドでの実行でも、一定時間経つと強制終了してしまうようです(1時間ぐらい?)。

ご利用上の注意(さくらインターネットのレンタルサーバー)

をみると、「daemonとしてサーバーに常駐するプログラムの実行」とあるので、その対策をしているということだろうと思います。サイトのバックアップなどでプログラムを実行することがありえますが、長時間かかる場合には注意が必要になるだろうと思います。

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

を追加することで PHP で imagick モジュールを使えるようになり、上記の警告がでなくなります。なお php.ini を保存するとウェブシステム(Apache)が再起動しているようです(エラーログに Apache起動の resuming normal operations が記載される)。

参考:「imagickがインストールされていない」解決方法【WPサイトヘルス】

さくらレンタルサーバーへのファイルアップロード

作成:2021年1月15日

  1. SSH : 契約時の渡された管理者アカウントのみ(作成したユーザーはログインできません)
  2. サーバーコントロールパネル内のファイルマネージャー(各ユーザーがログイン可能)
  3. 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変更したいと思うでしょう。その手順を書き出しておきます。

  1. さくらレンタルサーバーで移行するドメイン(サブドメイン)を登録
  2. 登録したドメインの SSL設定から、独自SSLを選択
  3. 秘密鍵、証明書(CER)、中間証明書は、移行前の他サーバーで利用中のものをインポートします(CSRの作成は不要)
    下図は京都大学の例になっていますが、導入している証明書がただしいかどうか確認してください。
  4. 追加し終わったら、SSL設定内の「SSLの利用」が有効になるまで待ちます。
    あとは、下図のようにSNI SSLを利用するにチェックをいれます。
  5. サイトのデータを移行します
  6. Windowsなら hosts (C:\Windows\System32\drivers\etc フォルダに作成)ファイルを作成、
    Macなら、ターミナルから sudo vi /etc/hosts  として hosts ファイルを編集します。さくらレンタルサーバーのIPアドレス ウェブサイトのドメイン(サブドメイン)とすることで、その端末のみ DNS変更前の状況で変更後のチェックをできます。
    *このあたりは、わかった上でしないとトラブルの元ですので詳しい話はしません。それがわかっている管理者向けの情報のためです。
  7. 問題ない状況なら、DNS変更をします。
  8. 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にログインせずとも管理が可能になります。

参考サイト

ユーザー追加や Logbookプラグインを利用した重要ログ確認、手軽なところでは WordPressのバージョン確認が一括で可能です。

記事を評価する(This article is evaluated): [1 Star2 Stars3 Stars4 Stars5 Stars] 未評価(Not Yet)
読み込み中...