为Nginx服务器安装SSL证书实现站点的HTTPS访问

为Nginx服务器安装SSL证书实现站点的HTTPS访问

知识分子没文化
2021-01-26 / 0 评论 / 1,163 阅读 / 1,279 字数 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年10月16日,已超过935天没有更新,如存在内容错误、图片加载失败、链接失效等问题,请留言反馈,博主将在第一时间进行修改。

目录:

环境说明:

Linux:ubuntu 20.0.4

nginx:1.18

首先,你得有域名的证书文件,如果还没有,就得要申请了,如果要求不高只要单域名证书的话,到购买域名的服务商那里就能免费申请到,本文以阿里云的单域名证书为例来进行说明。

1. 查看nginx是否支持SSL

使用命令查看nginx版本:

nginx -V

查看输出结果,如果有显示--with-http_ssl_module,则说明支持安装SSL证书,如果没有显示,则需要重新下载nginx源码重新编译安装SSL模块

2. 申请并下载SSL证书

一般对于个人用户来说,第三方机构颁发的免费DV证书即可满足要求,比如阿里云腾讯云都可以申请到为期一年的免费SSL证书(前提是在平台上买了域名)。要是对于信息安全有更高要求的用户或者企业来说,就得使用付费的SSL证书了。这里以阿里云的免费SSL证书为例说明:

首先登陆阿里云,前往阿里云SSL证书购买页面,按如图设置,使最后的价格为0:

01

点击购买,购买完成之后,自动跳转到SSL证书控制台,然后就可以为所购买的域名申请SSL证书了,申请过程很简单,照着提示做就可以,申请之后会提交审核,审核速度也很快,一般5分钟左右最长不超过10分钟就能审核成功。

完毕后,即可在SSL证书控制台下载SSL证书:

02

选择nginx,下载即可,记住下载的位置,等会上传时要用

3. 上传证书

先在服务器上创建一个放SSL证书的目录,这里以/etc/nginx/ssl为例,当然你也可以改成其他目录:

# 创建目录
sudo mkdir /etc/nignx/ssl

然后将下载好的证书文件使用Ftp工具上传到这个文件夹,这里推荐用XSHELLFileZilla等FTP工具,上传之后如图:

03

4. 安装证书

编辑网站的Nginx配置文件,我的目录是/etc/nginx/sites-enabled,这里根据自己的实际情况来换成自己的目录:

sudo nano /etc/nginx/nginx.conf

04

在配置文件中定位到站点的配置信息,在其中添加以下server配置信息,并按照注释修改其中部分站点信息:

#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 80;
    #配置HTTPS的默认访问端口为443,如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    listen 443 ssl;
    #如果您使用Nginx 1.14.0及以下版本,请使用listen 443和ssl on代替listen 443 ssl。

    #需要将yourdomain.com替换成证书绑定的域名。
    server_name yourdomain.com; 

    root html;          #站点目录更改成自己的
    index index.html index.htm;

    #需要将cert-file-name.pem替换成已上传的证书文件的名称。
    ssl_certificate /etc/nginx/ssl/cert-file-name.pem;
    #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
    ssl_certificate_key /etc/nginx/ssl/cert-file-name.key;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DHE;
    #表示使用的TLS协议的类型。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on;

     #其他的配置信息···
}

更改完成后,ctrl + o保存,ctrl + x退出,回到终端界面,然后重启Nginx服务:

sudo nginx -s reload

重启完成后,验证安装是否成功,在访问网址前方加入:https://,回车访问:

05

原来地址栏前面的“不安全”字样变为了一把绿色的小锁,说明SSL证书安装成功

5. 设置HTTPS强转

经过上面的设置后,网站虽然可以用HTTPS访问,但是每次都得网址前面手动添加HTTPS://字样,否则就是默认HTTP方式访问,那么我们可以设置一下,使网站在用HTTP方式访问时都能自动跳转到更安全的HTTPS方式。

下面提供了三种方式来实现,任选一种在配置文件中添加相应代码即可,添加完别忘了重启nginx服务。

# 1.利用497状态码跳转,在一个站点只允许 https 访问时, 如果使用 http 访问会报出497错误码,所以可以利用497状态码重定向到 https:
error_page 497  https://$host$uri?$args;

# 2.
if ($server_port = 80){
    return 301 https://$host$request_uri;
}

# 3.
if ($scheme = http) {
    return 301 https://$host$request_uri;
}

此篇博客仅限单域名证书的申请安装,但是泛域名证书的话在域名服务商那里就是付费的,当然也有免费的,比如大名鼎鼎的Let's encrypt证书,参考这里:免费的泛域名证书——Let's encrypt证书 - Roookie博客 | 记录 · 收纳 · 分享 (wlplove.com)

1

评论 (0)

取消