今回は、PythonのFlaskフレームワークを使用し、Webシステム構築をした際にハマった事象について、解決策と合わせて、ご紹介しようと思います。
発生事象の説明をする前に、まずは今回開発を行ったWebシステムの概要について共有しておきます。超ザックリとした概要ではありますが、以下のような構成・仕様となっていました。
【システム構成】
・ALB(ロードバランサー)
・EC2(Web/APサーバ)
- OS:RedHatLinux8.x(EC2)
- Web/AP:Apache 2.4.xx(mod_wsgiでFlaskと連携)
- 言語:Python 3.8
- フレームワーク:Flask
・通信プロトコル
- クライアント⇔ALB:HTTPS(TCP/443※)
※HTTPで接続された場合でもALB側でHTTPSに変換して、リクエスト自体は受け付ける
- ALB⇔EC2:HTTP(TCP/80)
(構成イメージ)
【Webシステムの仕様】
・BASIC認証を使用して、ログイン認証を行う
・ログイン認証後、トップページでユーザ情報をセッションに格納して他ページで使用する
・他ページはユーザ情報必須のため、トップページ以外へのダイレクトアクセス※は非許可
※ブラウザにURLを直接入力したり、お気に入りからアクセスした場合など
・ダイレクトアクセス検知時は、トップページに強制遷移させ、必ずトップページ経由とさせる
(画面遷移イメージ)
絵画/タペストリ美術品絵画/タペストリー(イエロー/黄色系)の通販 100点以上(エンタメ
絵画/タペストリ美術品幸せ画廊♡幸運 開運 風水 ヒーリング|フリマアプリ ラクマ
絵画/タペストリ美術品超美品 風水幸せ絵画 狐と稲穂 虹尾白狐と金稲穂 KOGANE 黄金 金運
絵画/タペストリ美術品47%割引特別オファー 風水幸せ絵画*狐と稲穂 金狐と金稲穂 KOGANE
絵画/タペストリ美術品人気提案 スズキ純正 フロントプライバシーシェード 車外アクセサリー
絵画/タペストリ美術品メール便送料無料対応可】 風水幸せ絵画*狐と稲穂 金狐と金稲穂
絵画/タペストリ美術品メール便送料無料対応可】 風水幸せ絵画*狐と稲穂 金狐と金稲穂
絵画/タペストリ美術品47%割引人気の新作 風水幸せ絵画*狐と稲穂 虹尾白狐と金稲穂 KOGANE
絵画/タペストリ美術品風水幸せ絵画*狐と稲穂 虹尾白狐と金稲穂 KOGANE 黄金 金運 直感 守護
絵画/タペストリ美術品風水幸せ絵画*狐と稲穂 虹尾白狐と金稲穂 KOGANE 黄金 金運 直感 守護
絵画/タペストリ美術品風水幸せ絵画*狐と稲穂 虹尾白狐と金稲穂 KOGANE 黄金 金運 直感 守護
絵画/タペストリ美術品通販でクリスマス 風水幸せ絵画*狐と稲穂 金狐と金稲穂 KOGANE黄金
絵画/タペストリ美術品風水幸せ絵画*狐と稲穂 金狐と金稲穂 KOGANE黄金 夕焼け 金運 直感
絵画/タペストリ美術品風水幸せ絵画*狐と稲穂 金狐と金稲穂 KOGANE黄金 夕焼け 金運 直感
絵画/タペストリ美術品風水幸せ絵画*狐と稲穂 金狐と金稲穂 KOGANE黄金 夕焼け 金運 直感
絵画/タペストリ美術品激安店舗 天然石 虹入り 水晶 ロングイ 龍亀 金運 置物
絵画/タペストリ美術品48%割引ホワイト系素晴らしい外見 池田洛中 日本画 色紙 干支 酉 鳥
絵画/タペストリ美術品38%割引総合福袋 竹久夢二 「夢二 画集 秋の巻」初版本 額縁付き 洛陽
絵画/タペストリ美術品宅配 風水幸せ絵画*狐と稲穂 虹尾金狐と金稲穂 KOGANE 黄金 金運 直感
絵画/タペストリ美術品風水幸せ絵画*狐と稲穂 金狐と金稲穂 KOGANE黄金 夕焼け 金運 直感

Webシステム開発が完了し、システム構成で説明した通りの通信経路となるよう、Webシステムにアクセスする際のURLを以下のように変更しました。(URLはイメージです)
【開発時】http://websystem.com/
※Webシステムのあるサーバに直接アクセスするために設定されたWebシステムのURL
↓
【開発完了後】https://alb.websystem.com/
※AWSのALBを介してアクセスするために設定されたWebシステムのURL
そして、動作確認をしようと【開発完了後】のURLにアクセスしたのですが、通常アクセス時のとおりトップページから他ページに遷移しようとしても、トップページへの強制遷移が発生し、他ページに遷移ができない状態に陥りました。
明日からユーザ側で試験利用と言っているのに、軽くパニックです(笑)
(画面遷移イメージ)
Webシステムの仕様から考えると、ダイレクトアクセス検知によってトップページに強制転送されているのだろうと感じていました。 そして、その直感は当たっており、この仕様に絡んで以下2つの仕組みにより起こった問題であることが分かりました。
Webシステムのページ遷移に使用するURLは、Flaskの
url_for
というメソッドを使用しており、このメソッドで生成されるURLは相対URLがデフォルトとなっており、このWebシステムでもデフォルト指定にて使用していました。今回の場合、直前のアクセス元であるALBが
https → http
に書き換えてリクエストを投げてきているため、受け取ったhttp://~
から始まる絶対パスを元に、相対指定でURLが作成されて画面遷移されることになりました。突然何だ?!と思うかもしれませんが、このWebシステムではダイレクトアクセスの検知を、リクエストヘッダ内にあるリファラ(遷移元URL情報)の存在チェックで行っていました。
想定では、ダイレクトアクセスの場合、リファラには遷移元URLが入っていないため、ここをチェックすることでダイレクトアクセスの判定が可能と考えていたためです。
ですが、①の画面遷移を受け付けたブラウザは「HTTPSサイト(安全)」から「HTTPサイト(非安全)」への遷移が発生したと検知し、セキュリティリスク回避のためリファラの内容を削除してリクエストしていました。
その結果、リクエストを受け取ったWebシステムは、リファラなし(=ダイレクトアクセス)と判断し、トップページに強制転送していた訳ですね。
リファラという用語がピンとこない方は、公式ページを参照してみてください。
ザ ノースフェイス ダウンジャケット Sサイズ 薄型軽量
holiday mix nit cardigan
トミカ ライトキーホルダー dx-4 GT-R
ここまでの説明から、この事象を解決するには「X-Fowarded-xxx」ヘッダーにあるプロトコル情報を使えば良い。というのが、ふんわり頭に浮かんだのではないかと思います。
それでは、このWebシステムでは、どのように「X-Forwarded-Proto」ヘッダーの値で書き換えればよいのでしょうか?
自分でゴリゴリ実装することも可能ですが、今回使用したPythonのフレームワークであるFlaskでは、既に対応するミドルウェアが提供されていました。
それが「X-Forwarded-For Proxy Fix」というミドルウェアです。
専用ベアブリック 日の出富士 400%
このミドルウェアを使用することで、経由(信頼)するプロキシ数に応じてリクエスト元情報の補正を行うことが可能です。 使用方法などの詳細は、上記公式ページを参照して、確認してみてください。
具体的な実装例は以下となります。
【お掃除風水】金運を引き寄せる4つのポイント 【風水】2022年の運気爆上げ!金運アップ効果がある最強の観葉植物10選!人気のモンステラやパキラなど、育てやすく人気でお勧めの風水インテリア観葉植物で運気上昇♪ 【風水】トイレでこれは絶対NG!やめて一気に金運爆発させましょう! 簡単!トイレ掃除で金運を上げる重要なポイント3選 ※金運激変きます大口の入金連絡嬉しい通知が来ます※突然この動画が出てきたら金運激変のサインです。お金の願いが叶い嬉しい連絡が入ります。 【風水】金運の上がる部屋作りを10個試してみたらちょっと開運したかも 【アラフォー1K一人暮らし】 【龍の通り道】すぐに効く超簡単なズボラ風水アクション5選!【金運】 【風水】運気が上がる観葉植物10選!「金運」や「健康運」のUPなど人気の モンステラ をはじめとするお勧めの観葉植物 【臨時収入】超朗報です✨玄関を〇〇にしてる人金運急上昇💖 【風水】寝室に置くと運気が下がるもの 意外と置いてしまう○○とは!? 億万長者がいかにして金運を上げたか 秘密を教えます京都の風水師 天野ちえりでございます 【シウマSP】霊も占いも何も信じていなかった彼に何があった!?【ナナフシギ】【琉球風水志シウマ】 【風水】住むだけで運気がどんどん舞い込んでくるパワースポットになる家つくり 金運・開運がアップする家つくり【スピリチュアル】 【金運爆上げ】トイレの○○!寝ているだけ!生霊が消えて運勢が上がった方法。風水で解説。 2022年に最強の金運を引き寄せる風水! 家の中央を改善するだけで、1年の金運・仕事・恋愛運が変わります!【風水】 まんが日本昔ばなし [ きつね女房 ] 08 高画質 HD 玄関の龍が去ってしまう!?玄関の運気をダダ下げする観葉植物とは? ちょっと頑張ってやってみる本気風水【あなたのお家がみるみる運気ハウスに編】 簡単に取り入れられる風水&家相グッズ5選 風水を死ぬほど怪しがってる友人の家で 直接風水の力を見せつけた結果… 破産必至 運気が死に続ける 恐ろしいダメ家京都の風水師 天野ちえりでございます
同じ画像内でも、こんなに画質が変わってきます。
以上、3つのオブジェクトは全てベクタ形式のオブジェクトです。
技術部のyuckieee(ゆっきー)です。
色々なプロジェクトで開発を行っていて、ちょいちょい発生する作業で面倒だなって思っていることがありました。それは納品物やリリース対象物の準備です。
何かというと、運用保守中に追加開発などが発生した場合に、プログラムの差分ファイルのみを納品物やリリース対象として準備する必要があります。
これ、中々に面倒くさいんですよね。間違えたら大変だし、毎回ドキドキしちゃいます(笑)
そこで、出来るだけ間違いが起こらないように自動化出来ないか探してみた結果、私がいつも使っているGit管理ツール「Sourcetree」のカスタムアクションを試してみたら良さげだったので、ご紹介しようと思います。
まずはイメージ共有のため、今回作成したカスタムアクションの概要を説明します。
ざっくりした動作仕様としては「Sourcetreeで現在選択されているリポジトリ-ブランチに存在するコミット間の差分ファイルを取得する。」です。 利用イメージ(方法)は以下のとおり。
[利用イメージ(方法)]
Sourcetreeの該当ブランチの履歴から差分ファイルをとりたいコミットを選択のうえ、カスタムアクションを実行します。 差分を取るためにコミットは2つ選択。ただし、1つだけ選択した場合でも、選択したコミットから最新コミットまでを対象と実行します。
実行時は、経過が分かるようにダイアログにログが表示されます。
実行後、ログ記載の出力先に差分ファイル(zip)、差分ファイル一覧、実行結果ログが格納されます。
以上です!