ERR_TOO_MANY_REDIRECTS Rails + Puma + Nginx(Docker 化)

问题描述 投票:0回答:1

我正在使用 puma 和 nginx 运行一个 dockerized Rails 应用程序,但是,当尝试从浏览器访问该应用程序时,我收到 ERR_TOO_MANY_REDIRECTS 错误。 我的 application.rb 上有

config.force_ssl = true
,这是我的 nginx conf 文件:

upstream kisoul {
  server rails:3000;
}

server {
  listen 80;
  listen 443 ssl;
  root /usr/share/nginx/kisoul;

  try_files $uri @kisoul;

  location @kisoul {
    proxy_pass_request_headers on;
    proxy_ignore_headers       Expires Cache-Control;
    proxy_set_header           Host $http_host;
    proxy_pass_header          Set-Cookie;
    proxy_set_header           X-Forwarded-Proto https;
    proxy_pass                 http://kisoul;
  }

  ssl_certificate      /etc/nginx/fullchain.pem;
  ssl_certificate_key  /etc/nginx/privkey.pem;
}

我已经尝试从rails中禁用

force_ssl
并强制通过nginx重定向,但后来我遇到了Origin标头的问题,说Origin标头(https://localhost)与request.base_url(HTTP: //本地主机)

我尝试了这里已经描述的许多不同的解决方案,但我找不到任何解决方案

ruby-on-rails docker nginx puma
1个回答
0
投票

下面的行应该修复

ERR_TOO_MANY_REDIRECTS

proxy_set_header X-Forwarded-Proto https;

看一下我最近工作的

/etc/nginx/sites-available/default
,rails + puma + nginx + let's encrypt:

upstream app {
  server unix:/var/www/mydomain/tmp/puma.sock;
}

server {
  server_name mydomain.com www.mydomain.com;

  root /var/www/mydomain/public;
  access_log /var/www/mydomain/log/nginx.access.log;
  error_log /var/www/mydomain/log/nginx.error.log;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @app;
  location @app {
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://app;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;

  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
© www.soinside.com 2019 - 2024. All rights reserved.