19
Meetup Tokyo #14 メンテナンス画面を極める

Magento Meetup Tokyo 14 〜メンテナンス画面を極める

Embed Size (px)

Citation preview

Page 1: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

Meetup Tokyo#14

メンテナンス画面を極める

Page 2: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

メンテナンス画面の場所

• pub/errors以下に配置

• defaultが標準デザイン

Page 3: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

メンテナンス画面のカスタマイズ

1. local.xml.sampleをコピーし、local.xmlにリネーム

2. skinタグの値を変更

3. skinタグの値と同じ名前のディレクトリを作成

4. CSS,JS,テンプレートを配置

Page 4: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

local.xml

<?xml version="1.0"?><config>

<skin>sample</skin><report>

<action>print</action><subject>Store Debug

Information</subject><email_address></email_address><trash>leave</trash>

</report></config>

Page 5: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

気をつけたいこと

• ドキュメントルートがpubの場合は正しく動かない

– processor.phpのERROR_DIR定数を書き換える

• 複数のメンテナンス画面デザインは作れない

– design.xmlとlocal.xmlしか読まない

Page 6: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

メンテナンスモード

• モードを有効にする– php bin/magento maintenance:enable

• モードを無効にする– php bin/magento maintenance:disable

• 許可IPを設定する– php bin/magento maintenance:allow-ips [IPアドレス]

• 状態のチェック– php bin/magento maintenance:status

Page 7: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

許可IP

• var/.maintenance.ip にカンマ区切りで列挙

– 1行で書くこと。改行すると読んでくれない

• 実はコマンドを叩かなくても書けば要はOK

Page 8: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

アクセス許可IPの罠

• メンテナンスモードの判定は、$_SERVER[‘REMOTE_ADDR’]を見ている

Page 9: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

Magento\Framework\App\Bootstrap.php

protected function assertMaintenance(){

~中略~

$this->maintenance = $this->objectManager->get('Magento\Framework\App\MaintenanceMode');

$isOn = $this->maintenance->isOn(isset($this->server['REMOTE_ADDR']) ? $this->server['REMOTE_ADDR']: '’

);

~中略~}

Page 10: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

__constructで設定しているが・・・

/*** Constructor** @param ObjectManagerFactory $factory* @param string $rootDir* @param array $initParams*/

public function __construct(ObjectManagerFactory $factory, $rootDir, array $initParams){

$this->factory = $factory;$this->rootDir = $rootDir;$this->server = $initParams;

}

Page 11: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

実はindex.phpで設定

$params = $_SERVER;$params[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [

DirectoryList::PUB => [DirectoryList::URL_PATH => ''],DirectoryList::MEDIA => [DirectoryList::URL_PATH => 'media'],DirectoryList::STATIC_VIEW => [DirectoryList::URL_PATH => 'static'],DirectoryList::UPLOAD => [DirectoryList::URL_PATH => 'media/upload'],

];$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);/** @var \Magento\Framework\App\Http $app */$app = $bootstrap->createApplication('Magento\Framework\App\Http');$bootstrap->run($app);

Page 12: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

よく読むとこうだった/*** Static method so that client code does not have to create Object Manager Factory

every time Bootstrap is called** @param string $rootDir* @param array $initParams* @param ObjectManagerFactory $factory* @return Bootstrap*/

public static function create($rootDir, array $initParams, ObjectManagerFactory $factory = null){

self::populateAutoloader($rootDir, $initParams);if ($factory === null) {

$factory = self::createObjectManagerFactory($rootDir, $initParams);}return new self($factory, $rootDir, $initParams);

}

Page 13: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

ロードバランサの罠

• ロードバランサやリバースプロキシはREMOTE_ADDRを改変する

• X-HTTP-FORWARDED-FORに実際のクライアントIPを格納している

Page 14: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

再確認

• MagentoはREMOTE_ADDRを見る

• LBやRPのREMOTE_ADDRはクライアントのIPにあらず

• 見るべきはX-HTTP-FORWARDED-FOR

Page 15: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

X-HTTP-FOREARDED-FORの罠

• 入っているIPが1個とは限らない

• プロキシなどを多段経由する場合、経由したIPが全部入っていることがある

Page 16: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

Varnishで最初のだけいただく

std.collect(req.http.x-forwarded-for);set req.http.X-Real-IP = regsub ( req.http.x-forwarded-for, "^(([0-9]{1,3}\.){3}[0-9]{1,3})(.*)", "\1" );

Page 17: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

Apacheの場合

• mod_remoteipを使う

• apacheのconfに”RemoteIPHeader X-Real-IP”を追記

Page 18: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

Nginxの場合

• HttpRealipModuleを使う

• real_ip_header X-Real−IP;

Page 19: Magento Meetup Tokyo 14 〜メンテナンス画面を極める

まとめ

• M2もエラー画面はカスタム可能。

• メンテモードの除外IPはネットワーク構成をよく見て調整する

• 調整の仕方がまずいとメンテモードがかからなかったり、除外されるはずの人が除外されない