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

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の基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

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

Q&A

2回答

2429閲覧

EC2+Nginx+Unicornを使って作成したRailsアプリにアクセスできない

Sano

総合スコア19

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の基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

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

0グッド

0クリップ

投稿2019/10/08 12:56

編集2019/10/12 02:26

失敗したこと

これまでherokuにデプロイしていたRailsアプリをAWSのEC2を使ってデプロイしたいと思い、この記事を参考にチャレンジしました。
デプロイ編②までとりあえず進めることができました。
自分の設定したElastic IP(IPv4 パブリック IP)にアクセスしたところ 
このサイトにアクセスできません。~~~で接続が拒否されました。
と表示されました。
元記事の情報量が多いため質問のための情報も多く記載することになりますが、よろしくお願いします。

調べたこと、試したこと

・Nginx
まず最初にNginxがec2インスタンス内で起動できているを確認しました。

#SSHでEC2インスタンスに接続 ps ax | grep nginx >>> 25575 ? Ss 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 26853 ? S 0:00 nginx: worker process

master, wokerを確認できたので起動はしていると考えています。

次にcurlコマンドを使って応答があるかを確認しました。

$ curl https://IPアドレス/ curl: (7) Failed to connect to IP アドレス port 443: Connection timed out

応答には失敗しています。

次にブラウザから直接確認してみました。
冒頭にも記述しましたがElastic IP(IPv4 パブリック IP)にアクセスしたところ
このサイトにアクセスできません。~~~で接続が拒否されました。
と表示されました。

また、パブリックDNS(IPv4) ec2-~~~compute.amazonaws.comでアクセスしたところ
パブリックDNSでアクセスしたときの画像
と表示されました。

Nginxのエラーログを確認したところ、このようなログが出力されていました。

# /var/www/rails/play_with/log/nginx.error.log 2019/10/08 07:08:56 [crit] 25232#0: *1 connect() to unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock failed (2: No such file or directory) while connecting to upstream, client: IPアドレス, server: iPアドレス, request: "GET / HTTP/1.1", upstream: "http://unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock:/", host: "Elastic IP(IPv4 パブリック IP)" 2019/10/08 07:14:22 [error] 25358#0: *6 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: IPアドレス, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "ec2-ap-northeast-1.compute.amazonaws.com", referrer: "http://ec2-ap-northeast-1.compute.amazonaws.com/" 2019/10/08 10:13:13 [error] 26853#0: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: iPアドレス, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "ec2-ap-northeast-1.compute.amazonaws.com"

一行目のエラーは.unicorn.sockが読みこめていないようです。

#.unicorn.sockが存在しているか確認 ls -la /var/www/rails/play_with/tmp/sockets/ >>> srwxrwxrwx 1 mashio mashio 0 Oct 8 12:06 .unicorn.sock

ファイルは存在していますが、読み込めていないようです。
同じ状況で解決された方がいないか調べてみましたが、CentOSの方しか見つけることができませんでした。
(参考にさせて頂いた記事と同じAMIである、Amazon Linuxを使用)

・unicorn
unicornに関して起動確認、ログ確認を記載させていただきます。

ps -ef | grep unicorn | grep -v grep >>>mashio 27744 1 0 12:06 ? 00:00:02 unicorn_rails master -c /var/www/rails/play_with/config/unicorn.conf.rb -D -E production mashio 27749 27744 0 12:06 ? 00:00:00 unicorn_rails worker[0] -c /var/www/rails/play_with/config/unicorn.conf.rb -D -E production mashio 27751 27744 0 12:06 ? 00:00:00 unicorn_rails worker[1] -c /var/www/rails/play_with/config/unicorn.conf.rb -D -E production

起動は確認できました。

