前提・実現したいこと
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