HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS是以网络安全为目标的HTTP通道,简单地讲就是HTTP的安全版,即HTTP中加入了SSL层,HTTPS的安全基础就是SSL,因此加密的详细内容就需要SSL。如我们经常访问的百度。
https协议需要到ca申请证书,一般免费证书较少,大多需要一定的费用;
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议;
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的,可进行加密传输、身份认证的网络协议,比http协议安全。
证书申请前往阿里云SSL证书申请,选择免费证书申请即可


刷新页面




查看nginx是否安装http_ssl_module模块
|
1 |
./nginx -V |
如果看到我上图标记得 configure arguments: --with-http_ssl_module, 则已安装(可以直接跳过nginx安装ssl支持步骤,进入 nginx.conf 配置)。
3.1 nginx官网地址
下载地址
这里下载nginx-1.18.0稳定版tar.gz

3.2 下载tar包到服务器目录
|
1 2 |
cd /home/somnus wget http://nginx.org/download/nginx-1.18.0.tar.gz |
3.3 解压安装包
|
1 |
tar -zxvf nginx-1.18.0.tar.gz |
3.4 配置ssl模块
|
1 2 |
cd nginx-1.18.0 ./configure --prefix=/usr/local/nginx --with-http_ssl_module |
3.5 接下来执行命令编译
使用 make 命令编译(使用make install会重新安装nginx),此时当前目录会出现 objs 文件夹。用新的 nginx 文件覆盖当前的 nginx 文件。
3.6 命令拷贝复制
|
1 |
cp ./objs/nginx /usr/local/nginx/sbin/ |
3.7 再次查看安装的模块(configure arguments: --with-http_ssl_module说明ssl模块已安装)。
|
1 2 3 4 |
./nginx -V nginx version: nginx/1.18.0 … configure arguments: –with-http_ssl_module |
下载申请好的 ssl 证书文件压缩包到本地并解压(这里是用的 pem 与 key 文件,文件名可以更改)。 在 nginx 目录新建 cert 文件夹存放证书文件。
|
1 2 |
cd /usr/local/nginx mkdir cert |
将我们申请得这两个文件上传至服务器的 cert 目录里。
然后我们打开浏览器的默认下载位置,解压已下载的Nginx服务器证书压缩包文件。解压后我们将会获得以下文件:
|
1 2 3 |
www.javaqf.com.key
www.javaqf.com.pem |
编辑 /usr/local/nginx/conf/nginx.conf 配置文件:
配置 https server。 注释掉之前的 http server 配置,新增 https server:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#以下属性中,以ssl开头的属性表示与证书配置有关。 server { listen 443 ssl; #配置HTTPS的默认访问端口为443。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。 server_name yourdomain; root html; index index.html index.htm;
ssl_certificate ../cert/cert-file-name.pem; ssl_certificate_key ../cert/cert-file-name.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #表示使用的加密套件的类型。 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。 ssl_prefer_server_ciphers on;
location / { root html; #Web网站程序存放目录。 index index.html index.htm; } } |
这里我们需要将协议更改为HTTPS配置文件,我的配置如下所示:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { listen 443 ssl; server_name www.javaqf.com; root html; index index.html index.htm;
ssl_certificate /usr/local/nginx/ca/www.javaqf.com.pem; ssl_certificate_key /usr/local/nginx/ca/www.javaqf.com.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
location / { root /usr/share/nginx/html; index index.html index.htm; } } |
最后我们就可以在浏览器中通过https协议进行访问了,比如:https://www.你的域名.com/
|
1 |
netstat -lntp |
执行看到以下结果就说明我们成功了
|
1 2 3 4 5 6 |
[root@centos7 certs]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3322/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2310/sshd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 3322/nginx: master |
|
1 2 3 4 5 6 7 |
server { ... if ($host != '域名') { return 404; } ... } |
|
1 2 3 4 5 6 7 |
server { ... location /企微文件名称.txt { alias 企微文件放置文件/企微文件名称.txt; } ... } |
|
1 2 3 4 5 6 7 |
server { listen 80; server_name somnus.test.com; #将请求转成https rewrite ^(.*)$ https://$host$1 permanent; ... } |