■目次
UNIXとLinuxの違いLinuxのディレクトリ構成yumリポジトリソースコードからインストールアクセス権メモユーザの停止ユーザのログイン制御SFTP用ユーザの追加(鍵認証なし)FTP用ユーザの追加(グループで管理)Apacheにレスポンスタイムを記録ApacheでバーチャルホストApacheでユーザディレクトリApache+SSLでRC4暗号化を外すApacheでfavicon.icoの404エラーを記録させないnginxでリクエストを操作するnginxにレスポンスタイムを記録nginxでリバースプロキシを使うnginxをロードバランサーにするApache・Nginxのエラーログフォーマットを変更rsync(一方向同期)rsync(双方向同期)メールのキューを削除するroot宛のメールを削除するMySQLのデータベース文字コードMySQLで外部キー制約を無視してインポートPostgreSQLでEUC_JPのデータベースを作成SSIを使用する処理の進捗を表示サーバ2台構成でWordPress(rsyncでファイル双方向同期、MySQLレプリケーションでデータベース同期)接続元引越時のTODOシステム障害対策独自ドメインを設定する(ムームードメイン)コントロールパネルからリモートコンソールを使う(さくらの専用サーバ)OS再インストール(さくらのVPS)
■UNIXとLinuxの違い
参考:3分間で人に説明できるようになるUnixとLinuxの違い https://eng-entrance.com/unix_linux
■Linuxのディレクトリ構成
bin ... 一般ユーザ、管理ユーザ向けコマンド。ブートするときに必要な、システムの基本コマンド。binaries sbin ... 管理ユーザ向けコマンド。ブートするときに必要な、管理ユーザ用コマンド etc ... 設定ファイル。Editable Text Configuration(後付の意味) lib ... binやsbinなどに置かれたコマンドやプログラムが利用するライブラリ module ... カーネルモジュール lib64 ... 64bitライブラリ opt ... Linuxインストール後、追加でインストールしたパッケージ(ソフトウェア) dev ... デバイスファイル(ハードウェアもファイルとして扱うという、Linuxの設計思想のため) sys ... ドライバ関連のプロセス srv ... システムに提供された固有のデータ proc ... プロセスファイルシステム。カーネルの情報 boot ... システムの起動に必要なブートローダ関連のファイルや、カーネルイメージ lost+found ... システムのバックアップや復元用 mnt ... 外部記憶装置を配置するディレクトリ(スワップなど) media ... 外部記憶装置を自動的に配置するディレクトリ(CD-ROMなど) root ... rootユーザのホームディレクトリ tmp ... 一時的なファイル。リブートすると消える var ... システム運用中にサイズが変化するファイル。頻繁に書き換えられるデータファイル。variable log ... ログファイル spool ... メールやプリンタジョブ蓄積場所 run ... 起動中サーバのプロセスID tmp ... 一時的なファイル。リブートしても消えない www ... Webサーバ用のデータ usr ... 読み出しが可能でユーザが共有できるファイル bin ... 一般ユーザ、管理ユーザ向けコマンド。ブートのときには使用しない、平常時用の基本コマンド sbin ... 管理ユーザ向けコマンド。ブートのときには使用しない、平常時用のシステム管理コマンド lib ... ライブラリ share ... 筋腫に依存しないファイル local ... Linuxインストール後、追加でインストールしたパッケージ。bin, sbin, lib などにあたるコマンド home ... 一般ユーザのホームディレクトリ 参考:Filesystem Hierarchy Standard - Wikipedia https://ja.wikipedia.org/wiki/Filesystem_Hierarchy_Standard 参考:Linuxの基本の基本。Linuxの基本的なディレクトリ構成 http://oxynotes.com/?p=5987 参考:Linuxのディレクトリ構造(一覧)を理解する http://www.linuxmaster.jp/linux_skill/2010/02/06linux.html 参考:なぜ,/var や /etc が /etc や /cfg というディレクトリ名ではないのか? http://d.hatena.ne.jp/ytakano/20100715/1279219401 参考:WindowsのあのフォルダはUNIX/Linuxで言えばあそこだ http://qiita.com/yuba/items/669f718fe6e62dbaab19
■yumリポジトリ
「yum」は「ヤム」と読む 参考:Yellowdog Updater Modified https://ja.wikipedia.org/wiki/Yellowdog_Updater_Modified 参考:IT業界で横行する恥ずかしい英語発音 http://qiita.com/ryounagaoka/items/290885ee3291b393fe1f 参考:yum 名前の由来 http://poormemory.seesaa.net/article/356576330.html 参考:yumリポジトリ一追加リスト 完全版 http://qiita.com/bezeklik/items/9766003c19f9664602fe
■ソースコードからインストール
基本的に以下の流れでインストールする ただし yum や apt-get など、できるだけコマンドでインストールする方がバージョンアップなど管理が楽 $ cd /usr/local/src … 作業ディレクトリに移動 $ wget https://example.com/example-2.1.tar.gz … ソースコードの圧縮ファイルを取得 $ tar -xvf example-2.1.tar.gz … 圧縮ファイルを解凍 $ cd example-2.1 … 解凍して作成されたディレクトリ内に移動 $ ./configure … インストール環境を調査し、その状況を記述したMakefileファイルを作成 $ make … configureで作成されたMakefileをもとにして、ソースコードをコンパイル $ make install … makeで生成されたバイナリファイルなどを、規定のディレクトリにコピー(インストール) 参考:./configure;make;make installにはどんな意味がある? http://www.itmedia.co.jp/help/tips/linux/l0302.html
■アクセス権メモ
参考:SUIDとは http://www.itmedia.co.jp/enterprise/articles/0804/08/news014.html ■SUID(Set User ID) # ls -l /usr/bin/passwd -rwsr-xr-x. 1 root root 30768 2月 22 20:48 2012 /usr/bin/passwd ↑sになっている。どのユーザがプログラムを実行した場合でも、ファイルの所有者の権限で実行される これにより、root権限の無い一般ユーザが /etc/shadow を編集できる ■SGID(Set Group ID) どのユーザがプログラムを実行した場合でも、グループの所有者の権限で実行される ■SUIDとSGIDの確認 # find / -perm -4000 -o -perm -2000 参考:ざっくり概要!Linuxセキュリティに関する基礎知識まとめ https://eng-entrance.com/linux-security-basic ■スティッキービット # ls -ld /tmp drwxrwxrwt. 5 root root 4096 5月 7 17:53 2016 /tmp ↑tになっている。実際のパーミッションに関係なく、ファイルもしくはディレクトリの所有者と、rootユーザーのみが名前の変更と削除を行える すべてのユーザーがファイルやディレクトリを作成できるようにしたいが、作成したファイルやディレクトリを他人が消せないようにしたい という場合に使用される
■ユーザの停止
参考:逆引きUNIXコマンド/ユーザアカウントをロック・アンロックする方法・usermodコマンド http://linux.just4fun.biz/?%E9%80%86%E5%BC%95%E3%81%8DUNIX%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/%E3%8... # passwd -l xxxxx … ユーザ xxxxx をロック(パスワードで認証できなくなる) # passwd -u xxxxx … ユーザ xxxxx のロックを解除 以下の方法でもロック&解除できる # usermod -L xxxxx # usermod -U xxxxx 上記の方法は、どちらもパスワード認証のロック 鍵認証の場合は一例だが、以下の方法でロック&解除できる(鍵ファイルを読めないようにしてロック) アカウントロック # chmod 000 /home/xxxxx/.ssh/authorized_keys アカウントロック解除 # chmod 600 /home/xxxxx/.ssh/authorized_keys
■ユーザのログイン制御
# usermod -s /sbin/nologin xxxxx … ユーザ xxxxx のログインを禁止する # usermod -s /bin/bash xxxxx … ユーザ xxxxx のログインを許可する
■SFTP用ユーザの追加(鍵認証なし)
※SFTPは実質SSHなので、ユーザ追加の手順はSSHと同じ # vi /etc/ssh/sshd_config
PasswordAuthentication yes
# useradd webmaster # passwd webmaster # usermod -a -G apache webmaster
■FTP用ユーザの追加(グループで管理)
※公開ディレクトリ上位の権限をapacheに変更、 グループに読み書き実行権限を付与、 FTPユーザにapacheグループを追加、 という手順でアップロードを許可している。以下参考。 # adduser --shell /sbin/nologin --home /var/www/vhosts/main/ refirio-main # passwd refirio-main # adduser --shell /sbin/nologin --home /var/www/vhosts/pre/ refirio-pre # passwd refirio-pre # usermod -a -G apache refirio-main # usermod -a -G apache refirio-pre # chown apache. /var/www/vhosts/main/ # chown apache. /var/www/vhosts/pre/ # chmod 775 /var/www/vhosts/main/ # chmod 775 /var/www/vhosts/pre/
■Apacheにレスポンスタイムを記録
ログフォーマットに %D を追加するとマイクロ秒単位で、%T を追加すると秒単位でレスポンスタイムが記録される 以下は設定例 LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined これで、各行の最後に「16255」のような数値が記録されるようになる この場合、処理に16255マイクロ秒、つまり0.016255秒かかったことになる ※1秒 = 1,000ミリ秒 = 1,000,000マイクロ秒 参考:Apacheのレスポンスタイムをログ記録する http://d.hatena.ne.jp/stfuawsc/20090608/1244438262 参考:Apacheのリクエスト処理時間(%T or %D)は正確には何の時間か http://dev.ariel-networks.com/Members/inoue/response-time/ 参考:Apacheのレスポンス分析に必要なスクリプトまとめ http://koduki.hatenablog.com/entry/2012/11/24/171534 参考:Apacheのログから応答速度分布やエラー状況を分析する(原始的な方法) http://www.teradas.net/archives/5298/
■Apacheでバーチャルホスト
※SSL用の設定は丸ごと移行させないと、デフォルト値が上書きできずに反映される?(要検証) ※バーチャルホストの作成場所は /var/www/vhosts/example.com/ /var/www/vhosts/pre.example.com/ のようにするのが一般的?ドメインに関連付けるとドメインの変更に対応しづらいけど、そう変更されるものではないからいい? ドメインが未決定の場合に設定できない? /var/www/vhosts/example/ /var/www/vhosts/pre_example/ のようにする方がいいかも? 複数サイトを管理しないのなら product や staging や develop でいいかも その中に cgi-bin や html を作る? ※IPアドレスでアクセスしたときはIPアドレスもしくはサーバ名だけが表示されるページにアクセス、 ドメインを指定してアクセスしたら対応するページにアクセス。 とすると管理しやすいかも ※バーチャルホストが不要な案件でも、後々検収環境が追加されたりを想定して、常にバーチャルホストにしておくといいかも 参考:名前ベースの仮想ホスト http://www.adminweb.jp/apache/virtual/index2.html 参考:バーチャルホスト設定(Apache) http://centossrv.com/apache-virtualhost.shtml # mkdir -p /var/www/vhosts/main/html … バーチャルホスト用ドキュメントルートディレクトリ作成 # vi /etc/httpd/conf/httpd.conf … Apache設定ファイル編集
# # Use name-based virtual hosting. # NameVirtualHost *:80 … コメント解除(バーチャルホスト有効化) # # NOTE: NameVirtualHost cannot be used without a port specifier # (e.g. :80) if mod_ssl is being used, due to the nature of the # SSL protocol. #
# vi /etc/httpd/conf.d/virtualhost.conf … バーチャルホスト設定ファイル作成
<VirtualHost *:80> … httpアクセス ServerName refirio.net … refirio.net でアクセスされた場合 DocumentRoot /var/www/vhosts/main/html … /var/www/vhosts/main/html をドキュメントルートとする <Directory "/var/www/vhosts/main/html"> Options Includes ExecCGI FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
※最低限、以下の記述だけで動作する。Directoryの指定は一箇所にまとめておくとメンテナンスしやすそう
<VirtualHost *:80> ServerName refirio.net DocumentRoot /var/www/vhosts/main/html </VirtualHost>
■SSL(必要に応じて) 続いて、SSL用の設定を行う 参考:apacheで複数のSSL設定を行う http://y-stream.blogspot.jp/2011/09/apachessl.html 参考:Apache2.2 の VirtualHost を SSL を使うサイトにも適用 http://qiita.com/da0shi/items/70572e1da228795e0d4b 参考:vi http://ext.omo3.com/vi/index.html 参考:ApacheでSSL(https)で複数のバーチャルホストの設定 http://istks.net/2322 # vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 NameVirtualHost *:443 … 追加する
# vi /etc/httpd/conf.d/ssl.conf … ApacheSSL設定ファイル編集 <VirtualHost _default_:443> の項目をすべてコメントアウトする (「<VirtualHost _default_:443>」と「</VirtualHost>」の行も含めてコメントアウトする) たとえ内容がカラでも、後で設定する「<VirtualHost *:443> 〜 </VirtualHost>」が反映されないため # vi /etc/httpd/conf.d/virtualhost.conf … バーチャルホスト設定ファイル編集
<VirtualHost *:443> … httpsアクセス ServerName refirio.net … refirio.net でアクセスされた場合 DocumentRoot /var/www/vhosts/main/html … /var/www/vhosts/main/html をドキュメントルートとする ErrorLog logs/ssl_error_log … 以降はSSL用の設定 TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW SSLCertificateFile /etc/httpd/conf/ssl.crt/refirio.net.20170410.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/refirio.net.20170410.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/ica.refirio.net.20170410.crt </VirtualHost>
もともと ssl.conf の VirtualHost 内にあった設定を記載し、 さらに ServerName や SSLCertificateFile の設定を追加している ■動作確認 # chown refirio. /var/www/vhosts/main/html/ … ドキュメントルートの所有者を「refirio」に変更 # ll /var/www/ … ドキュメントルートの所有者を確認 合計 24 drwxr-xr-x 2 root root 4096 10月 5 11:45 cgi-bin drwxr-xr-x 3 root root 4096 10月 9 00:19 error drwxr-xr-x 5 refirio refirio 4096 9月 27 17:43 html drwxr-xr-x 3 root root 4096 9月 27 09:29 icons # service httpd configtest … 設定ファイルの構文をチェック # service httpd restart … httpdを再起動 httpd を起動中: [ OK ] # vi /var/www/vhosts/main/html/index.html … テストページ作成
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>テスト / main</title> </head> <body> <p>テスト / main</p> </body> </html>
■サブドメインなしでのアクセス refirio.net で /var/www/html を表示し、 test.refirio.net で /var/www/vhosts/test/html を表示するような場合、 上の設定を行うと /var/www/html へアクセスできなくなる可能性がある。 その場合、以下のように /var/www/html へのアクセスを明示的に設定する。 <VirtualHost *:80> ServerName refirio.net DocumentRoot /var/www/html </VirtualHost> IPアドレス経由でのアクセスなら、以下のように設定できる。 <VirtualHost *:80> ServerName 203.0.113.1 DocumentRoot /var/www/html </VirtualHost> ■ログでバーチャルホストを区別 参考:バーチャルホスト https://httpd.apache.org/docs/2.0/ja/logs.html#virtualhosts バーチャルホストごとにApacheログを分けない場合、どのアクセスがどのバーチャルホストに対してのアクセスなのか区別できなくなる LogFormatに「%v」と書いておくと test.refirio.net のような値として記録されるので、必要なら調整する 以下は設定例 LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{X-Forwarded-For}i %{X-Forwarded-Proto}i %v" combined test.refirio.net のような値ではなく、例えばサブドメイン「test」でアクセスした際に「test」と記録したい場合、以下のように設定する 「combined_test」の部分は、他のログ設定と重複しない値にする 以下は設定例 <VirtualHost *:80> ServerName test.refirio.net DocumentRoot /var/www/test LogFormat "%h %l %u %t \"%!414r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{X-Forwarded-For}i %{X-Forwarded-Proto}i test" combined_test CustomLog logs/access_log combined_terraport env=!no_log </VirtualHost> ただしバーチャルホストが増えると管理しづらいので、前に挙げた方法を推奨
■Apacheでユーザディレクトリ
http://example.com/~refirio/ のようなURLを使えるようにする # vi /etc/httpd/conf/httpd.conf … httpdの設定ファイルを編集
<IfModule mod_userdir.c> # # UserDir is disabled by default since it can confirm the presence # of a username on the system (depending on home directory # permissions). # #UserDir disabled UserDir enabled … enabledに変更 (Apache再起動時に「UserDir "enable" keyword requires」のエラーなるようなら、コメントアウトする) # # To enable requests to /~user/ to serve the user's public_html # directory, remove the "UserDir disabled" line above, and uncomment # the following line instead: # #UserDir public_html UserDir "/home/*/public_html" … ユーザディレクトリの場所を設定 </IfModule>
# service httpd configtest … 設定ファイルの構文をチェック # service httpd restart … Apacheを再起動 httpd を停止中: [ OK ] httpd を起動中: [ OK ] 上の場合、/home/refirio/public_html/index.html には /~refirio/ でアクセスできるようになる 参考:ApacheでUserDir公開の、メモ書き http://qiita.com/ms2sato/items/299278b2492c96cb80ae
■Apache+SSLでRC4暗号化を外す
サーバのセキュリティチェックなどで、SSLの設定で「SSLCipherSuite」に「RC4」が使用されている …と指摘されたときの対応方法について 以下、指摘内容
SSL/TLS が弱い RC4 暗号を使用: RC4 は、出力に一定のバイアスがあるため、暗号文を統計的に解析できる現実性が高いことが発見されています。 想定される攻撃としては、ブラウザに悪質な JavaScript をインジェクトするものがひとつの例として考えられます。 これにより、ターゲットの Web サイトとの間に複数の接続が確立され、 同じ HTTP Cookie が暗号化された形で複数回 Web サイトに送信されるようになります。 そこから、攻撃者は大量の暗号文サンプルを入手でき、それを統計的な解析に利用できるようになります。
具体的な対内容は以下のとおり confファイルで
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
を以下のように変更して、Apacheを再起動する(CentOS6の場合)
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:!RC4:!3DES:!RSA
上記設定は、以下などのファイルに書かれていることが多い /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/virtualhost.conf 設定内容の意味やCentOS7での設定方法は、以下のページに詳しく書かれている 参考:CentOS6.9/CentOS7.4でWebサーバのSSLのセキュリティ対策 - Qiita https://qiita.com/qiitamatumoto/items/f93286fc82ec9a0cdff7
■Apacheでfavicon.icoの404エラーを記録させない
favicon.icoを設置しない場合でaccess_logにfavicon.icoの404エラーを記録させたくない場合、 /etc/httpd/conf/httpd.conf に以下の設定を追加する SetEnvIf Request_URI "favicon\.ico" no_log error_log にも記録させたくない場合、以下の設定も追加する (404エラーを記録させないだけなら、ErrorDocumentなしでも十分かも?要確認) Redirect 404 /favicon.ico ErrorDocument 404 "File Not Found" 参考:【Apache】favicon.icoをログに出さない! http://dblog3024.blog.fc2.com/blog-entry-2.html 参考:Apache > favicon.icoをエラーログに残さず、ファイルIOも発生させない方法 http://d.hatena.ne.jp/tama0905/20110820/1313824404
■nginxでリクエストを操作する
■リダイレクトする /etc/nginx/nginx.conf で以下のように設定する
# /hoge/foo.html にアクセスしたら302リダイレクト location /hoge/foo.html { rewrite ^(.*)$ http://example.com/hoge/foo.html redirect; } # /foo/bar.html にアクセスしたら301リダイレクト location /foo/bar.html { rewrite ^(.*)$ http://example.com/foo/ permanent; }
参考:Nginxのリダイレクト設定のメモ - Qiita https://qiita.com/kt_higa/items/f26ba1453164c82d6ad5 参考:nginxのrewriteを使ったリダイレクト | Skyarch Broadcasting https://www.skyarch.net/blog/?p=7088 ■URLを書き換える(Apacheのmod_rewriteに相当) /etc/nginx/nginx.conf で以下のように設定する
# /test/ にアクセスしたら /test.html の内容を表示 location /test/ { rewrite /(.*)/ /$1.html last; }
■nginxにレスポンスタイムを記録
/etc/nginx/nginx.conf で以下のように設定する 以下の例では、あわせてアクセス元プロキシのIPアドレスとプロトコルも記録している
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; ↓以下のように変更 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" ' '$request_time $http_x_forwarded_for $http_x_forwarded_proto';
参考:ELB経由のnginxでアクセス元IPアドレスをアクセスログの$remote_addrとして書くようにする - Qiita https://qiita.com/toshihirock/items/1de2613bb7c95d486dc1 参考:nginx: ログ出力形式の変更と、ログにレスポンスタイムを出力する方法 - エラーの向こうへ https://tech.mktime.com/entry/259
■nginxでリバースプロキシを使う
※ロードバランサーのように負荷分散を行うが、ロードバランサーとは異なりレスポンスはリバースプロキシが返す これにより、リバースプロキシがレスポンスをキャッシュして負荷を軽減させたりなどができる 参考:Nginxによるリバースプロキシの設定方法 http://qiita.com/schwarz471/items/9b44adfbec006eab60b0 参考:Nginx でリバースプロキシサーバーつかってみる。Apache -> Nginx http://qiita.com/murachi1208/items/d04797b0b61e69018938 参考:リバースプロキシって何?触りだけ学んだサーバー/インフラ入門 http://qiita.com/growsic/items/fead30272a5fa374ac7b 参考:Nginx でリバースプロクシを立てるときに気にすべき proxy_next_upstream 設定 - 無印吉澤 http://muziyoshiz.hatenablog.com/entry/2017/10/25/235114 ここでは以下2台のサーバがあるものとし、 203.0.113.1 サーバにアクセスしたときに 203.0.113.2 サーバの内容を返すように設定するものとする http://203.0.113.1/(プライベートIP 10.0.0.1) ... nginxが動作しているものとする http://203.0.113.2/(プライベートIP 10.0.0.2) ... Apache+PHPが動作しているものとする □203.0.113.1 # vi /etc/nginx/conf.d/proxy.conf … リバースプロキシ用の設定ファイルを作成
server { server_name refirio.net; … サーバー名を指定 proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location /sample/ { … sampleディレクトリをプロキシアクセスにする proxy_pass http://10.0.0.2/sample/; … 10.0.0.2 サーバにアクセスさせる } location /sample2/ { … sample2ディレクトリをプロキシアクセスにする proxy_pass http://10.0.0.2/sample2/; … 10.0.0.2 サーバにアクセスさせる } }
# service nginx restart … nginxを再起動 □203.0.113.2 特に設定しなくても動作に問題はないが、そのままだとアクセスログには 203.0.113.1 のIPアドレスのみが記録されることになる /etc/httpd/conf/httpd.conf のLogFormatに %{X-Forwarded-For}i を追加すると、アクセスした人本来のIPアドレスが記録される ■リバースプロキシでキャッシュを使う ※アプリケーションサーバのレスポンスをnginxがキャッシュすることにより、負荷軽減&高速化を実現できる ※WordPressなどに使用する場合、管理ページではキャッシュさせないなどの対応が必要 参考:Nginx - リバースプロキシキャッシュ設定(基本的)! http://www.mk-mode.com/octopress/2014/04/23/nginx-proxy-cache-setting/ 参考:【nginx】WordPress でキャッシュしてはいけないページ(ファイル、ディレクトリ)設定!!! http://oki2a24.com/2014/07/03/set-do-not-cache-wordpress-page/ 参考:nginxで特定のページをキャッシュさせないように設定したい https://teratail.com/questions/13018 正規表現で「URLに○○が含まれている場合はキャッシュを返さない」のように設定できるみたい。要調査 参考:nginxでWordPressの設定する時に出てくるディレクティブのメモ https://nskw-style.com/2012/server/nginx-directives.html 特定URLの場合にキャッシュさせない、はできるみたい。要調査 □203.0.113.1 # mkdir /var/cache/nginx … キャッシュと一時ファイル保存用のディレクトリを作成 # chown nginx. /var/cache/nginx # vi /etc/nginx/nginx.conf … nginxの設定ファイルを編集
「index index.php index.html index.htm;」の次の行に以下を追加 proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=my-key:8m max_size=50m inactive=120m; proxy_temp_path /var/cache/nginx/tmp; … キャッシュと一時ファイル保存用のディレクトリ
# vi /etc/nginx/conf.d/proxy.conf … リバースプロキシ用の設定ファイルを編集
「location /sample/ { 〜 }」のブロック内に以下を追加 proxy_ignore_headers Cache-Control; … バックエンド側のCache-Controlヘッダでno-cache が指定されていても無視する proxy_cache my-key; proxy_cache_valid 200 302 60m; … HTTPレスポンスが200か302の場合は60分キャッシュする proxy_cache_valid 404 10m; … HTTPレスポンスが404の場合は10分キャッシュする
# service nginx restart … nginxを再起動 キャッシュをクリアしたい場合、以下のディレクトリ内にあるデータをすべて削除する /var/cache/nginx/cache/ /var/cache/nginx/tmp/
■nginxをロードバランサーにする
参考:nginxをHTTPロードバランサのように使う http://mogile.web.fc2.com/nginx/http/load_balancing.html ※未検証 /etc/nginx/nginx.conf で以下の設定を追加し、
upstream myapp { server web1.example.com; server web2.example.com; server web3.example.com; }
/etc/nginx/conf.d/proxy.conf で以下のように設定すれば、処理の振り分けができるみたい
location / { proxy_pass http://myapp; }
/etc/nginx/nginx.conf で以下のように設定すると、リクエストの 3/5 はweb1に向かうみたい
upstream myapp { server web1.example.com weight=3; server web2.example.com; server web3.example.com; }
AWSならELBを使う方が可用性の担保が容易 nginxをロードバランサーにする場合、ELBとは違い可用性は独自に担保する必要がある FloatingIPにするなどを検討する 参考:EC2 Nginx で高可用性+ロードバランス(Floating IP パターン) https://blog-kazuhisya.rhcloud.com/2014/08/10/floating-ip-with-nginx-load-balancer/
■Apache・Nginxのエラーログフォーマットを変更
error_log に記録するIPアドレスを、Proxyを考慮したものにしたい…という場合に調べたもの 公式の解説によると、「情報を追加したり削除したりしてエラーログをカスタマイズすることは できません。」とのこと。 Nginxも同様 参考:ログファイル - Apache HTTP サーバ http://httpd.apache.org/docs/2.0/ja/logs.html#errorlog 参考:nginxのerror_logはformat指定できない. - としたにあんの左脳 http://toshitanian.hatenablog.com/entry/2013/10/25/023838 上記Apacheのドキュメントには 「情報を追加したり削除したりしてエラーログをカスタマイズすることはできません。 しかし、リクエストに対するエラーログのエントリは、 対応するエントリがアクセスログにあります。 例えば、上の例のエントリはアクセスログのステータスコード 403 のエントリに対応します。 アクセスログはカスタマイズ可能ですので、 そちらを使うことによりエラーの状況に関する情報をより多く手に入れることができます。」 と書かれているので、アクセスログを併用する前提みたい。恐らくNginxも同じ思想
■rsync(一方向同期)
※web1サーバの /var/www/html/rsync の内容を、web2サーバの /var/www/html/rsync に同期 参考:rsyncとlsyncdでEC2サーバーを同期する http://qiita.com/katsukii/items/5c2cbd8f69ffd7cb213f 参考:ポートや鍵のファイルを指定 http://ikm.hatenablog.jp/entry/2013/05/27/140336 ■同期元サーバ:キーを作成 ※rootユーザ、保存先はデフォルトのまま、パスワードなしで作成する場合 # ssh-keygen -t rsa # cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAA 〜略〜 93ciNXZFZSlzXfqfZwD/7809G7 root@web1.refirio.net ■同期先サーバ:ユーザを作成 ※rsyncが配置したファイルだと分かるように、同期用にrsyncユーザを作成する場合 # useradd rsync # usermod -G wheel rsync # usermod -a -G apache rsync # visudo
# %wheel ALL=(ALL) ALL %wheel ALL=(ALL) ALL … コメント解除していなければ解除
■同期先サーバ:キーの設定 ※同期用ユーザが接続できるようにする # mkdir -p /home/rsync/.ssh … 公開鍵格納用ディレクトリを作成 # chmod 700 /home/rsync/.ssh … 公開鍵格納用ディレクトリのパーミッションを変更 # vi /home/rsync/.ssh/authorized_keys … 公開鍵をauthorized_keysに保存
ssh-rsa xxxxxxxxxx … 作成した公開鍵の内容を全てコピーして貼り付ける
# chmod 600 /home/rsync/.ssh/authorized_keys … authorized_keysのパーミッションを変更 # chown -R rsync:rsync /home/rsync … ユーザディレクトリの所有者を変更 ■同期元サーバ:接続確認 同期元サーバから同期先サーバへSSH接続を確認 接続できなければ、鍵ファイルやや上位ディレクトリの所有者とパーミッションを確認する (rsyncユーザから読み込めるようにする) # ssh -p 10022 rsync@10.0.1.17 ■同期元サーバ:lsyncdインストール # yum install --enablerepo=epel lsyncd 以下でrsyncコマンドの動作を確認できる # rsync -e "ssh -p 10022" -avz --delete /var/www/html/rsync rsync@10.0.1.17:/var/www/html ■同期元サーバ:自動同期設定 # vi /etc/lsyncd.conf
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.stat", maxProcesses = 2, statusInterval = 1, insist = 1 } sync { default.rsync, source = "/var/www/html/rsync", target = "rsync@10.0.1.17:/var/www/html/rsync", delay = 2, exclude = { "*.swp" }, rsync = { archive = true, compress = false, rsh = "ssh -p 10022" } }
# service lsyncd start … lsyncdを起動 # chkconfig --add lsyncd # chkconfig lsyncd on … lsyncdの自動起動を設定 ■同期元サーバ:動作確認 # tail /var/log/lsyncd/lsyncd.log … 同期されるたびにログが記録される 何も記録されていない場合、以下で設定ファイルの文法チェックをするといい # lsyncd -nodaemon -log scarce /etc/lsyncd.conf 以下で指定したファイルは、環境によってはあらかじめ作成しておく必要があるかも? logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.stat", 参考:lsyncdでサーバ間のファイルを双方向に同期させる https://2017.l2tp.org/archives/314 以下のようなエラーが表示される場合、ディレクトリやファイルのパーミッションを確認する 直上のディレクトリのパーミッションが大丈夫でも、さらに上位のディレクトリのパーミッションも影響する rsync: ERROR: cannot stat destination "/home/centos/html": Permission denied (13) rsync error: errors selecting input/output files, dirs (code 3) at main.c(565) [Receiver=3.0.9] rsync: connection unexpectedly closed (9 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9] 今回の場合、以下のように「centos」のパーミッションが原因で同期できなかった 「chmod 0775 centos」とすれば同期できるようになった(アクセスをグループで制御しているものとする) パーミッション最後のピリオドは、SELinuxに由来するもので関係ない # cd /home # ll 合計 0 drwx------. 3 centos centos 133 12月 5 15:34 centos drwx------ 3 rsync rsync 95 12月 2 21:46 rsync
■rsync(双方向同期)
※web1サーバとweb2サーバの /var/www/html/rsync が双方向に同期したい場合、 「rsync(一方向同期)」の設定を、同期元と同期先を逆にして追加設定する ※ただしそれだけだと、意図しないファイルの削除や復元が発生する場合がある 以下の設定を追加することで対応する ※ロードバランサー経由でアクセスしている際に、同期されるまでのタイムラグが問題になる場合、 スティッキーセッションを使うなどしてアクセスされるサーバを固定するといい 参考:lsyncdで双方向同期するなら、delete='running' がいい http://iga-ninja.hatenablog.com/entry/2015/02/28/230014 参考:rsyncとlsyncdを使ったディレクトリの双方向同期 http://qiita.com/kaihei777/items/5bb4f381c6b4c31be055 参考:lsyncdでサーバ間ファイルを同期をさせてみた https://www.didgedil.li/2016/07/17/lsyncd/ # vi /etc/lsyncd.conf
sync { default.rsync, source = "/var/www/html/rsync", target = "rsync@10.0.1.17:/var/www/html/rsync", delay = 2, delete = "running", … 追加(意図しないファイルの削除を避ける) init = false, … 追加(意図しないファイルの復元を避ける) exclude = { "*.swp" }, rsync = { archive = true, compress = false, rsh = "ssh -p 10022" } }
# service lsyncd restart … lsyncdを再起動 ※rsyncに「owner = true」「group = true」を設定すると所有者を含めて複製されるらしいが、反映されなかった 「同じグループのユーザからはファイルの読み書きを許可する」のような指定ができないことになり、これだと問題がある 仮に「web-userでアップロード&web-userで同期」としても PHPが作成したファイルやディレクトリは所有者apacheとなり、同期によってやはり所有者が変わることになる 同期はrsyncユーザで行い、「FTPでアップロードするのはweb1のみで、web2には原則としてアップロードしない」なら運用できるかも ※上の解決策。前提として所有者は含めない方が、アップロードされたファイルなのか同期されたファイルなのかが明確になって良さそう 代わりに chmod g+s /var/www/html/rsync として、rsyncディレクトリ内で作成されたファイル・ディレクトリのグループを親ディレクトリのグループに合わせると良さそう そうすればファイルの読み書きに支障はなくなるし、アップロードされたのか同期されたのかも明確になる
■メールのキューを削除する
メールを正しく送信できなかった場合、 /var/spool/clientmqueue/ ... MSPモード(MTAを使わないメール送信)の場合 /var/spool/mqueue/ ... MTAの場合 に一時的に貯められる ここに大量のメールが溜まってしまった場合、送信してしまうかファイルを削除してしまうかになる 削除する場合、以下のコマンドを実行する rm -f /var/spool/clientmqueue/* rm -f /var/spool/mqueue/* 参考:clientmqueueディレクトリ以下に吐き出される大量ファイルの対処法 http://ameblo.jp/itboy/entry-10024985559.html 参考:MSP(メール配信プログラム)モードで実行する http://seesaawiki.jp/w/engineernochiebukuro/d/MSP%A1%CA%A5%E1%A1%BC%A5%EB%C7%DB%BF%AE%A5%D7%A5%ED%A5...
■root宛のメールを削除する
cat /dev/null > /var/spool/mail/root 参考:新しいメールが /var/spool/mail/root にありますを停止する方法 https://genchan.net/server/9970 参考:気付いたらrootメールが溢れてる http://multix.jp/rootmail-overflow/ 参考:/var/spool/mail/rootを削除する https://cloudpack.media/1024
■MySQLのデータベース文字コード
utf8_unicode_ciではなく、utf8_general_ciにしておくのが無難 参考:MySQLのutf8_general_ciとutf8_unicode_ciの違い http://program.sagasite.info/wiki/index.php?MySQL%E3%81%AEutf8_general_ci%E3%81%A8utf8_unicode_ci%E3... 参考:utf8_unicode_ci に対する日本の開発者の見解 http://blog.kamipo.net/entry/2015/03/08/145045 参考:MySQLの照合順序 http://qiita.com/Vit-Symty/items/159c27d7d62c78ee9ce7 ※今はutf8だけでなく、utf8mb4についても検討する
■MySQLで外部キー制約を無視してインポート
データの移植時、外部キー制約があるとSQLを丸ごとインポートできないことがある SQLファイルの最初に以下を追加し、
SET FOREIGN_KEY_CHECKS=0;
最後に以下を追加すればインポートできる
SET FOREIGN_KEY_CHECKS=1;
■PostgreSQLでEUC_JPのデータベースを作成
psql -l … データベースの文字コードを確認 dropdb test … 一旦testデータベースを削除する場合 createdb -E EUC_JP --locale=ja_JP.EUC_JP test --template=template0 … 文字コードを指定してtestデータベースを作成 参考:PostgreSQLのinitdbと違うロケールでDB作成 http://wsjp.blogspot.jp/2012/04/postgresqlinitdbdb.html 参考:PostgreSQLエラー「createdb: データベースの生成に失敗しました: ERROR: 符号化方式 EUC_JP がロケール ja_JP.UTF-8 に合いません」の原因と解決方法 http://nobuneko.com/blog/archives/2011/10/postgresqlcreatedb_error_euc_j.html 以下、「他にこのデータベースを使っている 1 個のセッションがあります。」のように表示された場合の対象方法 アクセスしているユーザを調べて強制的に追い出す psql test … testデータベースに接続 SELECT * FROM pg_stat_activity; … アクセスしているユーザを調べる SELECT pg_terminate_backend(567) FROM pg_stat_activity WHERE usename = 'usename'; … procidとusernameを指定して追い出す \q … ログアウト 具体例 SELECT pg_terminate_backend(7960) FROM pg_stat_activity WHERE usename = 'postgres'; SELECT pg_terminate_backend(5484) FROM pg_stat_activity WHERE usename = 'postgres'; SELECT pg_terminate_backend(7404) FROM pg_stat_activity WHERE usename = 'postgres'; 「WHERE usename = 'postgres'」は無くても大丈夫かも? 参考 http://blog.kter.jp/?cat=80
■SSIを使用する
拡張子 .shtml でSSIを有効にする場合、httpd.conf か .htaccess に以下の内容を追加 Options +Includes AddType text/html shtml AddHandler server-parsed shtml 拡張子 .html でもSSIを有効にする場合、AddHandler の行を以下のように変更 AddHandler server-parsed html shtml
■処理の進捗を表示
Linux環境なら、pvをインストールしておくと便利そう 参考:MySQL インポートの進捗表示 - Qiita http://qiita.com/hiroq/items/efd8c3580c9c9457c869 参考:Linuxメモ : パイプ処理の進捗を表示するpv(Pipe Viewer)の使い方 - もた日記 http://wonderwall.hatenablog.com/entry/2017/08/03/072500
■サーバ2台構成でWordPress(rsyncでファイル双方向同期、MySQLレプリケーションでデータベース同期)
■前提 AWSに環境を構築したときのメモ web1とweb2の二台に、WordPressの動作する環境が構築済みとする ■ホスト名の設定(web1、web2とも) # hostnamectl set-hostname web1.refirio.net # vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 refirio.net refirio.net ↓ 127.0.0.1 localhost web1.refirio.net localhost4 localhost4.localdomain4 refirio.net refirio.net # vi /etc/sysconfig/network HOSTNAME=web1.refirio.net ※web2では「web1.refirio.net」という名前で同様の設定を行う ■レプリケーションの設定 web1をMaster、web2をSlaveとする □Master $ curl http://10.0.1.42/ # vi /etc/my.cnf [mysqld] log-bin=mysql-bin server-id = 1001 # systemctl restart mysql # mysql -u root -p mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@10.0.1.42 IDENTIFIED BY 'gV0+8k6BM#z7'; mysql> FLUSH PRIVILEGES; mysql> SELECT host,user FROM mysql.user; mysql> FLUSH TABLES WITH READ LOCK; … データ手動コピー前にテーブルロック mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 633 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec) # cd /var/lib/mysql # ll # tar czf wordpress.tar.gz wordpress … MySQLのデータをバックアップ mysql> UNLOCK TABLES; … データ手動コピー後にテーブルロック解除 # cp /var/lib/mysql/wordpress.tar.gz /usr/share/nginx/html/wordpress.tar.gz □Slave $ wget http://10.0.1.253/wordpress.tar.gz # cd /home/centos # cp /home/centos/wordpress.tar.gz /var/lib/mysql/wordpress.tar.gz $ curl http://10.0.1.253/ … 疎通テスト $ mysql -h 10.0.1.253 -u repl -p … 疎通テスト ※最初MySQLで通信できなかった。内部通信を許可するために、セキュリティグループに「default」を追加 http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-network-security.html#default-securit... # systemctl stop mysql # cd /var/lib/mysql … MySQLのデータをバックアップから復元 # mv wordpress wordpress.backup # tar xvzf wordpress.tar.gz # vi /etc/my.cnf … レプリケーション設定 [mysqld] server-id=1002 # systemctl start mysql # mysql -u root -p mysql> CHANGE MASTER TO … Masterへの接続情報を設定 MASTER_HOST='10.0.1.253', MASTER_USER='repl', MASTER_PASSWORD='gV0+8k6BM#z7', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', … 「SHOW MASTER STATUS」で確認した「File」 MASTER_LOG_POS=633; … 「SHOW MASTER STATUS」で確認した「Position」 mysql> FLUSH PRIVILEGES; mysql> START SLAVE; … レプリケーションを開始 □いったん動作確認 Master側でテーブルを作成&データを登録し、Slave側にも反映されていることを確認する ■WordPressの接続設定を調整 □Master mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@10.0.1.253 IDENTIFIED BY 'Hy8R63mAdF'; … WordPress用ユーザ追加 mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@10.0.1.42 IDENTIFIED BY 'Hy8R63mAdF'; … WordPress用ユーザ追加 mysql> FLUSH PRIVILEGES; mysql> SELECT host,user FROM mysql.user; □両方のサーバにHyperDBをインストール # cd # wget http://downloads.wordpress.org/plugin/hyperdb.zip # unzip hyperdb.zip # cd hyperdb # cp db-config.php /home/kusanagi/wordpress/DocumentRoot/ # chown kusanagi. /home/kusanagi/wordpress/DocumentRoot/db-config.php # cp db.php /home/kusanagi/wordpress/DocumentRoot/wp-content/ # chown kusanagi. /home/kusanagi/wordpress/DocumentRoot/wp-content/db.php # cd /home/kusanagi/wordpress/DocumentRoot/ … 公開ディレクトリへ移動 # vi db-config.php 217行目あたり $wpdb->add_database(array( 'host' => DB_HOST, // If port is other than 3306, use host:port. 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, )); 以下のように編集(「write」と「read」の指定を追加) $wpdb->add_database(array( 'host' => DB_HOST, // If port is other than 3306, use host:port. 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, 'write' => 1, 'read' => 1, )); 228行目あたり $wpdb->add_database(array( 'host' => DB_HOST, // If port is other than 3306, use host:port. 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, 'write' => 0, 'read' => 1, 'dataset' => 'global', 'timeout' => 0.2, )); 以下のように編集(「host」の指定を変更) $wpdb->add_database(array( 'host' => DB_HOST_RO, // If port is other than 3306, use host:port. 'user' => DB_USER, 'password' => DB_PASSWORD, 'name' => DB_NAME, 'write' => 0, 'read' => 1, 'dataset' => 'global', 'timeout' => 0.2, )); # cp -p wp-config.php wp-config.php.backup … WordPressの設定ファイルをバックアップ # vi wp-config.php … WordPressの設定ファイルを編集 32行目あたり define('DB_HOST', 'localhost'); 以下のように編集 //define('DB_HOST', 'localhost'); define('DB_HOST', '10.0.1.253'); define('DB_HOST_RO', '10.0.1.42'); ■rsync設定(一方向同期) □同期元サーバ:キーを作成 # ssh-keygen -t rsa # cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC 〜略〜 JKFwq52AwP root@web1.refirio.net □同期先サーバ:ユーザを作成 # useradd rsync # usermod -G wheel rsync # usermod -a -G apache rsync # usermod -a -G kusanagi rsync □同期先サーバ:キーの設定 # mkdir -p /home/rsync/.ssh # chmod 700 /home/rsync/.ssh # vi /home/rsync/.ssh/authorized_keys ssh-rsa xxxxxxxxxx # chmod 600 /home/rsync/.ssh/authorized_keys # chown -R rsync:rsync /home/rsync □同期元サーバ:接続確認 # ssh -p 22 rsync@10.0.1.42 □同期元サーバ:lsyncdインストール # yum install --enablerepo=epel lsyncd # chmod 0775 /home/kusanagi # mkdir /home/kusanagi/rsync # chown kusanagi. /home/kusanagi/rsync # chmod 0775 /home/kusanagi/rsync # cd /home/kusanagi/rsync # rsync -e "ssh -p 22" -avz --delete /home/kusanagi/rsync rsync@10.0.1.42:/home/kusanagi … 動作確認 □同期元サーバ:自動同期設定 # vi /etc/lsyncd.conf settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.stat", maxProcesses = 2, statusInterval = 1, insist = 1 } sync { default.rsync, source = "/home/kusanagi/rsync", target = "rsync@10.0.1.42:/home/kusanagi/rsync", delay = 2, exclude = { "*.swp" }, rsync = { archive = true, compress = false, rsh = "ssh -p 22" } } # systemctl start lsyncd.service # systemctl enable lsyncd.service # systemctl is-enabled lsyncd.service ■rsync設定(双方向同期) 「rsync(一方向同期)」の設定を、同期元と同期先を逆にして追加設定する # cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC 〜略〜 kATrJQOJ+J root@web2.refirio.net # ssh -p 22 rsync@10.0.1.253 # rsync -e "ssh -p 22" -avz --delete /home/kusanagi/rsync rsync@10.0.1.253:/home/kusanagi ■WordPress同期 □同期を停止させておく web1&web2: # sudo su - # systemctl stop lsyncd.service □公開フォルダを退避 web1&web2: # cd /home/kusanagi/wordpress # mv DocumentRoot DocumentRootTmp # mkdir DocumentRoot # chown kusanagi. DocumentRoot # chmod 0775 DocumentRoot □上位ディレクトリのパーミッションを調整 # chmod 0775 /home/kusanagi □公開フォルダで同期をテスト web1: # vi DocumentRoot/index.php # rsync -e "ssh -p 22" -avz --delete /home/kusanagi/wordpress/DocumentRoot rsync@10.0.1.42:/home/kusanagi/wordpress web2: # vi DocumentRoot/test.php # rsync -e "ssh -p 22" -avz --delete /home/kusanagi/wordpress/DocumentRoot rsync@10.0.1.253:/home/kusanagi/wordpress □自動同期対象を変更 web1&web2: # vi /etc/lsyncd.conf /var/www/html/rsync ↓ /home/kusanagi/wordpress/DocumentRoot ※2箇所あるパスを修正 # systemctl start lsyncd.service 自動同期を確認後、また停止させておく # systemctl stop lsyncd.service □公開フォルダを戻す web1で公開ディレクトリ内をWordPressに戻す (web2では公開ディレクトリ内をカラにしておく) # mv DocumentRoot DocumentRootTmp2 # mv DocumentRootTmp DocumentRoot □ファイルの所有者を調整 web1&web2: /home/kusanagi/wordpress 内で作られたファイルの所有者を kusanagi にする # chown kusanagi. /home/kusanagi/wordpress # chmod 0775 /home/kusanagi/wordpress # chmod g+s /home/kusanagi/wordpress # chmod g+s /home/kusanagi/wordpress/DocumentRoot web1: # find /home/kusanagi/wordpress -type d -print | xargs chown kusanagi. # find /home/kusanagi/wordpress -type f -print | xargs chown kusanagi. □WordPressを同期 web1の公開ディレクトリ内はWordPress、 web2の公開ディレクトリ内はカラ、 という状態でweb1で以下を実行。同期テストする # rsync -e "ssh -p 22" -avz --delete /home/kusanagi/wordpress/DocumentRoot rsync@10.0.1.42:/home/kusanagi/wordpress 完了したら、web2からも同期をテストする # rsync -e "ssh -p 22" -avz --delete /home/kusanagi/wordpress/DocumentRoot rsync@10.0.1.253:/home/kusanagi/wordpress どちらも大丈夫なら、自動同期を開始してテストする # systemctl start lsyncd.service 自動同期も大丈夫なら、管理画面から記事の登録やメディアのアップロードなどをテストする
■接続元引越時のTODO
アクセス制限用のIPアドレスを調整する。以下などは要確認 ・/etc/sysconfig/iptables ・/etc/hosts.deny ・/etc/hosts.allow ・その他 httpd.conf や .htaccess など
■システム障害対策
障害対策の資料では、以下のような略語が使われることがある S/W ... SoftWare ソフトウェア H/W ... HardWare ハードウェア N/W ... NetWork ネットワーク I/F ... InterFace インターフェース I/O ... Input/Output 入出力 C/S ... Client/Server クライアントサーバシステム
■独自ドメインを設定する(ムームードメイン)
■WHOIS情報 情報公開 … 弊社情報代理公開 ■ネームサーバ設定変更 サービス … ムームーDNS ムームーDNSセットアップ ネームサーバ1 … dns01.muumuu-domain.com ネームサーバ2 … dns02.muumuu-domain.com ■ムームーDNSのセットアップ情報(カスタム設定) No サブドメイン 種別 内容 優先度 1 A 153.121.33.84 2 www A 153.121.33.84
■コントロールパネルからリモートコンソールを使う(さくらの専用サーバ)
リモートコンソールを実行できない場合Javaのセキュリティが影響している可能性がある Windowsのコントロールパネルから「Java」を選択し、 「セキュリティ」タブの「例外サイト・リスト」に以下のURLを追加する (契約者によってURLが違う可能性があるので要確認。) http://ds-proxy30-u.sakura.ne.jp
■OS再インストール(さくらのVPS)
参考:OS再インストール https://help.sakura.ad.jp/app/answers/detail/a_id/2408