gpt4 book ai didi

ruby-on-rails - 在安全 (https) 上运行 rails 并重定向非安全 (http) 请求以通过 webricks 确保安全

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:20 26 4
gpt4 key购买 nike

我正在使用以下环境:

Server: Webrick
Rails: 3.2.6
Ruby: 1.9.3p555

我在/script/rails 中添加了以下代码:

require 'rails/commands/server'
require 'rack'
require 'webrick'
require 'webrick/https'

if ENV['SSL'] == "true"
module Rails
class Server < ::Rack::Server
def default_options
super.merge({
:Port => 3000,
:environment => (ENV['RAILS_ENV'] || "production").dup,
:daemonize => false,
:debugger => false,
:pid => File.expand_path("tmp/pids/server.pid"),
:config => File.expand_path("config.ru"),
:SSLEnable => true,
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
:SSLPrivateKey => OpenSSL::PKey::RSA.new(
File.open("certs/project.key").read),
:SSLCertificate => OpenSSL::X509::Certificate.new(
File.open("certs/project.crt").read),
:SSLCertName => [["CN", WEBrick::Utils::getservername]],
})
end
end
end
end

APP_PATH = File.expand_path('../../config/application', __FILE__)
require File.expand_path('../../config/boot', __FILE__)
require 'rails/commands'

我在/config/environments/production.rb 中添加了以下行:

config.force_ssl = true

现在我尝试了以下尝试:

  1. 在 3000 上启动 rails

    SSL=true rails s -e production -p 3000

它在 https://project.com 上运行 rails 但在 http://project.com 上出现 404 错误

  1. 在 443 上启动 rails 并在脚本中提到相同的端口:

    rvmsudo rails s -p 443

  2. 使用两个不同的 pid 在 80 和 443 上启动 rails:

    rvmsudo rails s -p 80 -P PID1
    rvmsudo rails s -p 443 -P PID2

4.最后我尝试将请求从 443 和 80 转发到 3000:

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 3000

我也尝试用 thin gem 运行同样的东西,但结果是一样的。

最佳答案

冒着被抨击和贬低的风险......

拿着锤子,只把一切都看作钉子,这不是一个有效的计划。有时面对螺丝时,您必须找到 Screwdriver

Webrick 是 Rails Web 服务器最差的可用选项,只有在绝对必要时才应使用。将 thin 或 puma 放入 Gemfile 并在更快乐、线程更安全的世界中前进太简单了。

在这方面,这里是您理智的九步计划。

第 1 步:停止。

第 2 步:思考一下。

第 3 步:意识到最佳实践是有原因的,例如完美的前向保密、代理 Rails 应用程序的负载平衡、静态 Assets 服务。

第 4 步:决定停止重新发明轮子,花时间学习手艺。

第 5 步:通过您的发行版的存储库安装 nginx

第 6 步:Change default nginx host to serve your domain via SSL.

第 7 步:将 puma 添加到您的 Gemfile,并捆绑更新

第 8 步:Setup puma init.d or upstart file so it persists across reboots

第 9 步:利润

关于ruby-on-rails - 在安全 (https) 上运行 rails 并重定向非安全 (http) 请求以通过 webricks 确保安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com