質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Elastic Load Balancing

Elastic Load Balancingは、Amazon社が提供する、 EC2インスタンス間で自動的にトラフィックの負荷分散を行うサービスです。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2081閲覧

ELB経由でEC2にアクセスする方法

kuroine01690699

総合スコア12

Elastic Load Balancing

Elastic Load Balancingは、Amazon社が提供する、 EC2インスタンス間で自動的にトラフィックの負荷分散を行うサービスです。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

2クリップ

投稿2020/11/13 13:24

編集2020/11/16 11:34

初心者エンジニアです。ローカルで作成中のWebアプリ(プロトタイプ)をAWSのEC2上にデプロイし、今後公開したいと考えております。
EC2上へのデプロイまでは確認できました(hello, world!と表示)が、ELB経由でアクセスした場合、同様の表示が返ってこないため、質問させて下さい。

■構成・バージョン
-Application Load Balancer
-AWS EC2 (Amazon Linux 2(Cent0S 7))
-Nginx(1.16.1)
-Unicorn(5.7.0)
-Ruby 2.7.2
-Rails 6.0.3.4
-RDS(MariaDB 10.4.13)

■前提
-ロードバランサーのターゲットインスタンスのElasticIPアドレスでアクセスし、hello, world!と表示されることを確認済み
-ロードバランサーのターゲットインスタンスのステータスがhealthyとなっているを確認済み
-セキュリティグループのインバウンドルールは、http ポート:80 について、すべてのアクセスを許可

■Nginxの設定
error_log /var/www/rails/coffee/log/nginx.error.log;
access_log /var/www/rails/coffee/log/nginx.access.log;
client_max_body_size 2G;
upstream app_server {
server unix:/var/www/rails/coffee/tmp/sockets/.unicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name xx.xxx.xxx.xxx; #Elastic IP
keepalive_timeout 5;
root /var/www/rails/coffee/public;
try_files $uri/index.html $uri.html $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/rails/coffee/public;
}
}

■問題点
-ELB経由でEC2へアクセスするため、作成したロードバランサーのDNS名をコピーし、ブラウザに貼り付けたところ、以下表示されてしまう
(本来であれば、hello, world!が表示される想定)


Thank you for using Amazon Linux 2.
Now that you have it installed, find announcements and discussion in the AWS Discussion Forums. Also try AWS documentation.


 <質問>
ブラウザからELB経由でEC2へアクセス(hello, world!を表示)する方法、確認事項などアドバイスください。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2020/11/14 05:48

Apacheなのかnginxなのかわからないですが、confを貼ってください。 恐らくServernameの設定だと思いますが…。
kuroine01690699

2020/11/16 01:09

コメントありがとうございます。構成・バージョン情報について追記いたしましたが、confの意図が間違っておりましたら、ご指摘ください。 また、質問者さまのおっしゃる「Servernameの設定」について、何を確認すればよいか分からなかったため、ご教授いただけますと幸いです。
yu_1985

2020/11/16 09:12

構成を追記してもらったのはよいことですが、求めているのはそれではなかったですね…。 Nginxの設定ファイルの中身を貼ってください。
kuroine01690699

2020/11/16 11:28

ありがとうございます! Nginxの設定ファイルのserver_nameがElastic IPのままだったことが原因だったようです。 ELBのDNS名に変更することで解決しました!
guest

回答1

0

自己解決

Nginx設定ファイルのserver_nameをElastic IPからELBのDNS名に変更。
なお、デフォルトのDNS名が長く、Nginx起動時に別エラー(could not build server_names_hash, you should increase server_names_hash_bucket_size: 64)が発生するため、server_names_hash_bucket_sizeを指定。

<変更前>
・・・(略)・・・
upstream app_server {
server unix:/var/www/rails/coffee/tmp/sockets/.unicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name xx.xxx.xxx.xxx; #Elastic IP
keepalive_timeout 5;
・・・(略)・・・

<変更後>
・・・(略)・・・
upstream app_server {
server unix:/var/www/rails/coffee/tmp/sockets/.unicorn.sock fail_timeout=0;
}
server_names_hash_bucket_size 128; #ここにDNS名のサイズエラー回避のための設定を追記
server {
listen 80;
server_name xxxxxxxxx.ap-northeast-1.elb.amazonaws.com; #ここをELBのDNS名に変更
keepalive_timeout 5;
・・・(略)・・・

投稿2020/11/16 11:43

kuroine01690699

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2020/11/16 11:53

ELBのDNS名を直接記載すると、今度はドメインを割り当てた時に同じ現象が発生します。 リクエストのホストがServerNameにマッチした時にそのルールが適用されるからです。 その際はServerNameを併記するか、いっそのことワイルドカードで指定してしまってもいいと思います。 もちろんワイルドカードで指定する場合はその設定がデフォルトになるのでご注意を。
kuroine01690699

2020/11/16 12:26 編集

フォローありがとうございます! 一旦、動作確認のためデフォルトのDNS名を記載しましたが、自分のドメイン名を取得・割り当てる際には、改めてserver_nameの箇所を更新しようと思います。 併記やワイルドカードも使えるのですね。勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問