阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

网站支持 HTTPS 及 Nginx 平滑升级

190次阅读
没有评论

共计 4405 个字符,预计需要花费 12 分钟才能阅读完成。

为什么要使用 HTTPS ?

首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密。简单点说在 HTTP 协议下你的网站是光着身子在奔跑,但到了 HTTPS 下你穿了一件衣服,别人看不到你的肌肉了(当然,这好像不是好事,不重要),更安全了一点点,就大概这个意思。

SSL 依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。采用 HTTPS 的服务器必须从证书颁发机构 CA(Certificate Authority)申请一个用于证明服务器用途类型的证书,当然一般都有收费,而且不便宜,其实你也可以通过 OpenSSL 自己造一个证书,这样有一个弊端是大家都不信任你造的证书。那怎么办?

你必须知道的步骤

通过上面的简单介绍你应该知道了,要想你的网站支持 HTTPS,就必须有一个 被信任的证书,那这个证书就必须由证书颁发机构(如 VeriSign、Microsoft 等)颁发的,否则你就会遇到如打开 12306.cn 这样的 您的连接不是私密连接 的尴尬。

网站支持 HTTPS 及 Nginx 平滑升级

你肯定不想用户打开后,你的网站是上面这样的,身边有好多朋友买票时问过我这是什么意思?我都没办法解释给他们,哎。所以你需要要有下面几个东西:

  • 一个域名(你肯定有)
  • Web 服务器(Nginx,Apache,IIS 都行)
  • SSL 证书(最好 CA 机构颁发的)

就完了,上面三个东西可能最麻烦就是搞到一个被全世界都信任的证书了,没关系,现在我试着让你免费获取一个,注意是 免费!!!

提供免费的证书商也就那么几个,最知名的可能是 StartSSL,其他我还知道 Let’s Encrypt,不过这里我用的是国内腾讯云的。

感谢腾讯云

对于得到一个 受信任的证书 很简单,找第三方证书颁发机构购买就行了,但是一个每年大几千的证书费用对于小企业或个人来说,有点接受不了,或者是没钱。现在好了,腾讯云认证用户可以申请到赛门铁克 (Symantec) 免费的 TrustAsia DV SSL 证书了。

登录腾讯云管理平台

SSL 证书申请地址在这里:https://console.qcloud.com/ssl,点击 申请证书,会弹出下面的框:

网站支持 HTTPS 及 Nginx 平滑升级

上面显示什么 价值 1900 元 / 年,不要管,点击 确认 按钮。弹出表单你填写你要绑定的域名就行了:

网站支持 HTTPS 及 Nginx 平滑升级

接下来会验证你的域名,简单说就是验证一下这个域名是不是你的,所以你要在域名解析添加一条 CName 记录,实在不懂的话,官方也有怎么添加的文档。

网站支持 HTTPS 及 Nginx 平滑升级

一般验证过程会很快,几个小时吧,申请通过后,这时候你看到状态是 已颁发 后,就能下载证书了。

网站支持 HTTPS 及 Nginx 平滑升级

下载下来你打开文件会看到 Nginx,Apache,IIS 三个文件夹,里边放的就是对应各个服务器的证书。到这里,整个证书申请流程就算完了,接下来就是配置 Web 服务器来支持网站的 HTTPS 访问了。我这里用的 Nginx 演示。

Nginx 平滑升级以支持 HTTPS

要想让 Web 服务器支持 HTTPS,首先你的服务器肯定要支持 SSL,所以我们先检查 Nginx 是否支持 SSL:

/usr/local/nginx/sbin/nginx -V

网站支持 HTTPS 及 Nginx 平滑升级

通过命令显示信息,我们看 configure arguments 中是否有 -with-http_ssl_module 字样,如果像我这样没有的话,你就需要重新编译 Nginx 以支持 SSL 了。如果有,请跳过这步骤,直接看 Nginx 配置 HTTPS 服务 那一节。

