Amazon-Web-Services
Rails SSL 執行 puma 和 EC2 AWS
規格:Rails 4.2.4,Ruby 2.1.9,執行 puma,生產模式下的 EC2 實例
我有一個我想在我的伺服器上安裝的 SSL 證書,但是使用像這樣的技術不會產生任何結果
rails s puma -b 'ssl://0.0.0.0:9292?key=path_to_key.key&cert=path_to_cert.crt&verify_mode=none&ca=path_to_root_bundle.crt'
https://stackoverflow.com/questions/16063117/how-to-configure-rails-with-puma-to-use-ssl
我得到的不是正常執行的伺服器
Puma starting in single mode... * Version 3.2.0 (ruby 2.1.9-p490), codename: Spring Is A Heliocentric Viewpoint * Min threads: 0, max threads: 16 * Environment: production * Listening on tcp://ssl://0.0.0.0:9292?key=~/evslideshow.key&cert=~/e3b162f57ea48f91.crt&verify_mode=peer&ca=~/gd_bundle-g2-g1.crt:80 * Exiting /home/ec2-user/.rvm/gems/ruby-2.1.9@slideshow/gems/puma-3.2.0/lib/puma/binder.rb:240:in `initialize': getaddrinfo: Name or service not known (SocketError)
現在我的腦海裡正在玩不同的選擇。我可以繼續使用 puma 並以某種方式使其工作。我可以切換到不同的伺服器 gem。或者我可以使用亞馬遜的證書管理系統(儘管我猜這會涉及一些成本)。
非常感謝任何幫助,我正在努力為自己節省一場漫長而瘋狂的追逐。
通過閱讀puma 的 Github 頁面上的一些問題頁面找到了解決方案。顯然我們必須直接呼叫 puma ,而不是 through
rails server
,儘管在這個舊的 stackoverflow 答案中說了些什麼工作程式碼是
RAILS_ENV=production rvmsudo -E puma -d -b "ssl://0.0.0.0:443?key=${KEY_PATH}& cert=${CERT_PATH}&verify_mode=peer&ca=${CERT_BUNDLE_PATH}" -p 80
確保在您的生產配置文件中也打開 config.force_ssl。
顯而易見的事情是修復證書路徑中的錯誤。您使用了一個符號
~
,它在 Linux 的路徑名中沒有特殊含義。相反,這是 Bash shell 用來替換使用者主目錄的快捷方式。但是因為你有單引號參數,Bash 不執行替換。您需要明確指定路徑,而不是使用
~
.當然,您不需要在使用者的主目錄中擁有 TLS 證書或 Web 應用程序,但這是另一個討論。