Nginx服务器添加SSL证书

芝麻凛 2021年09月24日 414次浏览

一、首先下载Nginx

进入nginx官网选择一个版本下载
image.png

下载后可通过MobaXterm将该文件上传到/usr/local目录下
image.png

二、安装Nginx需要的依赖

yum -y install gcc pcre-devel zlib-devel openssl openssl-devel gcc-c++ wget

三、解压

cd /usr/local
tar -xvf nginx-1.18.0.tar.gz

四、安装

  • 进入 nginx-1.18.0 目录
cd /usr/local/nginx-1.18.0
  • 检出
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • 编译安装
make && make install

会发现/usr/下面会多了一个nginx目录,这个目录就是nginx的执行目录

image.png

  • 查看是否开启SSL模块 (HTTPS 需要)
/usr/local/nginx/sbin/nginx -V

image.png

五、启动

  • 备份配置文件
#进入配置文件文件夹
cd /usr/local/nginx/conf

#备份配置文件
cp nginx.conf nginx.conf.back
  • 可根据需求修改配置文件信息
vim nginx.conf
  • 开放端口
#开放443端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
#重新加载防火墙
firewall-cmd --reload

阿里买的服务器,还需要在安全组配置443端口

  • 启动
#进入nginx的执行目录
cd /usr/nginx/sbin/

#相关命令
./nginx   		#启动nginx
./nginx -s stop 	#关闭nginx
./nginx -s reload	#重启nginx、重新载入配置文件

背景信息

假设已经购买了SSL证书。以CentOS 8操作系统、Nginx 1.18.0服务器系统为例进行说明。由于服务器系统版本不同,在操作过程中使用的命令可能会略有区别。

本文中出现证书文件名称的地方,统一使用cert-file-name为例进行描述。例如,本文中用到的证书文件为cert-file-name.pem、证书密钥文件为cert-file-name.key。

步骤1:下载证书到本地

  • 登录SSL证书控制台。
  • 在概览页面-我的证书, 定位到要下载的证书,单击操作列下的下载。
    image.png
    在证书下载页面,定位到Nginx服务器,单击操作列下的下载。
    该操作会将服务器证书压缩包下载到本地,并保存在浏览器的默认下载位置。
    打开浏览器的默认下载位置,解压已下载的证书压缩包文件。
    解压后将会获得以下文件:这里主要使用这两个证书文件
    image.png

步骤2:在Nginx独立服务器上安装证书

  1. 登录Nginx服务器。例如,可以使用远程登录工具(例如,PuTTY、Xshell、MobaXterm)登录服务器。
  2. 执行以下命令,在Nginx安装目录(默认为/usr/local/nginx/conf)下创建一个用于存放证书的目录(命名为cert)。
cd /usr/local/nginx/conf  #进入Nginx默认安装目录。如果修改过默认安装目录,需要根据实际配置进行调整。
mkdir cert  #创建证书目录,命名为cert。
  1. 使用远程登录工具(例如,PuTTY、Xshell)附带的本地文件上传功能,将本地证书文件和密钥文件上传到Nginx服务器的证书目录(示例中为/usr/local/nginx/conf/cert)。
  2. 编辑Nginx配置文件(nginx.conf),修改与证书相关的配置内容。
    1. 执行以下命令,打开配置文件。使用示例命令前,请注意:nginx.conf默认保存在/usr/local/nginx/conf目录下。如果修改过nginx.conf的位置,请将/usr/local/nginx/conf/nginx.conf替换成修改后的位置。
vim /usr/local/nginx/conf/nginx.conf

按i键进入编辑模式。
在配置文件中定位到HTTP协议代码片段(http{}),并在HTTP协议代码里面添加以下server配置(如果server配置已存在,按照以下注释内容修改相应配置即可)。
使用示例代码前,注意替换以下内容:

    #以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name XXXXXXXX.com; #需要将XXXXXXXX.com替换成证书绑定的域名。
    root html;
    index index.html index.htm;
    ssl_certificate cert/cert-file-name.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
    ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书密钥文件的名称。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的加密套件的类型。
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
    ssl_prefer_server_ciphers on;
    location / {
        root html;  #站点目录。
        index index.html index.htm;
    }
}

    server {
    listen 80;
    server_name XXXXXXXX.com; #需要将XXXXXXXX.com替换成证书绑定的域名。
    rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    location / {
        index index.html index.htm;
    }
}