使用nginx设置http跳转https,报错:ERR_TOO_MANY_REDIRECTS

问题:

我想将我的所有http流量重定向到重定向到https 。 我正在使用letsencrypt 。 我添加了return 301 https://$server_name$request_uri; 将所有流量重定向到我的网站到https,但网页会报错ERR_TOO_MANY_REDIRECTS

这是我的/etc/nginx/sites-available/default文件:

server {
        listen 80 default_server;
        listen 443 ssl default_server;

        ssl_certificate /etc/letsencrypt/live/mywebsite.me/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mywebsite.me/privkey.pem;

        root /home/website/mywebsite/public;

        index index.html index.htm index.php;

        server_name mywebsite.me www.mywebsite.me;

        return 301 https://$server_name$request_uri;

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

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

解决:

您当前的配置会将http和https重定向到https。 因此,由于return语句,它变成了无限循环。 只有当连接是http时才需要return语句。 所以你将它分成两个服务器块。将配置更改为以下:

server {
        listen 80 default_server;
        server_name mywebsite.me www.mywebsite.me;

        return 301 https://$server_name$request_uri;
}

server {

        listen 443 ssl default_server;

        ssl_certificate /etc/letsencrypt/live/mywebsite.me/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/mywebsite.me/privkey.pem;

        root /home/website/mywebsite/public;

        index index.html index.htm index.php;

        server_name mywebsite.me www.mywebsite.me;

        location / {
                try_files $uri $uri/ /index.php$is_args$args;
        }

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

### HTTP重定向次数过多 错误原因 当浏览器尝试加载网页时遇到 `ERR_TOO_MANY_REDIRECTS` 的错误提示,通常是因为服务器配置不当引起的连续重定向循环。具体来说: - **HTTPHTTPS强制转换**:如果站点配置了从HTTP强制跳转HTTPS的功能,而某些设置不正确,则可能导致无休止的来回跳转[^1]。 - **应用程序内部逻辑缺陷**:对于基于Java的应用程序而言,在处理请求前通过拦截器修改URL路径或协议类型时可能出现设计上的漏洞,进而引发StackOverflowError异常以及无限次转发现象[^2]。 - **第三方服务影响**:像CloudFlare这样的CDN服务商也可能成为问题根源之一。倘若其SSL/TLS模式设定为全站加密(Full SSL),但源站并未开启相应支持的话,同样会造成持续性的重定位行为[^3]。 - **框架特定实现**:以PHP为例特别是Laravel框架下,路由定义不合理或是中间件操作失误均能引起类似的状况发生[^4]。 ### 解决方案概述 针对上述提到的各种情况,可以采取如下措施来修复该类问题: #### 配置层面调整 确保Web服务器软件(如Apache、Nginx)中的虚拟主机部分已正确定义好监听端口及对应的默认文档位置;同时确认所有涉及安全策略的部分都指向同一个最终目标地址而不是形成闭环结构。 #### 应用层面上优化 检查并修正业务代码里有关于自动转向机制的相关片段,防止因条件判断失误而导致不必要的额外跳转动作。例如在编写Servlet Filter或者Spring MVC Interceptor组件期间要格外注意这一点。 #### CDN提供商处排查 如果是借助外部网络加速平台部署项目资源文件的话,建议登录对应管理后台仔细查看当前生效的安全选项是否合理,并按照官方指南逐步排除潜在风险因素。 #### 编程语言特性利用 根据不同编程环境的特点灵活运用内置函数库所提供的工具辅助解决问题。比如PHP开发者可考虑采用header()方法手动控制响应头信息从而绕过原有流程达到预期效果。 ```php // PHP示例:直接指定状态码和Location字段终止脚本执行 <?php header("HTTP/1.1 301 Moved Permanently"); header("Location: https://example.com/"); exit(); ?> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值