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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

Ruby on Rails 6

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

nginx

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

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

AWS(Amazon Web Services)

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

Q&A

解決済

1回答

1466閲覧

ssl化した状態でアプリケーションが機能するようにしたい

yg4yoYYLOO7pqB9

総合スコア2

Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

Ruby on Rails 6

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

nginx

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

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

AWS(Amazon Web Services)

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

0グッド

1クリップ

投稿2021/11/05 11:19

編集2021/11/05 12:26

##前提・実現したいこと
使用技術
Rails6.0.3
Ruby 2.6.3p62
ssl化に使用したもの
AWSのroute53、cloudfront、ACM。(ドメイン取得はお名前.comでしました)
##発生している問題・エラーメッセージ
ec2サーバー上でsudo tail -f log/production.logを実行した結果です

[2021-11-05T10:59:55.382974 #26331] INFO -- : [7eaa855a-d931-49c3-b054-d772430cb012] Started POST "/login" for パブリックIP at 2021-11-05 10:59:55 +0000 I, [2021-11-05T10:59:55.383723 #26331] INFO -- : [7eaa855a-d931-49c3-b054-d772430cb012] Processing by EndUsers::SessionsController#create as HTML I, [2021-11-05T10:59:55.383786 #26331] INFO -- : [7eaa855a-d931-49c3-b054-d772430cb012] Parameters: {"authenticity_token"=>"KZk67TJY3G5uc2roWdFCayDQyTexreCGolxxuYBg/9H8tXN7aGu9Nbzvg0eVqrSgMstcoAbq3pE4D51vKI2paw==", "session"=>{"name"=>"", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"ログイン"} W, [2021-11-05T10:59:55.383916 #26331] WARN -- : [7eaa855a-d931-49c3-b054-d772430cb012] HTTP Origin header (https://略) didn't match request.base_url (http://略) I, [2021-11-05T10:59:55.384150 #26331] INFO -- : [7eaa855a-d931-49c3-b054-d772430cb012] Completed 422 Unprocessable Entity in 0ms (ActiveRecord: 0.0ms | Allocations: 115) F, [2021-11-05T10:59:55.384805 #26331] FATAL -- : [7eaa855a-d931-49c3-b054-d772430cb012] [7eaa855a-d931-49c3-b054-d772430cb012] ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): [7eaa855a-d931-49c3-b054-d772430cb012] [7eaa855a-d931-49c3-b054-d772430cb012] actionpack (6.0.3) lib/action_controller/metal/request_forgery_protection.rb:215:in 以下省略

##該当のソースコード
sudo vi /etc/nginx/nginx.confを実行した結果です

nginx

1・・・ここまで省略 2server { 3 listen 80; 4 listen [::]:80; 5 server_name _; 6 root /usr/share/nginx/html; 7 8 # Load configuration files for the default server block. 9 include /etc/nginx/default.d/*.conf; 10 11 error_page 404 /404.html; 12 location = /404.html { 13 } 14 15 error_page 500 502 503 504 /50x.html; 16 location = /50x.html { 17 } 18 } 19 20# Settings for a TLS enabled server. 21# 22# server { 23# listen 443 ssl http2; 24# listen [::]:443 ssl http2; 25# server_name _; 26# root /usr/share/nginx/html; 27# ssl on; 28# ssl_certificate "/etc/pki/nginx/server.crt"; 29# ssl_certificate_key "/etc/pki/nginx/private/server.key"; 30# ssl_session_cache shared:SSL:1m; 31# ssl_session_timeout 10m; 32# ssl_ciphers PROFILE=SYSTEM; 33# ssl_prefer_server_ciphers on; 34# 35# # Load configuration files for the default server block. 36# include /etc/nginx/default.d/*.conf; 37# 38# error_page 404 /404.html; 39# location = /40x.html { 40# } 41# 42# error_page 500 502 503 504 /50x.html; 43# location = /50x.html { 44# } 45# } 46 47}

config/puma.rb

# Puma can serve each request in a thread from an internal thread pool. # The `threads` method setting takes two numbers: a minimum and maximum. # Any libraries that use thread pools should be configured to match # the maximum value specified for Puma. Default is set to 5 threads for minimum # and maximum; this matches the default thread size of Active Record. # 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 # Specifies the `port` that Puma will listen on to receive requests; default is 3000. # port ENV.fetch("PORT") { 3000 } # Specifies the `environment` that Puma will run in. # environment ENV.fetch("RAILS_ENV") { "development" } # Specifies the `pidfile` that Puma will use. pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } # Specifies the number of `workers` to boot in clustered mode. # Workers are forked web server processes. If using threads and workers together # the concurrency of the application would be max `threads` * `workers`. # Workers do not work on JRuby or Windows (both of which do not support # processes). # # workers ENV.fetch("WEB_CONCURRENCY") { 2 } # Use the `preload_app!` method when specifying a `workers` number. # This directive tells Puma to first boot the application and load code # before forking the application. This takes advantage of Copy On Write # process behavior so workers use less memory. # # preload_app! # Allow puma to be restarted by `rails restart` command. plugin :tmp_restart bind "unix://#{Rails.root}/tmp/sockets/puma.sock" rails_root = Dir.pwd # 本番環境のみデーモン起動 if Rails.env.production? pidfile File.join(rails_root, 'tmp', 'pids', 'puma.pid') state_path File.join(rails_root, 'tmp', 'pids', 'puma.state') stdout_redirect( File.join(rails_root, 'log', 'puma.log'), File.join(rails_root, 'log', 'puma-error.log'), true ) # デーモン daemonize end

##試したこと
まずssl化を実装するためにやったことは以下です
・まずドメインを外部で手に入れる。(私はお名前.comを使用した)
・Route53でホストゾーンを作成。
・ネームサーバーを設定。
・ACMで証明書を発行する(バージニア北部で行った)
・Cloudfrontでディストリビューションを作成。
→オリジンドメインはEC2のパブリックIPv4DNSを貼り付けました。
・Route53の設定を変更(typeAでレコードセットを作成、エイリアスを”はい”にCloudfrontで作ったディストリビューションを選択)
上記を設定した上でアプリケーションを確認したところ、トップページやサインアップページ、ログインページはssl化に成功してうまく表示することができたのですが、実際にユーザー登録や、ログインのボタンを押すと上記のようなエラーコードが出てしまいます。
いろいろ調べてCSRFが関係しているなどの記事もありましたが少々自分のもとで発生しているものと異なっていてうまく解決ができなかったので質問させていただきました。サーバー周りの設定や、Route53の設定あたりが知識的に弱く質問が的を得ていないかもしれませんがご容赦ください。

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

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

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

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

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

mike2mike4

2021/11/05 11:34

Rubyについては初心者なので回答欄には書きませんが、nginxはwebサーバーだけの機能しかなく、Rubyを動かすアプリケーションサーバーは別に立てないといけないようです。それはどうなってますか? Apacheの場合、コンフィグに.rbを記述しないといけないようです。
yg4yoYYLOO7pqB9

2021/11/05 12:20

アプリケーションサーバーにはPumaを使用しています。Pumaに関しても知識が薄くssl化に伴って何が必要なのかよくわかっておらず記事を当たってもうまく解決策を見出せませんでした。質問を編集してpuma.rbもあげておきますので少し確認していただけると嬉しいです。
yg4yoYYLOO7pqB9

2021/11/05 13:15

その記事で紹介されているmkcertというものではなくAWSのACMで証明書をリクエストしている場合、certificateとkeyとはなんのことを指すのかよくわからないのですが、mkcertで作り直すべきでしょうか?
mike2mike4

2021/11/05 13:56

そうでした。作り直す必要ありません。CloutFront使っているのですから、別の方法があります。ちょっと調べますのでお待ちください。
mike2mike4

2021/11/05 14:06

ブラウザとCloutFront両方のキャッシュをクリアしてお試しください
yu_1985

2021/11/06 02:18

CloudFrontを使っているのは何のためでしょうか。 ログイン画面はともかく、ログイン後の内容などはキャッシュされたら困るものもあるのでは? そのへんは切り分けましたか?
guest

回答1

0

自己解決

返信が大変遅くなりすみません。コメントに書かれていたことをいろいろ試してみたのですがうまくいきませんでした。自分の知識不足もあり、何をしているのか全く把握できない状態で進んでしまっているため、一旦ssl化なしで実装しようと思います。AWSの各種サービスなどもう一度勉強しなおしてからssl化に挑戦したいと思います。いろいろ返信してくださりありがとうございました。

投稿2021/11/09 04:09

yg4yoYYLOO7pqB9

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問