美文网首页后端开发底层技术
青云 HTTPS 服务的两种配置方案

青云 HTTPS 服务的两种配置方案

作者: michael_jia | 来源:发表于2015-08-25 21:04 被阅读3842次

8月份要把服务迁移到青云上,负责搭建 HTTPS 服务的Daniel苦恼两天有余,配置 HTTPS 时一直报告下述问题:

400 Bad Request
The plain HTTP request was sent to HTTPS port

这是什么问题?

这个问题是我们尝试在云服务上搭建 HTTPS 时出现的,要清楚复述这个问题有点复杂,各位直接移步看 stackoverflow 上的 Dealing with nginx 400 “The plain HTTP request was sent to HTTPS port” error 这个例子吧,相信你会有很多收获。

以下这段会帮助你理解其实质:

The error says it all actually. Your configuration tells Nginx to listen on port 80 (HTTP) and use SSL. When you point your browser to http://localhost, it tries to connect via HTTP. Since Nginx expects SSL, it complains with the error.

HTTPS是什么?

HTTPS: HTTP over TLS, HTTP over SSL, and HTTP Secure.
简单地说,HTTPS 就是在一条由 SSL/TLS 加密的连接(connection)上传输HTTP数据,目的是防止HTTP内容被偷听和篡改。
换言之,HTTPS在一个不安全的网络上创建了一个安全通道。
HTTP数据有一个加密和解密的过程。理解了这一点你就理解了在云上配置的两种方案。

我们应用HTTPS做什么?

无他,就是为了防止内容被篡改。

nginx的配置

一定要熟悉nginx的配置,否则,你会到处乱搜解决方法,不是怀疑这儿配错了,就是怀疑那儿配错了。

搭建负载均衡器

有两个方案可以实现HTTPS服务。方案一就是由负载均衡器(LB = Load Balancer)来实现,方案二由后端WebServer来实现。

方案一:LB实现

请按照青云的 搭建 HTTPS 协议的负载均衡器指南 的要求进行 HTTPS 协议搭建。因为我们使用路由器,情况有些许不同,要点:

  1. LB配置HTTPS
    将你的服务器证书的“证书内容” 和 “私钥”配好,监听HTTPS协议,443端口。
  2. 路由器配置
    在路由器上将443映射到后端的80端口(HTTP)。
  3. 后端nginx配置
    这里只需要配置HTTP服务即可,因为解密数据的任务由LB承担了,这里自然不需要配置HTTPS了。
    注:Daniel就是折在这里了,他在路由器里将443映射到后端的443 ssl,路由器过来的数据已经解密了,已经是plain HTTP request,还要发送到HTTPS port(443)上,当然就会 complain with the error了。
青云HTTPS服务的两种配置方案

方案二:后端WebServer实现

  1. LB配置TCP
    监听TCP协议,443端口。
  2. 路由器配置
    在路由器上将443映射到后端的443端口(HTTPS)。
  3. 后端nginx配置
    按照标准的HTTPS服务进行配置。如下:
server {
        listen 80;
        listen 443 ssl;
        server_name  c.example.com;

        ssl_certificate /usr/local/nginx/conf/app/example/example.crt;
        ssl_certificate_key /usr/local/nginx/conf/app/example/example.key;

        root /home/app/c.example.com/;

        location ~ \.(htm|html)$ {
            add_header Cache-Control no-store;
            expires -1;
        }

        location / {
            index index.html;
        }

    access_log /home/logs/c.example.com/access.log access;
    error_log /home/logs/c.example.com/error.log info;
}

相对于“原始的nginx配置”的改进:

  • 80和443在一个 server 里面即可(保持简单性、一致性)。
  • index里的index.php删除,因为网站根本不提供php服务。(不该有的东西一点都不要有,保持简单、简洁
  • 顺序调整(增强可理解性)。

附:原始的nginx配置

原始的nginx配置

建议

为何使用https?

我们使用https的初心是防止HTTP内容被篡改,因为做正常CPS业务的导航网站常遇到被流氓推广者强行篡改内容从而劫持流量进行跳转的情况。

跳转地址:http://c.example.com => https://c.example.com

协议切换
  • zz
    js 负责跳转,js 文件中类似语句https://c.example.com/shopid.html?uid=,其中https即指明使用https协议。

    js文件位于www网站/$version/toolbar/js/toolbar.js。当前3.7和3.9版本在正常维护。

  • sm
    由软件提供跳转,需要修改配置文件 unionmap.xml,软件重启后会下载该配置文件的 zip 包(2015-09-07)。

    该配置文件在 http://click.example.com/admin 后台的商城管理下生成,当下仅点击生成新的商城联盟映射表即可,其他无需操作。

    注:由于几经演变,事先需修改 db_cashback 的 t_u_union 表:update t_u_union set un_px_url=replace(un_px_url,'https','http'); 而无需通过后台页面功能修改任何内容。

  • unionmap.xml.sample


    unionmap.xml.sample

相关文章

  • 青云 HTTPS 服务的两种配置方案

    8月份要把服务迁移到青云上,负责搭建 HTTPS 服务的Daniel苦恼两天有余,配置 HTTPS 时一直报告下述...

  • 微服务笔记22如何管理服务配置

    服务配置分为以下几种:本地配置,配置中心两种。 本地配置 服务配置最简单的方案就是把配置当成代码看待,每次更新配置...

  • SDN 网络直通服务,让你的容器性能提升百倍

    青云QingCloud 为基于 VM 部署的容器应用提供了一套简便易行的网络配置方案——SDN 网络直通服务 (S...

  • 2go get 运行慢的问题处理

    https://goproxy.io/zh/ ------- 以下是centos7 服务器的配置方案 ------...

  • Nodejs配置Https服务

    前言   看过我小程序入门系列教程的小伙伴们都应该知道小程序所访问的API接口都必须是https,虽然这种事情是后...

  • Nginx 配置https服务

    一、HTTPS 服务 二、生成秘钥和CA证书 生产环境上可以直接从第三方机构获取CA证书,跳过这一步。 步骤一:生...

  • nginx 配置 HTTPS 服务

    编译自:[configuring_https_servers][1][1]: http://nginx.org/e...

  • springboot https服务配置

    说明 能够使用到https服务,一般是web服务器或者网关服务器。 步骤1 生成证书文件 此处用的是自签名证书。 ...

  • GitHub SSH 公钥

    Git提交时有Https和SSH两种验证方式,接下来 介绍简单粗暴的SSH配置方案 1.设置git全局用户信息 保...

  • Electron-vue解决跨域

    方案一: 在.electron-vue/dev-runner.js文件配置代理 方案二: 服务端配置cros,前端...

网友评论

    本文标题:青云 HTTPS 服务的两种配置方案

    本文链接:https://www.haomeiwen.com/subject/ybexcttx.html