讲了那么久的密码学和HTTPS,毛主席曾经在《反对本本主义》一文中提到:没有调查,没有发言权。笔者引用一下:没有实践就没有发言权,本文实际来搭建一个HTTPS的服务,Web服务器用到的是大名鼎鼎的Nginx。
关于Nginx默认读者朋友们都比较熟悉,本系列的正序就不再对Nginx进行介绍了。
一、Nginx的安装
本文记录的是在centos 7.X的腾讯云服务器上安装nginx 1.8.0(nginx-1.18.0.tar.gz)的过程。
官网下载地址为:
http://nginx.org/en/download.html
上传到linux系统上。下面开始安装,首先安装依赖环境,按照如下一步一步来。
第1步,安装gcc环境
yum install gcc-c++
第2步,安装PCRE库,用于解析正则表达式
yum install -y pcre pcre-devel
第3步,zlib压缩和解压缩依赖
yum install -y zlib zlib-devel
第4步,SSL 安全的加密的套接字协议层,用于HTTP安全传输,也就是https
yum install -y openssl openssl-devel
第5步,解压,需要注意,解压后得到的是源码,源码需要编译后才能安装
tar -zxvf nginx-1.18.0.tar.gz
第6步,编译之前,先创建nginx临时目录,如果不创建,在启动nginx的过程中会报错
mkdir /var/temp/nginx -p
第7步,在nginx目录,输入如下命令进行配置,目的是为了创建makefile文件,只有生成了这个文件才能进行下面的编译和安装工作。
cd nginx-1.18.0
./configure
--prefix=/usr/local/nginx
--pid-path=/var/run/nginx/nginx.pid
--lock-path=/var/lock/nginx.lock
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--with-http_gzip_static_module
--http-client-body-temp-path=/var/temp/nginx/client
--http-proxy-temp-path=/var/temp/nginx/proxy
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
--http-scgi-temp-path=/var/temp/nginx/scgi
命令 | 解释 |
---|---|
–prefix | 指定nginx安装目录 |
–pid-path | 指向nginx的pid –lock-path锁定安装文件,防止被恶意篡改或误操作 |
–error-log | 错误日志 |
–http-log-path | http日志 |
–with-http_gzip_static_module | 启用gzip模块,在线实时压缩输出数据流 |
–http-client-body-temp-path | 设定客户端请求的临时目录 |
–http-proxy-temp-path | 设定http代理临时目录 |
–http-fastcgi-temp-path | 设定fastcgi临时目录 |
–http-uwsgi-temp-path | 设定uwsgi临时目录 |
–http-scgi-temp-path | 设定scgi临时目录 |
执行完毕后,会看到当前目录下多出一个Makefile
文件。
第8步,make编译
make
第9步,安装
make install
第10步,进入sbin目录启动nginx
安装完毕之后,实际上会根据我们的第一个配置项安装到/usr/local/nginx
这个目录下。我们可以用whereis
命令查找下:
进入其目录下的sbin
目录去启动。
[root@VM-0-13-centos nginx-1.18.0]# whereis nginx
nginx: /usr/local/nginx
./nginx
-
停止:./nginx -s stop
-
重新加载:./nginx -s reload
-
检查配置是否正常:./nginx -t
查看进程:
[root@VM-0-13-centos sbin]# ./nginx
[root@VM-0-13-centos sbin]# ps -ef | grep nginx
root 12124 1 0 16:07 ? 00:00:00 nginx: master process ./nginx
nobody 12125 12124 0 16:07 ? 00:00:00 nginx: worker process
root 12145 3126 0 16:07 pts/0 00:00:00 grep --color=auto nginx
看到绿色加粗的两行,说明我们已经安装好了。
第11步,打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示如下便表示安装成功
第12步,注意点
-
如果在云服务器安装,需要在安全组中放开默认的nginx端口:80
-
如果在虚拟机安装,需要关闭防火墙
-
本地win或mac需要关闭防火墙
二、Nginx的目录
在我们安装好后的/usr/local/nginx/
目录下有三个文件夹:
drwxr-xr-x 2 root root 4096 Dec 3 16:05 conf
drwxr-xr-x 2 root root 4096 Dec 3 16:05 html
drwxr-xr-x 2 root root 4096 Dec 3 16:05 sbin
conf
目录是相关的配置文件:
-rw-r--r-- 1 root root 1077 Dec 3 16:05 fastcgi.conf
-rw-r--r-- 1 root root 1077 Dec 3 16:05 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Dec 3 16:05 fastcgi_params
-rw-r--r-- 1 root root 1007 Dec 3 16:05 fastcgi_params.default
-rw-r--r-- 1 root root 2837 Dec 3 16:05 koi-utf
-rw-r--r-- 1 root root 2223 Dec 3 16:05 koi-win
-rw-r--r-- 1 root root 5231 Dec 3 16:05 mime.types
-rw-r--r-- 1 root root 5231 Dec 3 16:05 mime.types.default
-rw-r--r-- 1 root root 2656 Dec 3 16:05 nginx.conf
-rw-r--r-- 1 root root 2656 Dec 3 16:05 nginx.conf.default
-rw-r--r-- 1 root root 636 Dec 3 16:05 scgi_params
-rw-r--r-- 1 root root 636 Dec 3 16:05 scgi_params.default
-rw-r--r-- 1 root root 664 Dec 3 16:05 uwsgi_params
-rw-r--r-- 1 root root 664 Dec 3 16:05 uwsgi_params.default
-rw-r--r-- 1 root root 3610 Dec 3 16:05 win-utf
最关键也是最常用的是nginx.conf
。
html
目录就是默认的nginx首页。
-rw-r--r-- 1 root root 494 Dec 3 16:05 50x.html
-rw-r--r-- 1 root root 612 Dec 3 16:05 index.html
sbin
下面是可执行的一个文件,用来启动nginx等操作。
三、Nginx安装SSL模块
要在nginx中配置https,就必须安装ssl模块,也就是: http_ssl_module
。
基于这篇文章,我们在进行第7步的时候,新增SSL模块,改为如下配置即可,变化是多了最后一行:
./configure
--prefix=/usr/local/nginx
--pid-path=/var/run/nginx/nginx.pid
--lock-path=/var/lock/nginx.lock
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--with-http_gzip_static_module
--http-client-body-temp-path=/var/temp/nginx/client
--http-proxy-temp-path=/var/temp/nginx/proxy
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
--http-scgi-temp-path=/var/temp/nginx/scgi
--with-http_ssl_module
下面依然是编译和安装:
make
make install
如何查看是否已经安装了SSL模块呢?可以这样看,执行./nginx -V
查看:
[root@VM-0-13-centos sbin]# ./nginx -V
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi--with-http_ssl_module
发现最后确实已经包含了SSL模块。
四、申请和配置证书、私钥
腾讯云服务器上即可申请免费的证书,腾讯云也提供收费证书,我们先看下免费证书和收费证书之间的区别。
腾讯云的官方文档中详细说明了两者区别:https://cloud.tencent.com/developer/news/416012
也就是说,免费的证书就是让你个人开发者玩一玩用的,商用的还请老老实实交钱,不然出问题导致网站不能访问可就别哭了。
好了,如何在腾讯云申请免费的ssl证书和私钥呢?首先我们登录腾讯云的控制台。
点击我的证书查看:(我这里已经申请到了一个免费的证书,直接可以点击下载)
这个页面有个“申请免费证书”,按照下一步下一步无脑配置即可。
-
通用名称就是你的域名
-
申请邮箱填写你的常用邮箱
-
证书备注名:填写一个易记的就行
-
私钥密码:可不填写
-
所属项目:默认项目即可
申请通过后,腾讯云会短信告知你,重新刷新就可以在“我的证书”看到已签发的证书,此时点击下载,下载下来的就是配套的证书和私钥。
下载下来的是一个压缩包,解压后可以看到:
可以看到,腾讯云贴心地想到了所有可能性,我们这里只关注nginx即可。打开里面是两个文件:
1_oursnail.cn_bundle.crt
2_oursnail.cn.key
第一个是证书,第二个是私钥,尤其是私钥,是万万不可泄漏出去的。我们将这两个文件上传到nginx的安装目录/usr/local/nginx/conf
下。
好了,至此,关于证书和私钥的申请和配置就说到这里。
五、Nginx配置和效果验证
有了证书和私钥,就差nginx的配置了,我们这里简单用nginx默认页面来做下测试。配置文件如下:
最后启动来测试下,可以看到,我这里监听了80端口(HTTP默认端口号)和443端口(HTTPS默认端口号),分别访问两个页面的效果:
当我们访问http://www.oursnail.cn/
时展示:
当我们访问https://www.oursnail.cn/
时展示:
终于见到了可爱的小锁,OK,HTTPS服务搭建完毕。
原文始发于微信公众号(幕后哈土奇):七十四、进阶篇-使用Nginx来搭建一个HTTPS服务
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/113057.html