安装 Nginx 可能大家都会,不会的可以看 CentOS 7 下安装 Nginx  (http://www.linuxidc.com/Linux/2016-09/134907.htm),但是平滑升级 Nginx 可能你没有体验过,这样说吧,在线上服务器环境下,你要支持 HTTPS 访问,但是你发现你的 Nginx 不支持 SSL,你肯定不能卸载 Nginx 重新安装时加载 SSL 模块,因为那是线上服务器。你只能在现有安装的 Nginx 下进行无痛升级以以支持 SSL,这就用到了 Nginx 的 平滑升级 概念。

找到你之前安装 Nginx 时的编译目录,如果你和我一样找不到或许删除了,那我们就需要重新下载一个 Nginx 了,当然我们是通过 wget 方式,看命令:

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz
tar -zxvf nginx-1.10.1.tar.gz
cd nginx-1.10.1

配置,加入 SSL 模块:

./configure --with-http_ssl_module
make

网站支持 HTTPS 及 Nginx 平滑升级

注意,千万不能在像安装的时候 make install 了,因为我们这是升级。

备份原 Nginx 执行脚本

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

把新版本 Nginx 编译脚本放到可执行文件目录下

cd objs/
cp nginx /usr/local/nginx/sbin/

网站支持 HTTPS 及 Nginx 平滑升级

进行平滑升级,命令:

make upgrade

网站支持 HTTPS 及 Nginx 平滑升级

这时候会输出这些信息:

/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

没问题之后接下来,查看现在目前版本及安装模块:

/usr/local/nginx/sbin/nginx -V

网站支持 HTTPS 及 Nginx 平滑升级

看到已经从 1.4.6 版本升级到了 1.10.1,而且这种升级不影响正常访问的。线上环境操作也是可以的。

Nginx 配置 HTTPS 服务

编辑配置文件:

cd /usr/local/nginx/conf
vim nginx.conf

拉到最下面,会看到 HTTPS 配置被注释掉了。嗯,这是模板,我们就在这配置。

网站支持 HTTPS 及 Nginx 平滑升级

文字版:

server {listen       443 ssl;
    server_name  www.domain.com;

    ssl on;
    ssl_certificate 1_www.domain.com_bundle.crt;
    ssl_certificate_key 2_www.domain.com.key;

    ssl_session_timeout  5m;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
    }
}

把上面的 ssl_certificate 和 ssl_certificate_key 替换成你下载下来的证书存放路径就行,记着下载下来的证书这种配置是放在 /usr/local/nginx/conf 目录下的,当然你也可以随意放。

这时候,你就可以打开浏览器访问一下试试了。正常情况 HTTPS 请求是打不开的,因为我们还没设置防火墙,记得要 开放 443 端口!,嗯,设置过防火墙就可以正常访问了吧。

其实到这里,这个服务器支持 HTTPS 请求流程已经结束了,但是你发现好多人在浏览器地址栏输入域名的时候都不输入 http:// 或 https:// 的,因为浏览器会自动帮我们加上 http:// 的,所以,这时候输入我们刚刚设置的域名其实还是没有走 https:// 请求, 那 怎么让就是输入 http:// 也走 HTTPS 呢?

很简单,Nginx 中这样配置就行啦!

server {listen  80;
    server_name  www.domain.com;

    rewrite ^(.*)$  https://$host$1 permanent;
}

我们利用 rewrite 来做跳转。监听到 80 端口的 HTTP 请求后,就转发到 HTTPS,当然还有好多处理方式。

总结一下

这篇文章讲了一下怎么申请免费的 HTTPS 证书,然后利用 Nginx 服务器来配置 HTTPS 请求访问,并其中顺手 平滑升级 Nginx,如丝般顺滑的升级,不影响正常访问。HTTPS 方式的传输对我们网站来说应该是提高了一些安全性的,况且这种方式又很简单,可以试着搞一搞。

————————————– 分割线 ————————————–

Nginx 负载均衡配置实战  http://www.linuxidc.com/Linux/2014-12/110036.htm

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

————————————– 分割线 ————————————–

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137234.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4405字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中