我正在使用 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: //本地主机)
我尝试了这里已经描述的许多不同的解决方案,但我找不到任何解决方案
下面的行应该修复
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
}