目的
webサイトをHTTPS化したい。
問題
- nginxのエラーログで
FastCGI sent in stderr: "Primary script unknown"
というエラーが発生。 - httpsで接続すると
503 Service Temporarily Unavailable
というエラーだけ表示される。 - EC2のターゲットグループ内でヘルスステータスが
Unhealthy
、詳細がRequest timed out
となっている。
状況
正直なところ、初学者なりにいろいろ構って今どんな状況なのか理解できていない。
今日構ったのは
- nginx.conf
- ロードバランサー作成
- ターゲットグループ作成
- セキュリティグループのインバウンドルール設定
主にいじっていたnginx.confでやっていたこととしては、GPTやPerplexityに聞きながら以下を追加。
if ($http_x_forwarded_proto = 'http') {
return 301 https://$host$request_uri;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
server項目内のlistenを80
から10080
に変更
server_nameを_;
からdogtype.net www.dogtype.net;
に変更
次回
自分でもさまざまな記事を参考にしてAWSの設定をしたため、なぜポート番号10080
なのかとかわかっていない。
なので次回はポート番号80
で設定してみようと思う。
ちなみにセキュリティグループで10080の許可、ロードバランサーのリスナーでHTTP:10080
を設定しHTTPSにリダイレクトするように設定、ターゲットグループのポートは10080と統一しているつもり。
プログラミング歴5ヶ月ほど、まだまだ初学者にはAWS難しすぎて苦しい…。
解決(2024/08/02)
直接的な原因はわからなかったものの、ポート変更とロードバランサーのリスナーとルールを編集することで解決しました。
一度ロードバランサー、セキュリティグループ、ターゲットグループ、VPCを作り直しポート番号を10080
から80
にしました。
その時点でwebサイトへhttp接続はでき、https接続をすると 「504 Gateway Time-out」 と出るようになりました。
次にロードバランサーのリスナーとルールですが、
HTTP:80
リスナーではHTTPS(443)
へリダイレクトするルールを。
HTTPS:443
リスナーではポート番号80
のターゲットグループへ転送するルールを設定します。
これにて無事HTTPS接続ができるようになりました!
結果として問題のnginxのエラーは出なくなり、503エラーも表示されなくなり、異常のあるターゲットグループは使わないことになりました。
ただ今や当たり前のようにGPTやPerplexityに頼るが、これでは実力が身につかないと危機感を抱いている…。