让你的网站免费支持 HTTPS 及 Nginx 平滑升级

本文介绍如何申请免费的HTTPS证书,并使用Nginx配置HTTPS服务,包括Nginx的平滑升级方法。

为什么要使用 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

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

安装 Nginx 可能大家都会,不会的可以看 从零开始学 Java - CentOS 下安装 Nginx,但是平滑升级 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

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

备份原 Nginx 执行脚本

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

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

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

进行平滑升级,命令:

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

看到已经从 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_certificatessl_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 方式的传输对我们网站来说应该是提高了一些安全性的,况且这种方式又很简单,可以试着搞一搞。

<think>首先,用户的问题是关于Nginx平滑升级版本的,具体是“如何在不停止服务的情况下升级Nginx到新版本”。我需要参考提供的引用内容来构建回答。 引用内容总结: - [^1]:介绍了Nginx平滑升级的意义,包括新功能、性能优化和安全修复的重要性。 - [^2]:解释了Nginx平滑升级的原理:启动新进程而不停老进程,老进程处理完剩余请求后停止。 - [^3]:提供了Red Hat系统上的Nginx平滑升级步骤,包括命令示例。 - [^4]:描述了结束工作进程的步骤,完成升级。 用户的问题核心是操作步骤,所以我应该提供一个清晰的、逐步的指南,基于这些引用。 系统级指令: - 所有行内数学表达式必须用$...$格式。但在这个问题中,没有数学表达式,所以可能不需要。 - 独立公式必须用$$...$$格式并单独成段。同样,这里没有公式。 - LaTeX语法正确:确保任何数学表达正确。 - 使用中文回答:整个回答要用中文。 - 生成相关问题:在回答后,添加相关问题。 - 回答中引用的段落末尾自然地添加引用标识:如[^1],[^2]等。 - 回答结构清晰:帮助用户逐步解决问题,保证真实可靠。 用户可见层: - 回答结构清晰:逐步解决问题。 - 参考站内引用:使用提供的引用内容。 我的回答结构: 1. **引言**:简要解释Nginx平滑升级的意义,基于[^1]。 2. **原理概述**:解释平滑升级的工作原理,基于[^2]。 3. **详细操作步骤**:提供逐步指南,整合[^3]和[^4]的命令。 4. **注意事项**:提醒用户注意事项,如备份、测试等。 5. **相关问题**:生成相关问题。 操作步骤需要详细: - 从[^3]:包括下载新版本、编译、启动新进程等。 - 从[^4]:结束旧进程的命令。 确保回答真实可靠:基于提供的引用,避免添加外部知识。 生成相关问题:基于主题,如升级失败处理、优化等。 最终回答用中文。</think>### Nginx平滑升级版本操作指南 在Web服务运维中,Nginx平滑升级允许您在不中断服务的情况下升级到新版本,这对于生产环境至关重要。平滑升级的原理是:启动新Nginx进程处理新请求,同时旧进程继续处理现有请求直至完成,然后优雅退出[^2]。这确保了服务的连续性和稳定性。本文将基于Linux系统(如Red Hat或类似发行版),提供详细的逐步操作指南。操作前,请务必备份配置文件和数据,并在测试环境中验证,以避免潜在风险。 #### 一、平滑升级的意义 Nginx平滑升级能引入新功能、性能优化和安全修复,同时避免服务中断。这在处理高流量网站时尤为关键,因为任何停机都可能导致用户体验下降或业务损失[^1]。 #### 二、平滑升级原理 - **核心机制**:在不停掉旧进程的情况下,启动新进程。旧进程负责处理剩余请求,但不再接受新请求;新进程接管新请求;旧进程处理完毕后自动停止[^2]。 - **信号控制**:使用Linux信号(如`USR2`、`QUIT`)管理进程切换,确保无缝过渡。 #### 三、详细操作步骤(以升级Nginx 1.25.1为例) 以下步骤假设您已具备root权限,且Nginx安装在`/apps/nginx`目录(路径可能因环境而异,请根据实际调整)。操作前,确保系统已安装编译工具(如gcc、make)。全程服务不中断,用户请求不受影响。 1. **准备工作** - **备份配置和数据**: ```bash cp -r /apps/nginx/conf /apps/nginx/conf_backup # 备份配置文件 cp -r /apps/nginx/html /apps/nginx/html_backup # 备份网站数据 ``` - **下载新版本Nginx**: 访问[Nginx官网](https://nginx.org/en/download.html)下载最新稳定版源码,例如: ```bash wget https://nginx.org/download/nginx-1.25.1.tar.gz tar -zxvf nginx-1.25.1.tar.gz cd nginx-1.25.1 ``` - **编译新版本(添加所需模块)**: 使用旧配置参数(通过`nginx -V`查看),避免配置丢失。例如: ```bash ./configure --prefix=/apps/nginx --with-http_ssl_module # 添加旧版模块,如SSL make # 编译但不安装 ``` 注意:如果升级仅需添加新模块,可复用旧二进制;否则,编译新版本[^2]。 2. **启动新进程并平滑切换** - **替换旧二进制并发送信号**: ```bash mv /apps/nginx/sbin/nginx /apps/nginx/sbin/nginx.old # 备份旧二进制 cp objs/nginx /apps/nginx/sbin/nginx # 复制新二进制 kill -USR2 `cat /apps/nginx/logs/nginx.pid` # 发送USR2信号,启动新主进程[^3] ``` 执行后,系统会并行运行新旧进程: ```bash ps aux | grep nginx # 查看进程,应显示新旧master进程及worker进程[^3] ``` 输出示例: ``` root 8814 0.0 0.2 42460 3760 ? Ss 16:58 0:00 nginx: master process (old) nginx 8957 0.0 0.2 77172 4724 ? S 17:23 0:00 \_ nginx: worker process root 12014 0.0 0.3 42448 5512 ? S 17:32 0:00 nginx: master process (new) nginx 12015 0.0 0.2 77192 4904 ? S 17:32 0:00 \_ nginx: worker process ``` - **验证新进程运行**: 发送测试请求或检查日志: ```bash curl -I http://localhost # 确认服务正常 tail -f /apps/nginx/logs/error.log # 监控错误 ``` 如果新进程未启动(如[^3]所述),重启服务: ```bash systemctl restart nginx # 或 service nginx restart ``` 3. **停止旧进程完成升级** - **优雅退出旧进程**: 等待旧worker处理完所有请求(可通过监控日志或连接数确认),然后发送QUIT信号: ```bash kill -QUIT `cat /apps/nginx/logs/nginx.pid.oldbin` # 停止旧master进程[^4] ``` 再次检查进程: ```bash ps aux | grep nginx # 应仅剩新进程[^4] ``` 输出示例: ``` root 104103 0.0 0.1 48640 3884 ? S 22:15 0:00 nginx: master process (new) nobody 104104 0.0 0.0 49088 2016 ? S 22:15 0:00 \_ nginx: worker process ``` 4. **清理和验证** - **删除备份**: ```bash rm /apps/nginx/sbin/nginx.old # 可选,清理旧二进制 ``` - **检查版本**: ```bash nginx -v # 应显示新版本号 ``` #### 四、注意事项 - **兼容性问题**:新版本可能引入配置变更,升级前测试`nginx -t`验证配置。 - **回滚方案**:如果升级失败,用备份二进制替换新文件,并重启旧进程。 - **信号说明**:`USR2`用于启动新进程,`WINCH`可让旧worker优雅退出(但非必须),`QUIT`完全停止旧进程[^2][^4]。 - **性能监控**:升级后观察CPU/内存使用,确保无资源泄漏。 - **系统要求**:适用于Linux(如Red Hat、CentOS、Ubuntu),Windows不支持平滑升级。 通过以上步骤,您可以在服务不中断的情况下完成Nginx升级。如果遇到问题,参考Nginx官方文档或社区资源。此方法已在生产环境中广泛应用[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值