如何查看有没有安装ssl模块呢?定位到nginx/sbin目录执行nginx -V查看安装时的命令,如果有--with-http_ssl_module,说明已经安装了ssl模块,那么你可以跳过这一步了。
这里着重要讲的是已经上线运行了一段时间的nginx如果安装新模块,其实下面的内容在我另外一篇文章中有提到过。
3.2.2.1. 编译安装openssl编译安装openssl要很久很久,做好心理准备。
下载openssl-1.0.2n.tar.gz文件放在/home/nginx/下面:
cd /home/nginx tar -zxvf openssl-1.0.2n.tar.gz cd openssl-1.0.2n ./config make & make install
3.2.2.2. 重新编译nginxnginx安装新模块需要整体重新编译,所以需要知道上一次安装时的编译命令,假设nginx安装在/home/nginx/nginx-1.8.1下面,定位到sbin下面执行./nginx -V(注意V是大写)后可以查看安装时使用的命令:
[root@iZ94i7kwlagZ sbin]# ./nginx -V nginx version: nginx/1.8.1 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) built with OpenSSL 1.0.2n 7 Dec 2017 TLS SNI support enabled configure arguments: --prefix=/home/nginx/nginx-1.8.1 --with-pcre=/home/nginx/pcre-8.38 --with-zlib=/home/nginx/zlib-1.2.8 --without-http_ssi_module
然后定位到源码包去重新编译,根据已有的命令再加上我们这次要安装的新模块命令,我这里是--with-openssl=/home/nginx/openssl-1.0.2n --with-http_ssl_module。注意,如果源码包删了,重新下载一个版本一致的nginx-1.8.1.tar.gz并解压,为了区分,我解压到/home/nginx/temp-nginx-1.8.1:
cd /home/nginx/temp-nginx-1.8.1 ./configure --prefix=/home/nginx/nginx-1.8.1 --with-pcre=/home/nginx/pcre-8.38 --with-zlib=/home/nginx/zlib-1.2.8 --with-openssl=/home/nginx/openssl-1.0.2n --with-http_ssl_module make
切记这里仅仅需要make,不需要make install。执行完之后我们在/home/nginx/temp-nginx-1.8.1/objs/下得到了一个新的二进制文件nginx,上面所有操作都是为了得到这个文件,然后将这个文件覆盖现有nginx文件即可(为了以防万一,最好备份一下):
cd /home/nginx/nginx-1.8.1/sbin/ ./nginx -s stop # 先停止 cp ./nginx ./nginx.backup # 备份 cd /home/nginx/ cp temp-nginx-1.8.1/objs/nginx nginx-1.8.1/sbin/nginx # 覆盖
然后启动nginx查看是否正常。
3.3. 第三步,nginx配置 3.3.1. 配置假设我们有一个的网站,为了方便测试,把它添加到hosts文件中去。
然后将第一步得到的证书复制到nginx/conf/crt/文件夹下(后面的crt是自己新建的文件夹),编辑nginx.conf:
http { # 省略其它配置 server { listen 443; server_name ; ssl on; # 书写路径时注意,即使使用了include将conf文件写到其它目录,证书路径依然是相对于nginx.conf而言的,且windows下不能以./开头 ssl_certificate crt/server.crt; ssl_certificate_key crt/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 使用的协议 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置加密套件,写法遵循openssl标准 ssl_prefer_server_ciphers on; location / { root E:/github/test/dist/www; index index.html; } } }最主要就是中间那7行ssl开头的配置,一般照着写就可以了,替换一下自己的证书路径,书写路径时注意,即使使用了include将conf文件写到其它目录,证书路径依然是相对于nginx.conf而言的,并且Windows下不能以./开头,否则会提示文件找不到。
运行nginx -t测试一下是否OK:
D:\GreenSoft\nginx-1.11.8>nginx -t nginx: the configuration file D:\GreenSoft\nginx-1.11.8/conf/nginx.conf syntax is ok nginx: configuration file D:\GreenSoft\nginx-1.11.8/conf/nginx.conf test is successful
没问题就重启nginx,然后打开浏览器测试,一切顺利的话你可能已经看到绿色的https前缀了,有木有很鸡冻:
特别注意,由于我们还没有做http自动跳转处理,测试时一定要主动输入https://www.localhost.com的完整域名!
3.3.2. 常见问题 3.3.2.1. Mixed Content