实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)

原文链接

https://help.aliyun.com/zh/ssl-certificate/user-guide/install-ssl-certificates-on-nginx-servers-or-tengine-servers?spm=a2c4g.11186623.0.0.7ab93cb39AuLXF

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第1张图片

更新时间:2023-10-12 11:54:24

产品详情

相关技术圈

我的收藏

您可以在Nginx或Tengine服务器上安装SSL证书,实现通过HTTPS安全访问Web服务器。本文介绍如何为Nginx或Tengine服务器安装SSL证书。

重要

本文以CentOS 8.0 64位操作系统、Nginx 1.14.2为例介绍。不同版本的操作系统或Web服务器,部署操作可能有所差异,如有问题,请联系产品技术专家进行咨询,详情请参见专家一对一服务。

如果您使用的是阿里云云服务器ECS(Elastic Compute Service),必须在ECS管理控制台的安全组页面,放行80端口和443端口,否则网站访问可能出现异常。关于如何配置安全组,请参见添加安全组规则。

本文中出现证书文件名称的地方,统一使用cert-file-name进行描述。例如,本文中用到的证书文件为cert-file-name.pem,证书私钥文件为cert-file-name.key。在实际操作过程中,您必须使用正确的证书文件名称替换示例代码中的cert-file-name

本次自己的环境是:centos7.9 阿里云轻量应用服务器。

前提条件

  • 已通过数字证书管理服务控制台签发证书。具体操作,请参见购买SSL证书和提交证书申请。
  • SSL证书绑定的域名已完成DNS解析,即您的域名与主机IP地址相互映射。您可以通过DNS验证证书工具,检测域名DNS解析是否生效。具体操作,请参见DNS验证。

步骤一:下载SSL证书

注意:

阿里云/腾讯云等都是可以免费下载ssl证书的。

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第2张图片

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第3张图片

  1. 登录数字证书管理服务控制台。

  2. 在左侧导航栏,单击SSL 证书

  3. SSL 证书页面,定位到目标证书,在操作列,单击下载

  4. 服务器类型为Nginx的操作列,单击下载

  5. 解压缩已下载的SSL证书压缩包。

    根据您在提交证书申请时选择的CSR生成方式,解压缩获得的文件不同,具体如下表所示。实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第4张图片

    CSR生成方式 证书压缩包包含的文件
    系统生成选择已有的CSR 证书文件(PEM格式):默认以证书ID_证书绑定域名命名。PEM格式的证书文件是采用Base64编码的文本文件。私钥文件(KEY格式):默认以证书绑定域名命名。
    手动填写 如果您填写的是通过数字证书管理服务控制台创建的CSR,下载后包含的证书文件与系统生成的一致。如果您填写的不是通过数字证书管理服务控制台创建的CSR,下载后只包括证书文件(PEM格式),不包含证书密码或私钥文件。您可以通过证书工具,将证书文件和您持有的证书密码或私钥文件转换成所需格式。转换证书格式的具体操作,请参见证书格式转换。

个人已经下载好的证书如下:

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第5张图片

步骤二:在Nginx服务器安装证书

1.在Nginx服务器安装证书

在Nginx独立服务器、Nginx虚拟主机上安装证书的操作不同,请根据您的实际环境,选择对应的安装步骤。

这里在Nginx独立服务器上安装证书:

  1. 执行以下命令,在Nginx的conf目录下创建一个用于存放证书的目录。

    cd /usr/local/nginx/conf  #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。
    mkdir cert  #创建证书目录,命名为cert。
    

    自己本次的nginx安装目录为默认目录:

    cd /etc/nginx/
    mkdir cert
    
  2. 将证书文件和私钥文件上传到Nginx服务器的证书目录(/usr/local/nginx/conf/cert)。

    说明

    您可以使用远程登录工具附带的本地文件上传功能,上传文件。例如PuTTy、Xshell或WindSCP等。如果您使用的阿里云云服务器 ECS,上传文件具体操作,请参见本地Windows主机使用MSTSC上传文件到Windows云服务器或上传文件到Linux云服务器。

    自己本次创建的目录及证书文件如下:

    [root@hexo-blog cert]# ll -h
    total 16K
    -rw-r--r-- 1 root root 4.1K Oct 16 07:40 11010099_www.onedayxyy.cn_nginx.zip
    -rw-r--r-- 1 root root 1.7K Oct 16 07:40 www.onedayxyy.cn.key
    -rw-r--r-- 1 root root 3.8K Oct 16 07:40 www.onedayxyy.cn.pem
    
  3. 编辑Nginx配置文件nginx.conf,修改与证书相关的配置。

    1. 执行以下命令,打开配置文件。

      vim /usr/local/nginx/conf/nginx.conf
      
      #自己本次Nginx配置文件位置:
      vim /etc/nginx/nginx.conf
      

      重要

      nginx.conf默认保存在/usr/local/nginx/conf目录下。如果您修改过nginx.conf的位置,可以执行nginx -t,查看nginx的配置文件路径,并将/usr/local/nginx/conf/nginx.conf进行替换。

    2. i键进入编辑模式。

    3. 在nginx.conf中定位到server属性配置。

    4. 删除行首注释符号#,并根据如下内容进行修改。

      server {
           #HTTPS的默认访问端口443。
           #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
           listen 443 ssl;
           
           #填写证书绑定的域名
           server_name <yourdomain>;
       
           #填写证书文件名称
           ssl_certificate cert/<cert-file-name>.pem;
           #填写证书私钥文件名称
           ssl_certificate_key cert/<cert-file-name>.key;
       
           ssl_session_cache shared:SSL:1m;
           ssl_session_timeout 5m;
      	 
           #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
           #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
           ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
           ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
      
           #表示优先使用服务端加密套件。默认开启
           ssl_prefer_server_ciphers on;
       
       
          location / {
                 root html;
                 index index.html index.htm;
          }
      }
      

      实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第6张图片

    5. 执行以下命令,重启Nginx服务。

      cd /usr/local/nginx/sbin  #进入Nginx服务的可执行目录。
      ./nginx -s reload  #重新载入配置文件。
      

