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. python类的__repr__方法

    python3中的类默认是新式类(继承object类). __repr__()是 Python 类中的一个特殊方法,由于 object 类己提供了该方法, 而所有 的 Python 类都是 objec ...

  2. 9i oracle数据库迁移到11G(exp)

    这个是之前生产上打算迁移的文档,后面离职了没有在停机迁移,但是测试过几次没有问题,其中需要把9I的110,120库迁移到11g一个数据库中,但是110,120库之间有相同的表名字,以及有DBLINK. ...

  3. Shiro learning - 入门案例(2)

    Shiro小案例 在上篇Shiro入门学习中说到了Shiro可以完成认证,授权等流程.在学习认证流程之前,我们应该先入门一个Shiro小案例. 创建一个java maven项目 <?xml ve ...

  4. 用node实现发送邮箱验证码

    首先,你需要注册一个支持发送的邮箱,我注册是网易邮箱,然后配置smtp. 然后,创建一个node项目,输入npm install nodemailer --save安装邮件依赖. 接着创建一个文件(s ...

  5. Django学习day2——Django安装与环境配置

    安装 Django 文章中python版本为3.65 这里以windows7为例,在pip目录下运行pip install Django就能安装django最新版本(本文为django2.2版本) 也 ...

  6. Python基础语法,他其实很贵!

    # -*- coding:utf-8 -*- # @Time :2019/7/19 11:26# @Author :ITester# @Email :1036881587@qq.com# @File ...

  7. 通俗易懂了解Vue的计算属性

    1.前言 之前在学习vue的过程中,一直没有搞明白计算属性是个怎么回事,以及为什么要有计算属性,使用计算属性有什么好处.今天花时间翻了翻官方文档,才搞清楚其中一二,现将学习心得总结记录如下. 2.为什 ...

  8. P2893 [USACO08FEB]修路

    直入主题. 农夫约翰想改造一条路,原来的路的每一段海拔是Ai,修理后是Bi花费|A_i–B_i|.我们要求修好的路是单调不升或者单调不降的.求最小花费. 数据范围:n<=2000,0≤ Ai ≤ ...

  9. Xshell6配置ssh免密码登录虚拟机

    首先先说明一下有密码的,涉及到root登陆权限的问题: 1.用超级管理员身份登录,修改 vi  /etc/ssh/sshd_config, 找到 把其中的permitRootLogin 修改成: # ...

  10. tslib1.1移植

    安装步骤: 1.准备工作确保以下软件已安装 # apt-get install autoconf(或autoconf2.13)# apt-get install automake# apt-get i ...