HTTP协议以明文方式发送内容,不提供任何方式的数据加密。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

申请SSL证书

这边我在腾讯云申请了免费证书,有效期一年。这里需要注意下,这亚洲诚信机构颁发的免费证书只能一个域名使用,子域名那些需要另外申请。
截屏2020-09-28 上午8.28.04.png
然后填写完相关信息后,点击下一步即可申请。
截屏2020-09-28 上午8.29.51.png
差不多一个小时内就会审核通过。

通过后,在证书列表里,下载你申请的证书。
截屏2020-09-28 上午8.31.44.png
下载解压后,里面会有多个文件夹。接下来我们只需要用到Nginx文件夹里的内容。
截屏2020-09-28 上午8.33.41.png

安装Nignx

因为我配置过程中出现了Nignx缺失模块的情况,所以需要重新下载安装包覆盖一下。这里就简单讲一下Nignx的安装和覆盖的方法。

首先需要先安装一下 openssl

  1. yum -y install openssl openssl-devel

安装成功后,下载Nignx安装包进行解压安装。

# 下载Nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.6.2.tar.gz

# 解压
tar zxvf nginx-1.6.2.tar.gz

# 进入安装包目录
cd nginx-1.6.2

# 编译安装
./configure
./configure --with-http_ssl_module
make

如果你还没安装过Nignx的话,你再执行下列命令就完成安装。

make install

如果你安装过只想覆盖的话,你首先需要先把原来的Nignx备份一下。

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

然后将新的Nignx覆盖旧安装目录。

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

如果报错的话,就执行下列语句。

cp -rfp objs/nginx /usr/local/nginx/sbin/nginx

安装或覆盖成功后,可通过下列命令测试一下Nignx

/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

配置Nignx

首先将我们下载的证书中Nginx文件夹中两个文件放置到Nignx配置文件同路径下。默认安装的话Nignx配置文件路径是 /usr/local/nginx/conf ,你可以可通过下列命令查找安装路径。

whereis nginx

我是用FileZilla进行传输文件。
截屏2020-09-28 上午8.50.28.png
紧接着,我们需要通过编辑nginx.conf来配置Nginx,你可以使用FileZilla拷贝一份到电脑本地,用编辑器编辑后再去覆盖,也可以输入下列命令进行编辑。

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

下面是我的配置文件,都加上对应的注释了。
server_name 换成你的域名,然后 ssl_certificatessl_certificate_key 换成你刚刚拷贝进来的证书名。


#user  nobody;
#Nginx进程,一般设置为和CPU核数一样
worker_processes  1;

#错误日志存放目录
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#进程pid存放位置
#pid        logs/nginx.pid;


events {
    # 单个后台进程的最大并发数
    worker_connections  1024;
}


http {
    #文件扩展名与类型映射表
    include       mime.types;
    #默认文件类型
    default_type  application/octet-stream;

    #设置日志模式
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #nginx访问日志存放位置
    #access_log  logs/access.log  main;

    #开启高效传输模式
    sendfile        on;
    #减少网络报文段的数量
    #tcp_nopush     on;

    #保持连接的时间,也叫超时时间
    keepalive_timeout  65;

    #开启gzip压缩
    #gzip  on;


    #侦听443端口,这个是ssl访问端口
    server {
       listen       443;
       server_name  ouduidui.cn;

       #定义服务器的默认网站根目录位置
       root html;  

       #设定本虚拟主机的访问日志
       #access_log  logs/nginx.access.log  main;

       # 这些都是腾讯云推荐的配置,直接拿来用就行了,只是修改证书的路径,注意这些路径是相对于/usr/local/nginx/conf/nginx.conf文件位置
       ssl on;
       ssl_certificate 1_ouduidui.cn_bundle.crt;
       ssl_certificate_key 2_ouduidui.cn.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;
       }
    }
    server{
        # 80端口是http正常访问的接口
        listen 80;
        server_name ouduidui.cn;
        # 在这里,我做了https全加密处理,在访问http的时候自动跳转到https
        rewrite ^(.*) https://$host$1 permanent;
    }
}

配置完后,测试一下Nginx。

/usr/local/nginx/sbin/nginx -t

成功后,就重启一下Nignx。
这里需要注意下,导入新的证书后需要重启而不是重载, nginx -s reload 是普通修改配置重载。

# 停止nginx
nginx -s stop
# 启动
nginx