Amazon-Web-Services

Rails SSL 執行 puma 和 EC2 AWS

  • February 18, 2019

規格: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 應用程序,但這是另一個討論。

引用自:https://serverfault.com/questions/953960