我在我的Heroku应用程序上使用Sidekiq,当我想杀死工作或重试时,它将导致403页的禁止页面,并带有错误:
WARN -- : attack prevented by Rack::Protection::HttpOrigin
我的Heroku应用程序:http://myapp.herokuapp.com我的域名不起作用:https://www.myapp.my
在sidekiq文档中,我发现这是为了修复添加到路由的错误。rb,但无济于事:sidekiq :: web.set:session_secret,rails.application.secrets [:secret_key_base]
我的session_store.rb文件:
Rails.application.config.session_store :cookie_store, key: '_myapp_session'
我想SSL存在问题。我为nginx.conf找到了这个解决方案,但是如何在Heroku上进行设置以测试是否有帮助?
proxy_set_header X-Forwarded-Host 'my-host.com';
proxy_set_header X-Forwarded-Proto $scheme;
或任何其他解决方案如何解决403禁止?
编辑:我的路线
require 'sidekiq/web'
authenticate :admin do
mount Sidekiq::Web => '/sidekiq'
end
它确实在Local主机上工作,但在生产中不起作用
编辑#2:如果我关闭https并让我的应用在http上,它确实有效,所以如何告诉我的应用程序/sidekiq使用https?
proxy_set_header x-forwarded-proto $ proge;
这将告诉您的申请原始请求进来 即使Nginx到Unicorn的请求是http。
,也使用https
但是如何在Heroku上做?
我在Heroku上遇到了同样的问题。
定制域的解决方案;
-
您需要在配置文件中强制SSL您的Rails应用程序。因为Heroku应用程序使用默认的HTTPS方案作为应用程序URL。如果您不强迫它,它将在转发请求中使用不同的方案。
config/environments/production.rb
# Force ssl config.force_ssl = true
- 如果您在Heroku上使用了免费的dynos,则无法使用SSL功能,并且应该使用Heroku应用程序URL访问Sidekiq Web UI
https://your-app.herokuapp.com/sidekiq