我有一个在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;
}
}
如果有人能指出我做错了什么,我将非常感激。
答案 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连接并验证每个请求的证书。