Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

156 Aufrufe

Veröffentlicht am

Magento Meetup Tokyo 14で使用した、Magento2のメンテナンス画面についての資料です。

Veröffentlicht in: Internet
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

  1. 1. Meetup Tokyo #14 メンテナンス画面を極める
  2. 2. メンテナンス画面の場所 • pub/errors以下に配置 • defaultが標準デザイン
  3. 3. メンテナンス画面のカスタマイズ 1. local.xml.sampleをコピーし、local.xmlにリネーム 2. skinタグの値を変更 3. skinタグの値と同じ名前のディレクトリを作成 4. CSS,JS,テンプレートを配置
  4. 4. 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>
  5. 5. 気をつけたいこと • ドキュメントルートがpubの場合は正しく動かない – processor.phpのERROR_DIR定数を書き換える • 複数のメンテナンス画面デザインは作れない – design.xmlとlocal.xmlしか読まない
  6. 6. メンテナンスモード • モードを有効にする – php bin/magento maintenance:enable • モードを無効にする – php bin/magento maintenance:disable • 許可IPを設定する – php bin/magento maintenance:allow-ips [IPアドレス] • 状態のチェック – php bin/magento maintenance:status
  7. 7. 許可IP • var/.maintenance.ip にカンマ区切りで列挙 – 1行で書くこと。改行すると読んでくれない • 実はコマンドを叩かなくても書けば要はOK
  8. 8. アクセス許可IPの罠 • メンテナンスモードの判定は、 $_SERVER[‘REMOTE_ADDR’]を見てい る
  9. 9. MagentoFrameworkAppBootstrap.php protected function assertMaintenance() { ~中略~ $this->maintenance = $this->objectManager ->get('MagentoFrameworkAppMaintenanceMode'); $isOn = $this->maintenance->isOn(isset($this->server['REMOTE_ADDR']) ? $this->server['REMOTE_ADDR'] : '’ ); ~中略~ }
  10. 10. __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; }
  11. 11. 実は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 = MagentoFrameworkAppBootstrap::create(BP, $params); /** @var MagentoFrameworkAppHttp $app */ $app = $bootstrap->createApplication('MagentoFrameworkAppHttp'); $bootstrap->run($app);
  12. 12. よく読むとこうだった /** * 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); }
  13. 13. ロードバランサの罠 • ロードバランサやリバースプロキシは REMOTE_ADDRを改変する • X-HTTP-FORWARDED-FORに実際のクライアントIPを 格納している
  14. 14. 再確認 • MagentoはREMOTE_ADDRを見る • LBやRPのREMOTE_ADDRはクライアントのIPにあら ず • 見るべきはX-HTTP-FORWARDED-FOR
  15. 15. X-HTTP-FOREARDED-FORの罠 • 入っているIPが1個とは限らない • プロキシなどを多段経由する場合、経由したIPが 全部入っていることがある
  16. 16. 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" );
  17. 17. Apacheの場合 • mod_remoteipを使う • apacheのconfに”RemoteIPHeader X-Real-IP”を追記
  18. 18. Nginxの場合 • HttpRealipModuleを使う • real_ip_header X-Real−IP;
  19. 19. まとめ • M2もエラー画面はカスタム可能。 • メンテモードの除外IPはネットワーク構成をよく見て 調整する • 調整の仕方がまずいとメンテモードがかからなかっ たり、除外されるはずの人が除外されない

×