说明

  • 报错the "ssl" parameter requires ngx_http_ssl_module:您需要重新编译Nginx并在编译安装的时候加上--with-http_ssl_module配置。
    • 报错"/cert/3970497_demo.aliyundoc.com.pem":BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/cert/3970497_demo.aliyundoc.com.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file):您需要去掉证书相对路径最前面的/。例如,您需要去掉/cert/cert-file-name.pem最前面的/,使用正确的相对路径cert/cert-file-name.pem

在Nginx虚拟主机上安装证书

在不同的虚拟主机上安装证书,您需要执行不同的操作步骤。如果您使用的是阿里云的云虚拟主机,具体操作,请参见开启HTTPS加密访问。如果您使用的是其他品牌的虚拟主机,请参考对应的虚拟主机安装证书的操作指南。

2.可选:设置HTTP请求自动跳转HTTPS。

如果您希望所有的HTTP访问自动跳转到HTTPS页面,则可以在需要跳转的HTTP站点下添加rewrite语句。

重要

以下代码片段需要放置在nginx.conf文件中server {}代码段后面,即设置HTTP请求自动跳转HTTPS后,nginx.conf文件中会存在两个server {}代码段。

server {
    listen 80;
    #填写证书绑定的域名
    server_name <yourdomain>;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
}


#自己配置如下:
server {
    listen 80;
    #填写证书绑定的域名
    server_name www.onedayxyy.cn;
    root         /root/rsync/public;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
}

配置效果如下图所示:

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第7张图片

完整配置如下:

[root@hexo-blog ~]# cat  /etc/nginx/nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

#    server {
#        listen       80;
#        listen       [::]:80;
#        server_name  onedayxyy.cn;
#        #root         /usr/share/nginx/html;
#        root         /root/rsync/public;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        error_page 404 /404.html;
#        location = /404.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#        location = /50x.html {
#        }
#
#        #将所有HTTP请求通过rewrite指令重定向到HTTPS。
#       rewrite ^(.*)$ https://$host$1;
#       location / {
#               index index.html index.htm;
#       }
#
#    }

# Settings for a TLS enabled server.
#
    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  www.onedayxyy.cn;
        root         /root/rsync/public;

        ssl_certificate "cert/www.onedayxyy.cn.pem";
        ssl_certificate_key "cert/www.onedayxyy.cn.key";

        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        #ssl_ciphers HIGH:!aNULL:!MD5;
        #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
        #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }


    }

  server {
    listen 80;
    #填写证书绑定的域名
    server_name www.onedayxyy.cn;
    root         /root/rsync/public;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
  }


}

[root@hexo-blog ~]#

修改完成后,按Esc键、输入**:wq并按Enter**键,保存修改后的配置文件并退出编辑模式。

执行以下命令,重启Nginx服务。

cd /usr/local/nginx/sbin  #进入Nginx服务的可执行目录。
./nginx -s reload  #重新载入配置文件。

步骤三:验证SSL证书是否安装成功

证书安装完成后,您可通过访问证书的绑定域名验证该证书是否安装成功。

https://yourdomain   #需要将yourdomain替换成证书绑定的域名。

这里输入:

www.onedayxyy.cn或者http://www.onedayxyy.cn或者https://www.onedayxyy.cn都可以正常访问我的网站。

如果网页地址栏出现小锁标志,表示证书已经安装成功。

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第8张图片

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

微信二维码
x2675263825 (舍得), qq:2675263825。

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第9张图片

微信公众号
《云原生架构师实战》

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第10张图片

个人博客站点

http://onedayxyy.cn/

语雀

https://www.yuque.com/xyy-onlyone

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第11张图片

csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第12张图片

知乎

https://www.zhihu.com/people/foryouone

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第13张图片

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

实战:在Nginx服务器安装SSL证书并配置强制跳转https-2023.10.16(测试成功)_第14张图片

你可能感兴趣的:(nginx,服务器,ssl)