Nginx配置导致无限重定向循环

bri*_*der 27 ssl passenger nginx ruby-on-rails-3

所以我查看了我能找到的每个示例配置,但每当我尝试查看需要ssl的页面时,我最终都会进行重定向循环.我正在运行nginx/0.8.53和乘客3.0.2.

这是ssl配置

server  {
  listen 443 default ssl;
  server_name <redacted>.com www.<redacted>.com;
  root /home/app/<redacted>/public;
  passenger_enabled on;
  rails_env production;  
  ssl_certificate      /home/app/ssl/<redacted>.com.pem;
  ssl_certificate_key  /home/app/ssl/<redacted>.key;

  proxy_set_header  X-Real-IP  $remote_addr;
  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_set_header  X-Url-Scheme $scheme;
  proxy_redirect    off;
  proxy_max_temp_file_size 0;

  location /blog {
    rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
  }

  location ~* \.(js|css|jpg|jpeg|gif|png)$ {
    if (-f $request_filename) {
      expires      max;
      break;
    }
  }

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   html;
  }
}
Run Code Online (Sandbox Code Playgroud)

这是非ssl配置

server  {
  listen 80;
  server_name <redacted>.com www.<redacted>.com;
  root /home/app/<redacted>/public;
  passenger_enabled on;
  rails_env production;  

  location /blog {
    rewrite ^/blog(/.*)?$ http://blog.<redacted>.com/$1 permanent;
  }

  location ~* \.(js|css|jpg|jpeg|gif|png)$ {
    if (-f $request_filename) {
      expires      max;
      break;
    }
  }

  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   html;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我有任何其他信息可以帮助我诊断问题,请告诉我.

pja*_*mer 31

这是你的路线:

  listen 443 default ssl;
Run Code Online (Sandbox Code Playgroud)

将其更改为:

listen 443;
ssl on;
Run Code Online (Sandbox Code Playgroud)

我称之为旧式.还有,那个

              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_set_header  X-Url-Scheme $scheme;
              proxy_redirect    off;
              proxy_max_temp_file_size 0;
Run Code Online (Sandbox Code Playgroud)

为我做了诀窍.我现在看到我错过了你所拥有的真实IP线路,但到目前为止,这摆脱了ssl_requirement和ssl_enforcer的无限循环问题.

  • 我在Rails应用程序中使用`config.ssl = true`和nginx的ssl配置的第一个版本,最后也是无限循环.更改配置以在单独的行上使用ssl声明解决了我的问题.谢谢!!! (3认同)

Zak*_*ziz 7

我玩弄了一堆这些答案,但没有任何效果对我有用。然后我意识到,由于我使用 Cloudflare,问题可能不在服务器上,而在于 Cloudflare。瞧,当我将 SSL 设置为Full (Strict)一切正常时!

cloudflare ssl

  • 即使在 2023 年,你的回答也让我免于拔掉头发。太感谢了!! (6认同)
  • 非常感谢,我差点把头发都拔光了! (4认同)
  • 即使在 2023 年,这个答案在 9 个小时内就让两个人免于拉扯头发。荣誉 (4认同)
  • 就这样三个人吧! (3认同)
  • 这个问题快把我逼疯了!我已经使用 Let's Encrypt 设置了 SSL,所以我什至没有考虑检查 Cloudflare 的 SSL 设置。感谢分享! (2认同)

tox*_*xaq 6

我发现就是这条线

 proxy_set_header  Host $http_host;
Run Code Online (Sandbox Code Playgroud)

哪个应改为

 proxy_set_header  Host $host;
Run Code Online (Sandbox Code Playgroud)

根据nginx文档,使用'$ http_host传递"未更改的请求标头".


bri*_*itg 5

您是否尝试过使用"X-Forwarded-Proto"而不是X_FORWARDED_PROTO?

我之前遇到过这个标题的问题,它没有导致重定向,但更改此标题为我修复了它.