一)、下载并设置证书
1)、在nginx的conf目录下新建名为cert的目录,用于存放SSL相关文件

cd /usr/local/nginx/conf
mkdir cert

2)、修改nginx.conf文件内容,并保存退出

# 以下属性中以ssl开头的属性代表与证书配置有关,其他属性请根据自己的需要进行配置。

server {
  listen 443 ssl;
  server_name localhost;  # localhost修改为您证书绑定的域名。

  ssl_certificate cert/domain name.pem; #将domain name.pem替换成您证书的文件名。
  ssl_certificate_key cert/domain name.key; #将domain name.key替换成您证书的私钥文件名。

  ssl_session_cache    shared:SSL:1m;
  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;   # 修改protocols。
  ssl_prefer_server_ciphers on;
 
  location / {
    root html;   # 站点目录。
    index index.html index.htm;   # 添加属性。
  }
}


3)、开放443端口(阿里云安全组和服务器的443端口都要打开)
真的是傻了,搞了很久SSL证书,一直没有出现https结果,原来是没有打开443端口,之前在服务器配置SSL证书的时候,是有开放的。
真是傻了,居然忘了!
二)、可能出现的问题
1)、unknown directive “ssl” in /usr/local/nginx/conf/nginx.conf:121
问题分析:

我们配置SSL证书需要用到nginx中的SSL模块,但是我们一开始编译nginx的时候并没有把SSL模块也一起编译进去,所以导致这个问题的出现。
解决方案:

1.1 安装OpenSSL库[如果没有安装的话]

# 可通过该命令查看是否安装OpenSSL

whereis openssl

# 安装openssl

yum -y install openssl openssl-devel

1.2 将ssl模块编译进来

# 在/usr/local/nginx-1.14.2(即Nginx安装目录),执行以下命令

./configure --with-http_ssl_module

# 执行make命令,但不要执行make install,make是用来编译的,make install是安装,否则整个nginx会重新覆盖

make

1.3 备份并转移

在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序

首先我们把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可

# 备份

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

# => 输入y确定

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

# => 输入y确定


1.4 查看是否将ssl模块编译进来

# 当看到以下信息说明成功!

[root@CentOS7 sbin]# ./nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --with-http_ssl_module

1.5 重新启动nginx

cd /usr/local/nginx/sbin
./nginx -s reload

2)、nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
问题分析:

端口地址已被使用。有可能是因为nginx服务进程卡死,导致80端口被占用
解决方案:

# 查看80端口情况

lsof -i:80

# 找到对应的pid,kill掉即可

kill -9 pid

3)、nginx: [emerg] BIO_new_file("/usr/local/nginx/conf/cert/xxxx.pem") failed
解决方案:

cert文件夹要放在conf目录里面

4)、nginx: [emerg] getpwnam(“www”) failed
解决方案1:

在nginx.conf中 把user nobody的注释去掉既可
解决方案2:

# 错误的原因是没有创建www这个用户,应该在服务器系统中添加www用户组和用户www,如下命令:

/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
04-08 01:35