Nginx下HTTP强制重定向至HTTPS

对于nginx来说,配置http强制重定向至https有多种多样的写法。可以直接rewrite,也可以用301重定向。但是直接拷贝网上的配置往往会出现问题,所以应该考虑网站具体的配置情况。

首先,从官方文档来看,对整个域名通过正则匹配进行rewrite,然后以此来重定向至https的链接的方法官方是不推荐的。那么首先重定向的语句就应该写成:

return 301 https://$server_name$request_uri;

接着是重定向的语句应该放在哪里的问题。

对于编译安装的nginx,如果在编译的时候没有修改 --prefix 选项,配置文件会在 /usr/local/nginx/conf/nginx.conf 。其中默认包含了两个server段,一个是开启的,监听80端口;另一个被注释掉了,监听443端口(也即TLS所需的端口)。

这两个端口分别使用各自的server段。也就是说只要将80端口server段下的站点location设置复制到443端口server段下面,这样就可以直接在80端口server段里面添加重定向语句以达到重定向的目的。

对于其他方式安装的nginx,或者自行修改过nginx.conf,那么可能不包括443端口server段。这时候可以选择像编译安装的默认配置一样,另起一个监听443端口的server段。

但是如果觉得两个 server 段过于冗长,这时候的另一种做法是在一个server段里面同时监听80和443端口。如果这时候在这个server段里面直接添加重定向语句,就会使得http/https访问都会重定向到https。

看似没有问题,但是仔细考虑一下就会发现,无论是http还是https都会无限地重定向下去。事实证明,在这种情况下Chrome会报“重定向循环”的错误。

那么明确问题之后,解决的方案就是只在访问http时重定向。配置可以这么写:

if ( $scheme = http ){
return 301 https://$server_name$request_uri;
}

这样就可以解决这一问题。

但是实际上,官方的文档中不推荐在文档中使用 if 语句(If Is Evil),所以最好的办法还是使用两个 server 段(一个监听80,另一个监听443)来解决问题。

server {
listen 80;
...
return 301 https://$server_name$request_uri;
} server {
listen 443;
...
}

欢迎转载,转载请注明出处!

独立域名博客:flywill.cn

欢迎关注公众微信号:Java小镇V

分享自己的学习 & 学习资料 & 生活

想要交流的朋友也可以加微信号备注入群:EscUpDn

Nginx下HTTP强制重定向至HTTPS的更多相关文章

  1. nginx配置http强制跳转https

    nginx配置http强制跳转https 网站添加了https证书后,当http方式访问网站时就会报404错误,所以需要做http到https的强制跳转设置. 一.采用nginx的rewrite方法 ...

  2. Ubuntu Nginx下配置网站ssl实现https访问

    最近在看  HTTP权威指南   看到介绍了HTTPS的ssl,自己就动手测试了下,将步骤记录下 HTTPS简介 什么是HTTPS?百科是这样解释的.HTTPS(全称:Hyper Text Trans ...

  3. Nginx下配置网站ssl实现https访问

    第一步:服务器环境,lnmp即Linux+Nginx+PHP+MySQL,本文中以我的博客为例,使用的是阿里云最低档的vps+免费的Linux服务器管理系统WDCP快速搭建的lnmp环境(同类产品还有 ...

  4. Nginx下配置网站SSL实现https访问本站就是用的这方法

    本文出至:新太潮流网络博客 第一步:服务器环境,lnmp即Linux+Nginx+PHP+MySQL,本文中以我的博客为例,使用的是阿里云最低档的ECS+免费的Linux服务器管理系统WDCP快速搭建 ...

  5. JavaScript实现强制重定向至HTTPS页面

    <script type="text/javascript"> var targetProtocol = "https:"; if (window. ...

  6. 【虚拟机-网关】如何在使用应用程序网关和 Nginx 的环境下实现强制 HTTPS 跳转

    背景介绍 大家在使用 Nginx 部署网站时,实现 HTTP 到 HTTPS 的强制跳转是非常容易的事情,一般可以使用rewrite 命令或者使用返回自定义 301 页面的方法对 HTTP 请求进行 ...

  7. windwos下nginx 配置https并http强制跳转https

    windwos下nginx  配置https并http强制跳转https 一.首先配置证书文件 申请证书文件,这里就不做详细过程了,直接看证书文件结果. 这是两个证书的关键文件 打开ngxin下con ...

  8. Chrome下强制http重定向到https的问题

    问题: Chrome会强制将http重定向到https,就算是在浏览器手动输入http://xxx也不可以. 解决方案: 1. 在chrome的地址栏输入chrome://net-internals/ ...

  9. Nginx 配置 http 强制跳转到 https

    个人真实配置 架构:Nginx 反向代理 + Nginx 前端(LNMP) 在 Nginx 反向代理的 虚拟机主机配置文件中,作如下配置: upstream ilexa_cn { server 192 ...

随机推荐

  1. Java接口统一样式返回模板

    Java接口统一样式返回模板 背景 在进行接口开发时,一般需要一个固定的返回样式,成功和失败的时候,都按照这种格式来进行统一的返回,这样,在与其他人进行接口之间的联调时不会显得很杂乱无章.而这种固定的 ...

  2. win7更新,360手机安装谷歌框架

    这两天把11平台被卸载了,不能打竞技场了,很伤心. 成年男子,总要找点有趣的事情去做.我准备洗心革面,好好学习.(巴拉巴拉巴拉一万字.) 首先第一件事情就是重装系统,(由于买了个假显卡,win10以上 ...

  3. Maven Eclipse 笔记

    1. 下载apache-maven-3.1.1-bin.zip SITE:http://maven.apache.org/download.cgi 2. 配置 M2_REPO= C:\Users\&l ...

  4. Java并发编程之线程池的使用

    1. 为什么要使用多线程? 随着科技的进步,现在的电脑及服务器的处理器数量都比较多,以后可能会越来越多,比如我的工作电脑的处理器有8个,怎么查看呢? 计算机右键--属性--设备管理器,打开属性窗口,然 ...

  5. 微信支付 get_brand_wcpay_request fail,Undefined variable: openid

    本文将为您描述微信H5支付,微信JSAPI支付返回支付签名验证失败的解决方法 微信JSAPI支付时报这个错误 查看错误详情 alert(JSON.stringify(res)) 微信商户平台相关设置: ...

  6. UART和RS232/RS485的关系是什么?

    串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232则是其中最简单最常用的通讯方式.但是初学者往往搞不清有关的名词如UART和RS232或RS485之间是什么关系,因为它们经常被放到语句 ...

  7. CTR@模型整体架构

    1. 推荐系统 1.1 总体框架 主要包括:样本选择.数据清洗.特征提取与选择.模型训练.在线预估和排序. 1.2 目的 帮助用户找到想要的商品,挖掘数据分布. 降低信息过载. 提高站点的点击率/转化 ...

  8. 网络安全-主动信息收集篇第二章-二层网络扫描之Netdiscover

    专用于二层发现 可用于无限和交换网络环境 主动和被动探测 主动模式:netdiscover –i 网卡名 –r IP/网络位  /   netdiscover –l IPList.txt 被动 net ...

  9. 物理CPU数、CPU核心数、进程数

    参考CSDN博客:https://blog.csdn.net/helloworld0906/article/details/90547159 一. 物理cpu数.cpu核数.线程数(逻辑cpu数)的关 ...

  10. 部署https并自动续期

    1.其它步骤参考地址https://blog.csdn.net/achenyuan/article/details/79021340https://blog.csdn.net/Dancen/artic ...