最近、Google Cloud PlatformのApp Engineで遊び始めた。DockerでPHPを実行するためにカスタムランタイムを持つフレキシブル環境を使用している。App EngineはHTTPとHTTPSの両方でコンテンツを配信する。Web UI経由でHTTPを無効にしたり、HTTPトラフィックをHTTPSに簡単にリダイレクトしたりできるか確認したが、残念ながら現時点では不可能だ。そう、正しく聞こえたと思う。基本的な機能がサポートされていないのだ!

ドキュメントをチェックし、app.yamlファイルで301リダイレクトを設定しようとした:

handlers:
- url: /.*
  script: auto
  secure: always
  redirect_http_response_code: 301

新しいバージョンをデプロイしたが、App EngineはまだHTTPで配信しており、安全でない接続をリクエストしてもHTTPSにリダイレクトされなかった。

今回はnginxにチャンスを与えることにした。nginx-app.confファイルを開き、以下のように記述した:

server_name _;

if ($http_x_forwarded_proto = “http”) { return 301 https://$host$request_uri; }

そして出来上がり!完璧に動作した。このプロセスをどのように試し理解したかは以下で確認できる。

➜  ~ curl -I http://ercan-ermis.ew.r.appspot.com/
HTTP/1.1 301 Moved Permanently
Date: Thu, 15 Apr 2021 07:03:34 GMT
Content-Type: text/html
Content-Length: 178
Server: nginx
Location: https://ercan-ermis.ew.r.appspot.com/
Via: 1.1 google