我有一个在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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能指出我做错了什么,我将非常感激.
小智 37
由于您使用的是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;
}
}
Run Code Online (Sandbox Code Playgroud)
inc*_*ick 11
库沙尔的推理是正确的。由于您在 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 源 CA 签名)。Cloudflare 将通过 HTTPS 连接并验证每个请求的证书。
小智 9
我试过
if ($http_x_forwarded_proto = "http") {
return 301 https://$server_name$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
但这并不总是重定向。在浏览器中手动写入地址,以 http:// 开头,nginx 不重定向。但是使用 $scheme 它甚至可以手动输入 http:// 所以(对于我的网站)总是有效的变体:
if ($scheme = "http") {
return 301 https://$server_name$request_uri;
}
Run Code Online (Sandbox Code Playgroud)
PS对不起我的英语:(
| 归档时间: |
|
| 查看次数: |
19659 次 |
| 最近记录: |