ruby-on-rails - 使用 apache 和 passenger 为 rails 4.2 站点设置 SSL 的问题

标签 ruby-on-rails apache ssl passenger cloudflare

我正在使用 Apache (2.4.7) 和 Passenger 5.1.1 管理在 Ubuntu 14.04 上运行的 Rails (4.2) 站点。我正在使用 Cloudflare 证书设置 SSL。

该网站似乎正常运行,我的浏览器中没有收到任何 SSL 错误,但在我的应用程序日志中,我看到内部资源(通常在供应商或公共(public)资源中)的大量 404 (ActionController::RoutingError) 错误).

我不知道是什么导致了这个错误。我已经尝试在我的 production.rb 文件中设置“config.force_ssl = true”,但据我所知,我应该能够从 Apache 或 Cloudflare 管理它。

任何人都可以帮助我,甚至只是给我一些线索,因为此刻,我不知所措。

Started GET "/example/vendor/bundle/ruby/2.3.0/gems/posix-spawn-0.3.12/test/" for xxx.xxx.xxx.xx at 2017-09-25 21:14:37 +0100

ActionController::RoutingError (No route matches [GET] "/mysite/vendor/bundle/ruby/2.3.0/gems/posix-spawn-0.3.12/test"):
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.0/lib/rails/rack/logger.rb:38:in `call_app'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.0/lib/rails/rack/logger.rb:20:in `block in call'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.0/lib/active_support/tagged_logging.rb:68:in `block in tagged'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.0/lib/active_support/tagged_logging.rb:26:in `tagged'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.0/lib/active_support/tagged_logging.rb:68:in `tagged'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.0/lib/rails/rack/logger.rb:20:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.0/lib/action_dispatch/middleware/request_id.rb:21:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/methodoverride.rb:22:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/runtime.rb:18:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.0/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/rack-1.6.5/lib/rack/sendfile.rb:113:in `call'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.0/lib/rails/engine.rb:518:in `call'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.0/lib/rails/application.rb:164:in `call'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.0/lib/rails/railtie.rb:194:in `public_send'
  vendor/bundle/ruby/2.3.0/gems/railties-4.2.0/lib/rails/railtie.rb:194:in `method_missing'
  vendor/bundle/ruby/2.3.0/gems/newrelic_rpm-3.17.1.326/lib/new_relic/agent/instrumentation/middleware_tracing.rb:96:in `call'
  /home/mysite/.rvm/gems/ruby-2.3.3@2.3.3on4.2/gems/passenger-5.1.1/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb:97:in `process_request'
  /home/mysite/.rvm/gems/ruby-2.3.3@2.3.3on4.2/gems/passenger-5.1.1/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:152:in `accept_and_process_next_request'
  /home/mysite/.rvm/gems/ruby-2.3.3@2.3.3on4.2/gems/passenger-5.1.1/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb:113:in `main_loop'
  /home/mysite/.rvm/gems/ruby-2.3.3@2.3.3on4.2/gems/passenger-5.1.1/src/ruby_supportlib/phusion_passenger/request_handler.rb:416:in `block (3 levels) in start_threads'
  /home/mysite/.rvm/gems/ruby-2.3.3@2.3.3on4.2/gems/passenger-5.1.1/src/ruby_supportlib/phusion_passenger/utils.rb:113:in `block in create_thread_and_abort_on_exception'

我的 Apache 配置如下所示:

<VirtualHost *:80>

  ServerName example.com

  RewriteEngine On
  RewriteCond %{HTTPS} off [OR]
  RewriteCond %{HTTP_HOST} !^www\. [NC]
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
  RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

</VirtualHost>

<VirtualHost *:80>

  ServerName www.example.com

  RewriteEngine On
  RewriteCond %{HTTPS} off [OR]
  RewriteCond %{HTTP_HOST} !^www\. [NC]
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
  RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

</VirtualHost>

<VirtualHost *:443>

  RequestHeader set X-Forwarded-Proto "https"
  SSLEngine      on
  SSLCertificateFile        /home/example/ssl/example.crt
  SSLCertificateKeyFile     /home/example/ssl/example.key

  ServerName example.com

  # Redirect / https://www.example.com/
  RewriteEngine On
  RewriteCond %{HTTPS} off [OR]
  RewriteCond %{HTTP_HOST} !^www\. [NC]
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
  RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

</VirtualHost>

<VirtualHost *:443>
  RequestHeader set X-Forwarded-Proto "https"
  SSLEngine      on
  SSLCertificateFile        /home/example/ssl/example.crt
  SSLCertificateKeyFile     /home/example/ssl/example.key

  ServerName www.example.com
  ServerAdmin dagmar@example.com 
  DocumentRoot /var/www/example/public 
  ErrorLog /var/log/apache2/example/error.log 
  CustomLog /var/log/apache2/example/access.log common 

  <Directory /var/www/example/public>
    # This relaxes Apache security settings.
    AllowOverride all
    # MultiViews must be turned off.
    Options -MultiViews
  </Directory>

//等等

</VirtualHost>

最佳答案

正在发出引用非公开路径的请求。即 /example/vendor/bundle/ruby/2.3.0/gems/posix-spawn-0.3.12/test/ 这不是 SSL 问题。检查您的访问日志以查看请求是否以这种方式传入,如果是,则说明您的应用有问题,如果不是,则说明您的重定向有问题。

关于ruby-on-rails - 使用 apache 和 passenger 为 rails 4.2 站点设置 SSL 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413623/

相关文章:

ruby-on-rails - 如何以编程方式获取正在运行的容器的容器 ID(在 Docker 上)?

ruby-on-rails - Spree订单完成时如何调用自定义类方法!执行的方法

Apache 配置读取 header 值

c# - 启动 Kestrel ASP.NET 服务器的证书问题 - Windows 10、C#、VS2019

Java SSL 连接和未知服务器证书警告

ruby-on-rails - ActiveRecord 验证中属性的旧值和新值

ruby-on-rails - Rails 5 - 在 link_to 中,如何传递 nil (NULL) 参数?

Apache : Proxy Balancer, 在两个 channel 上发送某些请求

apache - 重写以添加尾部斜杠,但与域无关?

SSL 证书 .csr .key .cert 文件