Rails 7 Active Storage in nginx - images stop loading halfway trough with net::ERR_HTTP2_PROTOCOL_ERROR 200

knsnq2tg  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(622)

由于某些原因,Active Storage映像未完全加载:Image Not Loading
我正在运行Ruby 3.0.5和Rails 7.0.5
我用这个命令启动我的rails应用程序:

  1. RAILS_ENV=production /usr/share/rvm/wrappers/ruby-3.0.5/rails server -b /var/www/***/puma.sock

字符串
下面是我的Rails环境:

  1. require "active_support/core_ext/integer/time"
  2. Rails.application.configure do
  3. config.cache_classes = true
  4. config.eager_load = true
  5. config.consider_all_requests_local = false
  6. config.action_controller.perform_caching = true
  7. config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
  8. config.assets.compile = true
  9. config.log_level = :info
  10. config.log_tags = [ :request_id ]
  11. config.action_mailer.perform_caching = false
  12. config.i18n.fallbacks = true
  13. config.active_support.report_deprecations = false
  14. config.log_formatter = ::Logger::Formatter.new
  15. if ENV["RAILS_LOG_TO_STDOUT"].present?
  16. logger = ActiveSupport::Logger.new(STDOUT)
  17. logger.formatter = config.log_formatter
  18. config.logger = ActiveSupport::TaggedLogging.new(logger)
  19. end
  20. # Do not dump schema after migrations.
  21. config.active_record.dump_schema_after_migration = false
  22. config.active_storage.service = :local
  23. config.active_storage.variant_processor = :mini_magick
  24. config.action_mailer.perform_deliveries = true
  25. config.action_mailer.default_url_options = { host: '***.com' }
  26. config.action_mailer.delivery_method = :smtp
  27. config.action_mailer.smtp_settings = {
  28. port: 587,
  29. domain: '***.com',
  30. address: 'mail.***.com',
  31. user_name: ENV['EMAIL_USER'],
  32. password: ENV['EMAIL_PWD'],
  33. authentication: 'plain',
  34. enable_starttls_auto: true
  35. }
  36. config.serve_static_assets = false
  37. config.assets.compress = true
  38. end


使用nginx作为代理,这是我的nginx配置:

  1. upstream app {
  2. server unix:///var/www/***/puma.sock fail_timeout=0;
  3. }
  4. server {
  5. listen 80;
  6. server_name ***.com www.***.com;
  7. return 302 https://***.com$request_uri;
  8. }
  9. server {
  10. listen 443 ssl http2 default_server;
  11. listen [::]:443 ssl http2 default_server;
  12. server_name ***.com www.***.com;
  13. include snippets/ssl-certs.conf;
  14. include snippets/ssl-params.conf;
  15. # Ruby configuration
  16. root /var/www/***/public;
  17. location ^~ /assets/ {
  18. gzip_static on;
  19. expires max;
  20. add_header Cache-Control public;
  21. }
  22. location / {
  23. proxy_pass http://app;
  24. proxy_set_header Host $host;
  25. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  26. proxy_set_header X-Forwarded-Host $host;
  27. proxy_set_header X-Forwarded-Proto $scheme;
  28. proxy_set_header X-NginX-Proxy true;
  29. proxy_read_timeout 120;
  30. }
  31. location ~ ^/(500|404|422).html {
  32. root /var/www/***/public;
  33. }
  34. error_page 500 502 503 504 /500.html;
  35. error_page 404 /404.html;
  36. error_page 422 /422.html;
  37. client_max_body_size 4G;
  38. keepalive_timeout 30;
  39. }


我试着在没有nginx的情况下运行应用程序,只使用以下命令

  1. rails s -b 0.0.0.0 -e production


图像加载正确
再次在nginx中运行,我尝试使用以下命令更改rails主动存储模式:

  1. config.active_storage.resolve_model_to_route = :rails_storage_proxy


但它什么也没做

tjrkku2a

tjrkku2a1#

我看了浏览器中的请求。我收到这些错误:
Firefox中的NS_ERROR_NET_PARTIAL_TRANSFER
net::ERR_HTTP2_PROTOCOL_ERROR 200 chrome
请求的总时间为350ms,这导致我使用这个位置块禁用代理缓冲:

  1. location ~ ^/rails/active_storage/disk {
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  3. proxy_set_header Host $http_host;
  4. proxy_set_header X-Forwarded-Proto $scheme;
  5. proxy_set_header X-Real-IP $remote_addr;
  6. proxy_pass http://myapp;
  7. proxy_buffering off;
  8. expires max;
  9. }

字符串
这样就解决了问题

展开查看全部

相关问题