在Nginx服务器上强制SSL时重定向循环

前端之家收集整理的这篇文章主要介绍了在Nginx服务器上强制SSL时重定向循环前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近我一直在尝试使用Nginx重定向到HTTPS,但是在我尝试在浏览器中访问我的网站后,我一直在获得重定向循环.这是我的完整服务器块配置文件

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    listen 443 ssl;

    root /var/www;
    index index.PHP index.html index.htm home.html contact.html projects.html;

    # Make site accessible from http://localhost/
    server_name melone.co;
    return 301  https://$host$request_uri;
    ssl_certificate /path/to/ssl;
    ssl_certificate_key /path/to/ssl;


    location / {
        # First attempt to serve request as file,then
        # as directory,then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        proxy_set_header        X-Forwarded-Proto $scheme;
    }
    error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        root /var/www;
    }

    location ~ \.PHP${
        fastcgi_split_path_info ^(.+\.PHP)(/.+)$;

        fastcgi_pass unix:/var/run/PHP5-fpm.sock;
        fastcgi_index index.PHP;
        include fastcgi_params;
    }

}

搜索后我发现返回301 https:// $host $request_uri;这将是最简单的方法.

所以我将它实现到我的配置文件中,然后运行sudo service Nginx restart.然后我去了我的浏览器,我得到了一个重定向循环.一旦我删除了那一行代码,它就消失了.所以我认为我真正想要的是一种更有效的重定向到SSL的方法.

任何帮助,将不胜感激.谢谢

最佳答案
就目前而言,您将所有流量重定向到https,这对于http流量很有用,但对于https流量来说却毫无意义,并导致重定向循环.现在发生的事情如下:http – > https – > https – > https – > https – > https …等等,直到你的浏览器告诉你,“这就够了,我们不会成功”.

您希望实现的是将http流量重定向到https,并处理https流量(就像之前使用http流量一样).

因此,您需要将配置拆分为两个服务器指令:一个用于http(应该执行重定向),另一个用于https,它将处理流量.

看看这个例子:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name melone.co;
    return 301 https://$host$request_uri;
}

将此服务器块添加到您的配置中,删除现有服务器块中的相应行,并获利!

原文链接:https://www.f2er.com/nginx/435218.html

猜你在找的Nginx相关文章