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

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

新規登録して質問してみよう
ただいま回答率
87.20%
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(バーチャル・プライベート・サーバ)は、仮想化されたサーバをレンタルするサービスで、共有サーバでありながら専門サーバと同等の機能を果たします。物理的な専門サーバより安価で提供できるメリットがあります。

受付中

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

yoshi_10_11
yoshi_10_11

総合スコア0

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

1回答

0評価

0クリップ

1009閲覧

投稿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

error_log /home/rails/app_name/log/nginx.error.log; access_log /home/rails/app_name/log/nginx.access.log; # max body size client_max_body_size 2G; upstream app_server { server unix:/home/rails/app_name/tmp/sockets/.unicorn.sock fail_timeout=0; } server { listen 80; server_name ドメイン名; return 301 https://$host$request_uri; } server { listen 443; ssl on; server_name py-library.com; ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; root /home/rails/app_name; try_files $uri/index.html $uri.html $uri @app; location @app { proxy_pass http://app_server; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Real-IP $remote_addr; proxy_redirect off; } error_page 500 502 503 504 /500.html; location = /500.html { root /home/rails/app_name; } }

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

nginx

include /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

$worker = 2 $timeout = 30 $app_dir = "/home/rails/app_name" $listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir $pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir $std_log = File.expand_path 'log/unicorn.log', $app_dir # set config worker_processes $worker working_directory $app_dir stderr_path $std_log stdout_path $std_log timeout $timeout listen $listen pid $pid # loading booster preload_app true # before starting processes before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin Process.kill "QUIT", File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end # after finishing processes after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end

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

nginx → unicornの順で起動

bash

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

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

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

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

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

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

Bash

curl -I https://ドメイン名 // レスポンス HTTP/1.1 302 Found Server: nginx/1.12.2 Date: Sun, 05 Jul 2020 14:21:34 GMT Content-Type: text/html; charset=utf-8 Connection: keep-alive Location: https://ドメイン名/users/sign_in Cache-Control: no-cache Set-Cookie: xxxxxxxxxxxxxxxx; path=/; HttpOnly X-Request-Id: xxxxxxxxxxxxxxxxxxxxxxx X-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

server {   listen 80;   server_name ドメイン名;     root /home/rails/app_name;     try_files $uri/index.html $uri @app;     location @app {    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header Host $http_host;  } }

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

補足情報(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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

CHERRY
CHERRY

2020/07/05 21:52

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

2020/07/06 01:10

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

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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