diff --git a/Gemfile b/Gemfile
index 40f7a400227ef12731816cb72cef4e9bdfc4e2ba..809fd5a7d0ec645df5291d6266985bad38aeec07 100644
--- a/Gemfile
+++ b/Gemfile
@@ -41,6 +41,7 @@ gem 'simple_form'
 gem 'will_paginate'
 gem 'rack-attack'
 gem 'rack-cors', require: 'rack/cors'
+gem 'rack-timeout-puma'
 gem 'sidekiq'
 gem 'ledermann-rails-settings'
 gem 'pg_search'
diff --git a/Gemfile.lock b/Gemfile.lock
index 4a72b6b934cbabdfa2c61555599dc50efe473848..0be10bbfbaf139daea6fcd2243ab5490f1a1671f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -257,6 +257,9 @@ GEM
       rack
     rack-test (0.6.3)
       rack (>= 1.0)
+    rack-timeout (0.4.2)
+    rack-timeout-puma (0.0.1)
+      rack-timeout (~> 0.2, >= 0.2.0)
     rails-dom-testing (2.0.1)
       activesupport (>= 4.2.0, < 6.0)
       nokogiri (~> 1.6.0)
@@ -438,6 +441,7 @@ DEPENDENCIES
   rabl
   rack-attack
   rack-cors
+  rack-timeout-puma
   rails!
   rails_12factor
   rails_autolink
diff --git a/app/workers/processing_worker.rb b/app/workers/processing_worker.rb
index 34433a7939136a0d953acd44e7e3b9906932f2b5..b31cd0aaf5ef57a0e50df6a8e5993a9f5c43954e 100644
--- a/app/workers/processing_worker.rb
+++ b/app/workers/processing_worker.rb
@@ -2,6 +2,7 @@
 
 class ProcessingWorker
   include Sidekiq::Worker
+  
   sidekiq_options backtrace: true
 
   def perform(account_id, body)
diff --git a/app/workers/pubsubhubbub/confirmation_worker.rb b/app/workers/pubsubhubbub/confirmation_worker.rb
index b852970a9924aaeb69e1f8a9e9f533533e58bcb3..489bd835904a633578bea86af0a32b8de5251552 100644
--- a/app/workers/pubsubhubbub/confirmation_worker.rb
+++ b/app/workers/pubsubhubbub/confirmation_worker.rb
@@ -4,6 +4,8 @@ class Pubsubhubbub::ConfirmationWorker
   include Sidekiq::Worker
   include RoutingHelper
 
+  sidekiq_options queue: 'push'
+
   def perform(subscription_id, mode, secret = nil, lease_seconds = nil)
     subscription = Subscription.find(subscription_id)
     challenge    = SecureRandom.hex
diff --git a/app/workers/pubsubhubbub/delivery_worker.rb b/app/workers/pubsubhubbub/delivery_worker.rb
index 4d55798e8ba4dc6260f127a456a0bcdd0f69e223..6d526c2b12a8ba7c33cb71cfe3a03d6649baa880 100644
--- a/app/workers/pubsubhubbub/delivery_worker.rb
+++ b/app/workers/pubsubhubbub/delivery_worker.rb
@@ -4,6 +4,8 @@ class Pubsubhubbub::DeliveryWorker
   include Sidekiq::Worker
   include RoutingHelper
 
+  sidekiq_options queue: 'push'
+
   def perform(subscription_id, payload)
     subscription = Subscription.find(subscription_id)
     headers      = {}
diff --git a/app/workers/pubsubhubbub/distribution_worker.rb b/app/workers/pubsubhubbub/distribution_worker.rb
index 7917434f7089355a46718c14974478d6fee651bb..b0ddc71c1c1e39b5c1ba092bde7cbc5edb4c65f4 100644
--- a/app/workers/pubsubhubbub/distribution_worker.rb
+++ b/app/workers/pubsubhubbub/distribution_worker.rb
@@ -3,6 +3,8 @@
 class Pubsubhubbub::DistributionWorker
   include Sidekiq::Worker
 
+  sidekiq_options queue: 'push'
+
   def perform(stream_entry_id)
     stream_entry = StreamEntry.find(stream_entry_id)
     account      = stream_entry.account
diff --git a/app/workers/salmon_worker.rb b/app/workers/salmon_worker.rb
index 4a6ccf54d94bab7d0f44c7eee557f52fdfbe1b3d..0903ca487c5518597b54171f2507147cafb8399c 100644
--- a/app/workers/salmon_worker.rb
+++ b/app/workers/salmon_worker.rb
@@ -2,6 +2,7 @@
 
 class SalmonWorker
   include Sidekiq::Worker
+  
   sidekiq_options backtrace: true
 
   def perform(account_id, body)
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 0672cd587f452de26faf49e233955704fe2966d2..9254d494cefe98898950ae2b7c924b1ee77b5cb3 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -30,7 +30,7 @@ Rails.application.configure do
 
   # Specifies the header that your server uses for sending files.
   # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
-  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
+  config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
 
   # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
   config.force_ssl = false
diff --git a/config/initializers/timeout.rb b/config/initializers/timeout.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8b7311e39b5088cde32198d42436cf4301601bee
--- /dev/null
+++ b/config/initializers/timeout.rb
@@ -0,0 +1 @@
+Rack::Timeout.timeout = 30
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index 3392dd24227f95635058dc6ef0d9e7c440c2db11..e1f1f1c4cdedd2bfabfbab5d728c8b0a3d0f6199 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -23,7 +23,7 @@ services:
     restart: always
     build: .
     env_file: .env.production
-    command: bundle exec sidekiq -q default -q mailers
+    command: bundle exec sidekiq -q default -q mailers -q push
     depends_on:
       - db
       - redis