HTTP到HTTPS Nginx有太多重定向

时间:2017-01-11 05:06:05

标签: ssl nginx https

我有一个在LEMP堆栈上运行的网站。我已经在网站上启用了cloudflare。我正在为https使用cloudflare灵活SSL证书。当我在chrome中打开网站时,它显示网站重定向了你太多次,并且在firefox中检测到服务器正在以永远不会完成的方式重定向该地址的请求。我试图看到其他问题的答案,但似乎都没有解决问题。 NGINX conf文件: -

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name mydomain.com www.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
root /var/www/html;

index index.php index.html index.htm index.nginx-debian.html;

location / {
    try_files $uri $uri/ =404;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
    deny all;
}
}

如果有人能指出我做错了什么,我将非常感激。

3 个答案:

答案 0 :(得分:29)

由于您使用的是cloudflare灵活SSL,因此您的nginx配置文件将如下所示: -

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name mydomain.com www.mydomain.com;

  if ($http_x_forwarded_proto = "http") {
      return 301 https://$server_name$request_uri;
  }

  root /var/www/html;

  index index.php index.html index.htm index.nginx-debian.html;

  location / {
     try_files $uri $uri/ =404;
  }

  location ~ \.php$ {
     include snippets/fastcgi-php.conf;
     fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }

  location ~ /\.ht {
     deny all;
  }
}

答案 1 :(得分:3)

我尝试过

if ($http_x_forwarded_proto = "http") {
      return 301 https://$server_name$request_uri;
  }

但这并没有始终重定向。在浏览器中手动写入地址,开头的http://和nginx均未重定向。但是使用$ scheme甚至可以手动输入http:// 因此(对于我的网站)始终可以正常工作:

 if ($scheme = "http") {
      return 301 https://$server_name$request_uri;
  }

P.S。对不起,我的英语:(

答案 2 :(得分:1)

库沙尔的推理是正确的。由于您在Cloudflare和您的来源之间使用“灵活” SSL,因此您将进入此重定向循环。

这不是理想的选择,因为Cloudflare与您的来源之间的流量不安全。最好的选择是对流量进行加密。

进入Cloudflare的信息中心,选择“加密”,然后选择一个满足您需求的SSL选项。我使用的是完全(严格),因为我通过加密安装了证书。

我还建议您使用https://nginxconfig.io/来生成您的配置。

从Cloudflare的帮助中:

  

为什么我的网站不能通过HTTPS运行?如果您最近注册过   为Cloudflare,并且您上面的证书状态显示为“正在授权   证书”,HTTPS尚不适用于您的网站,因为   Cloudflare没有为此的证书。通常配置   付费计划大约需要15分钟,免费计划最多需要24小时。   如果在那之后没有证书,请与支持部门联系。如果   上面的状态显示“活动证书”,还有其他几个   通过HTTPS访问您的网站时可能会出现的常见问题。

     

我应该使用哪种SSL设置?此设置控制Cloudflare的   服务器连接到您的源以进行HTTPS请求。我们推荐   如果可能,请启用“完全SSL(严格)”设置。常见用例   每个都是:

     

关闭:没有访问者可以通过HTTPS查看您的网站;他们会   重定向到HTTP。

     

灵活的SSL:您甚至无法在原始服务器上配置HTTPS支持   证书对您的网站无效。访客将   能够通过HTTPS访问您的网站,但可以连接到您的来源   将通过HTTP进行。注意:您可能会遇到带有   一些原始配置。

     

完整SSL:您的来源支持HTTPS,但已安装证书   与您的域不匹配或具有自签名。 Cloudflare将连接   通过HTTPS发送到您的原始地址,但不会验证证书。

     

完整(严格):您的来源具有有效的证书(未过期且   由受信任的CA或Cloudflare Origin CA签名)。云耀斑   将通过HTTPS连接并验证每个请求的证书。