本篇内容主要讲解“Nginx怎么使用ssl模块配置支持HTTPS访问”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Nginx怎么使用ssl模块配置支持HTTPS访问”吧!
背景:
项目开发中用到了微信小程序,但是服务器配置url必须是https,所以需要通过配置Nginx的ssl模块来支持https访问,也就是说,要做一个网站域名为 dmsdbj.com 要求通过https://dmsdbj.com进行访问.
ssl英文名为secure socket layer,安全套接字层。ssl是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输.
前提:
1. 配置ssl模块首先需要ca证书,ca证书可以自己手动颁发也可以在阿里云申请,本人在阿里云上申请的证书。(手动颁发可参考文章底部链接)
2. 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译Nginx时指定–with-http_ssl_module参数.
阿里云购买ca证书
操作步骤:
一、下载ca证书
1. 登录阿里云,选择“控制台”-“产品与服务”,在“安全(云盾)”一栏中选择“ca证书服务(数据安全)”。
2.在已经购买好的证书点击“下载”,在新打开的页面上选择“Nginx/tengine”,点击“下载证书for Nginx”。
文件说明:1. 证书文件“证书名称.pem‘',包含两段内容,请不要删除任何一段内容。2. 如果是证书系统创建的csr,还包含:证书私钥文件“证书名称.key”。( 1 ) 在Nginx的配置文件所在的目录下创建cert文件夹,并且将下载的全部文件拷贝到cert目录中。如果申请证书时是自己创建的csr文件,请将对应的私钥文件放到cert目录下并且命名为“证书名称.key”;
( 2 ) 打开 Nginx 安装目录下 conf 目录中的 Nginx.conf 文件,找到:
# https server # #server { # listen 443; # server_name localhost; # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols sslv2 sslv3 tlsv1; # ssl_ciphers all:!adh:!export56:rc4+rsa:+high:+medium:+low:+sslv2:+exp; # ssl_prefer_server_ciphers on; # location / { # # #} #}
( 3 ) 将其修改为 (以下属性中ssl开头的属性与证书配置有直接关系,其它属性请结合自己的实际情况复制或调整) :
server { listen 443; server_name localhost; ssl on; root html; index index.html index.htm; ssl_certificate cert/证书名称.pem; ssl_certificate_key cert/证书名称.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; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } }
保存退出。
( 4 )重启 Nginx。
Nginx -s reload
( 5 ) 通过 https 方式访问您的站点,测试站点证书的安装配置。 在浏览器中输入https://dmsdbj.com,如下图所示,则说明配置成功。
安装过程中遇见的问题
错误一:
Nginx: [emerg] unkNown directive "ssl" in /usr/local/Nginx/conf/Nginx.conf:151
解决方案:
出现这种错误可能是两种情况造成的:
情况一:配置文件格式不正确。
情况二:ssl模块并未被安装
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译Nginx时指定–with-http_ssl_module参数,这种情况也会导致错误二的出现。
解决方案:
Nginx缺少http_ssl_module模块,编译安装的时候带上--with-http_ssl_module配置就行了,但是现在的情况是我的Nginx已经安装过了,怎么添加模块,其实也很简单,往下看: 做个说明:我的Nginx的安装目录是/usr/local/Nginx这个目录,我的源码包在/usr/local/src/Nginx-1.3.6目录
(1)切换到源码包:
cd /root/Nginx-1.13.6
(2)配置信息:
./configure --prefix=/usr/local/Nginx --with-http_stub_status_module --with-http_ssl_module
(3)配置完成后,运行make进行编译,千万不要进行make install,否则就是覆盖安装。
mark
(4)然后备份原有已经安装好的Nginx
cp /usr/local/Nginx/sbin/Nginx /usr/local/Nginx/sbin/Nginx.bak
(5)停止Nginx,正常命令直接 Nginx -s stop就可以
Nginx -s stop
如果关不掉,就直接kill掉进程。ps aux | grep 进程名 查看进程占用的pid号。
ps aux|grep Nginx
杀掉查出来的pid就可以了,kill -9 pid 命令用于终止进程。必须先kill掉root对应的pid才能进行下面的三个nobody的pid。
kill -9 10922 kill -9 28276 kill -9 28277 kill -9 28278
cp ./objs/Nginx /usr/local/Nginx/sbin/
(7)启动Nginx
Nginx
(8)通过下面的命令查看是否已经加入成功。
Nginx -v
错误二:
Nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/Nginx/conf/Nginx.conf:148
解决方案:
出现这种情况的解决方案参考错误一的第二种情况的解决方案即可。
错误三:
stoping Nginx... Nginx: [emerg] bio_new_file("/usr/local/Nginx/conf/cert/214291778530222.pem") Failed (ssl: error:02001002:system library:fopen:no such file or directory:fopen('/usr/local/Nginx/conf/cert/214291778530222.pem','r') error:2006d080:bio routines:bio_new_file:no such file) Failed. use force-quit
解决方案:
这可能是证书路径存放的位置不正确导致的,而且只要写绝对路径,就会报错,无论windows还是linux。
到此,相信大家对“Nginx怎么使用ssl模块配置支持HTTPS访问”有了更深的了解,不妨来实际操作一番吧!这里是编程之家网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。