Nginx配置SSL证书
阿里云官方 在Nginx/Tengine服务器上安装证书
一)、下载并设置证书
1)、在nginx的conf目录下新建名为cert的目录,用于存放SSL相关文件
cd /usr/local/nginx/confmkdir 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 -Vnginx 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
以上是 Nginx配置SSL证书 的全部内容, 来源链接: utcz.com/z/512317.html