nginx 使用 proxy_pass 和 $http + CloudFlare 进行重定向循环

nginx 使用 proxy_pass 和 $http + CloudFlare 进行重定向循环

我的 nginx 配置运行良好,直到我添加强制使用 HTTPS 的重定向。重定向前的工作配置是:

server {
  listen 80;
  listen 443 default_server ssl;
  server_name my-domain.com www.my-domain.com;
  client_max_body_size 5M;

  location / {
    proxy_pass http://localhost:3000;
  }
}

我在服务器的 3000 端口上运行一个应用程序,我想在我的域的 80 端口和 443 端口(http 和 https)上提供它。但是,当用户尝试通过 HTTP 访问它时,我还想将用户重定向到 HTTPS。我使用了这个答案设置方法:

server {
  listen 80;
  server_name my-domain.com www.my-domain.com;
  client_max_body_size 5M;
  return 301 https://$server_name$request_uri;
}

server {
  listen 443 default_server ssl;
  server_name my-domain.com www.my-domain.com;
  client_max_body_size 5M;

  location / {
    proxy_pass http://localhost:3000;
  }
}

但这会导致重定向循环。我承认我对 nginx 还比较陌生,所以如果有人能给我提供一些可以解释这一点的资源,我将不胜感激。我猜这与 location 和/或 proxy_pass 的使用有关,但仔细阅读文档并没有得到任何更深入的见解。

另外要注意的是,该应用程序是通过 CloudFlare 发送的。

答案1

问题已解决。我坚持使用原来的 nginx 配置,并使用 CloudFlare 页面规则强制使用 HTTPS。

使用的规则是:

http://*gistbook.io/*=> 始终使用 HTTPS

相关内容