HTTP到HTTPS Nginx的重定向太多



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

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;
}
}

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

由于您使用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;
}
}

我试过

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;
}

附言:对不起我的英语:(

Kushal的推理是正确的。由于您在Cloudflare和您的源之间使用"灵活"SSL,因此您进入了这个重定向循环。

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

进入Cloudflare的Dashboard,选择Crypto,然后选择满足您需求的其他SSL选项。我使用完整(严格),因为我已经通过let's encrypt安装了证书。

我还建议使用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签署)。Cloudflare将通过HTTPS进行连接,并在每个请求上验证证书。

Kushal的回答是正确的。我和你有同样的问题。

我尝试了两种解决方案:

  1. 从Kushal获取配置
  2. 在Cloudflare中从";灵活的";至";完全(严格)";并保持当前配置

最新更新