在nginx错误495(错误的客户端证书)上提供Rails资产管道中的样式表

Serve stylesheet from Rails asset pipeline on nginx error 495 (bad client certificate)?

本文关键字:错误 Rails 管道 样式 nginx 客户端 证书      更新时间:2023-09-26

我有一个基本的Rails应用程序布局,带有

<%= stylesheet_link_tag 'application', media: 'all' %>
<%= javascript_include_tag 'application' %>

使用nginx,我要求一个可选的客户端证书:

ssl on;
ssl_verify_client optional;

当客户端连接到一个错误的证书(例如过期、尚未有效或不受信任)时,nginx会以一个通用页面"SSL证书错误"进行微弱响应。

为了提供合理的用户体验,我告诉nginx:

error_page 495 /actual_useful_information.html;

但现在我丢失了样式表和javascript,因为当浏览器加载页面并遵循Rails布局的链接时,证书仍然不好,样式表也不会出现。

有没有一种解决方案可以为使用布局的样式页面提供服务?有没有一种方法可以内联资产管道(仅针对这一种情况)?

有javascript在里面也会很好,但至少,样式怎么样。

我找到了自己的答案:

<% if @inline_assets %>
  <script><%== File.read("public#{javascript_path('application')}") %></script>
  <style><%== File.read("public#{stylesheet_path('application')}") %></style>
<% else %>
  <%= stylesheet_link_tag 'application', media: 'all' %>
  <%= javascript_include_tag 'application' %>
<% end %>