# /var/www/rails/play_with/log/unicorn.log >>>I, [2019-10-08T09:06:18.972221 #26577] INFO -- : Refreshing Gem list I, [2019-10-08T09:06:21.063404 #26577] INFO -- : listening on addr=/var/www/rails/play_with/tmp/sockets/unicorn.sock fd=11 I, [2019-10-08T09:06:21.069533 #26577] INFO -- : master process ready I, [2019-10-08T09:06:21.073400 #26582] INFO -- : worker=0 ready I, [2019-10-08T09:06:21.074532 #26584] INFO -- : worker=1 ready I, [2019-10-08T09:12:07.734052 #26577] INFO -- : reaped #<Process::Status: pid 26582 exit 0> worker=0 I, [2019-10-08T09:12:07.734169 #26577] INFO -- : reaped #<Process::Status: pid 26584 exit 0> worker=1 I, [2019-10-08T09:12:07.734232 #26577] INFO -- : master complete

記事をもとに作成したconfig/unicorn.conf.rb

ruby

1# set lets 2 $worker = 2 3 $timeout = 30 4 $app_dir = "/var/www/rails/play_with" #自分のアプリケーション名 5 $listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir 6 $pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir 7 #$listen = File.expand_path "/var/run/.unicorn.sock" 8 #$pid = File.expand_path "/var/run/unicorn.pid" 9 $std_log = File.expand_path 'log/unicorn.log', $app_dir 10 # set config 11 worker_processes $worker 12 working_directory $app_dir 13 stderr_path $std_log 14 stdout_path $std_log 15 timeout $timeout 16 listen $listen 17 pid $pid 18 # loading booster 19 preload_app true 20 # before starting processes 21 before_fork do |server, worker| 22 defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! 23 old_pid = "#{server.config[:pid]}.oldbin" 24 if old_pid != server.pid 25 begin 26 Process.kill "QUIT", File.read(old_pid).to_i 27 rescue Errno::ENOENT, Errno::ESRCH 28 end 29 end 30 end 31 # after finishing processes 32 after_fork do |server, worker| 33 defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection 34 end

記事をもとに作成した/etc/nginx/conf.d/play_with.conf

error_log /var/www/rails/play_with/log/nginx.error.log; access_log /var/www/rails/play_with/log/nginx.access.log; # max body size client_max_body_size 2G; upstream app_server { # for UNIX domain socket setups server unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock fail_timeout=0; } server { listen 80; server_name ; Elastic IP(IPv4 パブリック IP) # nginx so increasing this is generally safe... keepalive_timeout 5; # path for static files root /var/www/rails/play_with/public; # page cache loading try_files $uri/index.html $uri.html $uri @app; location @app { # HTTP headers 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; } # Rails error pages error_page 500 502 503 504 /500.html; location = /500.html { root /var/www/rails/play_with/public; } }

教えていただきたいこと

・.unicorn.sockを読み込めるようにするにはどうしたらよいか
・動作確認するべきファイル、確認方法

羅列的になり読みにくいかと思いますがよろしくお願いします。
ソースコードは参考にさせて頂いた記事と同じです。(異なっている点は、IPアドレス、アプリ名)
他に、ログ、ソースなど必要でしたらコメントお願いします。

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

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

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

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

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

guest

回答2

0

unicornのlogをみると
listening on addr=/var/www/rails/play_with/tmp/sockets/unicorn.sock
となっており、.unicorn.soc になっていません(頭の ドット がない)

ls の結果と矛盾するので?? ですが。
socketファイルの名前を、unicorn、nginx, lsの結果 が一致するように修正してみて下さい。

なお、httpsでアクセスしていますが、httpsにするにはいくつが手順が必要です。
まず http でテストするのがよいと思います

投稿2019/10/09 22:40

winterboum

総合スコア23347

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

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

0

nginx エラーログ

2019/10/08 07:08:56 [crit] 25232#0: *1 connect() to unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock failed (2: No such file or directory) while connecting to upstream, client: IPアドレス, server: iPアドレス, request: "GET / HTTP/1.1", upstream: "http://unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock:/", host: "Elastic IP(IPv4 パブリック IP)"

http://unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock:/ が怪しいのでは?
おそらく、unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock:/になるべきだと思います。

nginx側の設定を見直してみてはどうでしょうか。

投稿2019/10/08 14:40

maai

総合スコア463

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問