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

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

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

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

Ruby on Rails 5

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

nginx

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

Q&A

1回答

2432閲覧

Conoha VPS上でデプロイしたRailsアプリケーションに外部からアクセスできない(nginx × unicorn × Let's Encrypt)

yoshi_10_11

総合スコア241

unicorn

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

Ruby on Rails 5

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

nginx

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

VPS

VPS(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

0グッド

0クリップ

投稿2020/07/05 14:32

前提・実現したいこと

Conoha VPS上でRailsアプリケーションをデプロイしたのですが外部からアクセスができません。
※「このサイトにアクセスできません」が表示されます
ローカル環境では正常に動作していたので、nginx、SSL設定、もしくはunicornの問題であると思われますが、原因がつかめず困っています。

原因の究明方法なども含めてご教授お願いいたします。

設定までの流れ

①サーバーの導入

Conoha VPSでサーバーを追加します。
イメージタイプで「Ruby on Rails」を選択して追加します。
※サーバー追加後はブラウザでIPアドレスを叩くと「Yay! Your on Rails!」が表示されるので、この時点では問題有りません。
※接続許可ポートは「すべて」で設定されています。

Conohaの画面上で「DNS」を選択し、今回利用したいドメインに対してAレコードを設定します。Aレコードの値は先ほど取得したサーバーのIPアドレスです。

②Let's Encryptで証明書の発行

サーバーにログインしたあと、Certbotを使ってSSL証明書を発行しました
※こちらを参考に取得 https://qiita.com/HeRo/items/f9eb8d8a08d4d5b63ee9
※取得はstandalone方式で実施するため、一度nginxやunicornを停止させた後に実施しました。

③/etc/nginx/conf.d配下のconfファイルを作成

/etc/nginx/conf.d/default.conf

nginx

1error_log /home/rails/app_name/log/nginx.error.log; 2access_log /home/rails/app_name/log/nginx.access.log; 3# max body size 4client_max_body_size 2G; 5upstream app_server { 6 server unix:/home/rails/app_name/tmp/sockets/.unicorn.sock fail_timeout=0; 7} 8server { 9 listen 80; 10 server_name ドメイン名; 11 return 301 https://$host$request_uri; 12} 13server { 14 listen 443; 15 ssl on; 16 server_name py-library.com; 17 ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem; 18 ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem; 19 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 20 ssl_ciphers HIGH:!aNULL:!MD5; 21 root /home/rails/app_name; 22 try_files $uri/index.html $uri.html $uri @app; 23 location @app { 24 proxy_pass http://app_server; 25 proxy_set_header Host $host; 26 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 27 proxy_set_header X-Forwarded-Host $host; 28 proxy_set_header X-Forwarded-Server $host; 29 proxy_set_header X-Forwarded-Proto https; 30 proxy_set_header X-Real-IP $remote_addr; 31 proxy_redirect off; 32 } 33 error_page 500 502 503 504 /500.html; 34 location = /500.html { 35 root /home/rails/app_name; 36 } 37} 38

上記設定ファイルはnginx.confにて

nginx

1include /etc/nginx/conf.d/default.conf;

で読み込むように記述。その他は初期値のまま。
また、もともとサンプル用に作成されていたページ用のconfファイルは削除しました

Railsアプリケーションをclone、bundle install、rails db:create

/home/rails/ディレクトリ下にcloneしました。
(サーバー作成後に用意されているサンプルアプリもこちらのディレクトリに用意されていたため)

その後、bundle installを行いました。
rbenvgがインストールされている環境だったため、①必要なRubyのバージョンインストール②Gemfile.lock指定のBundlerインストール③bundle install
をしています。

「RAILS_ENV=production rails db:create」およびrails db:migrateを実施しています
※dbはsqlite3を利用しています

unicorn.rbを記述

Railsアプリケーションのconfig/unicorn.rbに記述

ruby

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

tmp/socketsやtmp/pidsなどのディレクトリがなかったためmkdirなどで作成

nginx → unicornの順で起動

bash

1// nginx 起動 2nginx 3 4// unicorn起動 5bundle exec unicorn_rails -c config/unicorn.rb -E production -D 6 7// unicornプロセスが正常に動いているのを確認 8ps aux | grep unicorn

発生している問題・エラーメッセージ

######ブラウザからアクセス
https://ドメイン名」でアクセスしても「このサイトにアクセスできません」が表示されます。

https://IPアドレス」でアクセスすると「偽のサイトにアクセスしようとしています」の表示が出ます!!それでも強制的にアクセスするとやはり同じく「このサイトにアクセスできません」が表示されます

どちらの場合もnginxのaccess.logに記録されません

######サーバー内でCurlでアクセス

Bash

1curl -I https://ドメイン名 2 3// レスポンス 4HTTP/1.1 302 Found 5Server: nginx/1.12.2 6Date: Sun, 05 Jul 2020 14:21:34 GMT 7Content-Type: text/html; charset=utf-8 8Connection: keep-alive 9Location: https://ドメイン名/users/sign_in 10Cache-Control: no-cache 11Set-Cookie: xxxxxxxxxxxxxxxx; path=/; HttpOnly 12X-Request-Id: xxxxxxxxxxxxxxxxxxxxxxx 13X-Runtime: 0.005838

access.log

ipアドレス - - [05/Jul/2020:23:21:34 +0900] "HEAD / HTTP/1.1" 302 0 "-" "curl/7.29.0" "-"

ちなみに、どちらの場合もunicorn.logに異常な記載はありませんでした

試したこと

①Railsアプリケーションのバグ?→ローカルでは問題なく動作する
②nginxやunicornなどの再起動→変わらず
③ssl設定を省いてやってみた→変わらず

default.confのserver設定の部分を

nginx

1server { 2  listen 80; 3  server_name ドメイン名; 4  5  root /home/rails/app_name; 6  7  try_files $uri/index.html $uri @app; 8  9  location @app { 10   proxy_set_header X-Real-IP $remote_addr; 11   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 12   proxy_set_header Host $http_host; 13  } 14}

といったようにしてみた。

補足情報(FW/ツールのバージョンなど)

サーバーOS...CentOS Linux release 7.6.1810 (Core)
Nginx...1.12.2
unicorn...5.5.1
Ruby...2.5.1
Rails...5.2.3

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

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

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

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

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

CHERRY

2020/07/05 21:52

ドメインのDNS の設定は正しいでしょうか?
yoshi_10_11

2020/07/06 01:10

conohaのドメイン設定からAレコードの設定のみ行っております。 G Suite Digを使ってドメインの設定を確認したところ、作成したサーバーのIPアドレスが返るようになっておりましたので問題はないかな、と思っております。
guest

回答1

0

マニュアルにコントロールパネルで、接続許可ポートを設定するという項目がありますが、この設定はどうなっているでしょうか?

使用しているポート 80 と 443 は、接続を許可しているでしょうか?

接続許可ポートを設定する

投稿2020/07/05 22:08

CHERRY

総合スコア25171

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

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

yoshi_10_11

2020/07/06 01:00

ご回答ありがとうございます。 接続許可ポートは「すべて許可」になっています!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問