二、Nginx & Https 配置部署 - 证书、集群、多域名配置打包上线 (2)

一、Nginx安全证书的配置和申请

1.1 nginx 的安装

  1. nginx下载

在这里插入图片描述

  1. 创建nginx服务器目录
mkdir -p /www/daniel/nignx
cd /www/daniel/nignx
  1. 下载安装(将上面复制的地址粘贴如下)
wget http://nginx.org/download/nginx-1.20.1.tar.gz
  1. 安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel

在这里插入图片描述

  1. 解压nginx
tar -zxvf nginx-1.22.0.tar.gz 

在这里插入图片描述

  1. 创建nginx的临时目录
mkdir -p /var/temp/nginx
  1. 进入安装包目录
cd nginx-1.22.0

在这里插入图片描述

  1. 编译安装
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/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/fastgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_stub_status_module

安装以后的目录信息

在这里插入图片描述

nginx path prefix: "/usr/local/nginx"  
nginx binary file: "/usr/local/nginx/sbin/nginx"  
nginx modules path: "/usr/local/nginx/modules"  
nginx configuration prefix: "/usr/local/nginx/conf"  
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"  
nginx pid file: "/var/run/nginx.pid"  
nginx error log file: "/var/log/nginx/error.log"  
nginx http access log file: "/var/log/nginx/access.log"  
nginx http client request body temporary files: "/var/temp/nginx/client"  
nginx http proxy temporary files: "/var/temp/nginx/proxy"  
nginx http fastcgi temporary files: "/var/temp/nginx/fastgi"  
nginx http uwsgi temporary files: "/var/temp/nginx/uwsgi"  
nginx http scgi temporary files: "/var/temp/nginx/scgi"

在这里插入图片描述

  1. make编译
make
  1. 安装
make install

在这里插入图片描述

  1. 进入sbin目录启动nginx
cd /usr/local/nginx/sbin

执行nginx启动

./nginx

在这里插入图片描述

#停止:
./nginx -s stop
#重新加载:
./nginx -s reload
  1. 打开浏览器,访问虚拟机所处内网ip即可打开nginx默认页面,显示如下便表示安装成功:
http://ip

在这里插入图片描述

1.2 nginx 配置文件说明

  • 文件一路径: /usr/local/nginx/html

在这里插入图片描述

  • 文件二路径: /usr/local/nginx/conf

在这里插入图片描述

1.3 nginx 环境变量配置

注意事项:

  • 如果在云服务器安装,需要开启默认的nginx端口:80
  • 如果在虚拟机安装,需要关闭防火墙
  • 本地win或mac需要关闭防火墙
  • nginx的安装目录是:/usr/local/nginx/sbin
  • 所以配置下环境变量可以日后灵活使用
vim /etc/profile

在这里插入图片描述

在文件的尾部追加如下:

export NGINX_HOME=/usr/local/nginx
export PATH=$NGINX_HOME/sbin:$PATH

在这里插入图片描述

重启配置文件

source /etc/profile

这样在你的nginx中执行任意服务就变得非常方便:

如:

在这里插入图片描述

1.4 nginx 的学习建议

nginx 的学习视频

1.5 导入ssl证书

在nginx的conf目录下新建一个cert目录,并将这两个文件上传到cert目录下

在这里插入图片描述
在这里插入图片描述
将上面剪贴的部分粘贴到创建的 wmsspark.conf里面保存即可

在这里插入图片描述

#重启
nginx -s reload 

nginx -t  验证是否配置成功

nginx -help  查看命令意思

在这里插入图片描述

如果将上面wmsspark.config 改错,看效果如何

在这里插入图片描述
报如下错误

在这里插入图片描述

再次还原重启即可。

在这里插入图片描述

二、Nginx 配置 SSL 服务

2.1 nginx 配置 https

  1. 先看是否将 80 和 443 端口开放,若没有,则必须先开放

在这里插入图片描述

  1. 在阿里云找到自己购买的证书,点击“下载”——nginx对应的“帮助”

在这里插入图片描述

  1. 将帮助文档中的代码复制到自己,如 wmsspark.config 中

在这里插入图片描述
在这里插入图片描述

  1. 根据案例帮助文档进行操作,如下

在这里插入图片描述

  1. 若要http自动转换成https则再替换下面

在这里插入图片描述

  1. 然后重启nginx服务
nginx -s reload

在这里插入图片描述

  1. 然后访问服务器, 浏览器输入 https://www.wmsspark.top/ 测试,这时候你的域名不但绑定了服务器ip,还是安全的

在这里插入图片描述

说明安装成功!

注意(最好不要加,不然报错呐):

在这里插入图片描述

完整 Nginx和SSL配置 wmsspark.config

server {
    listen 80;
    server_name www.wmsspark.top; #需要将yourdomain替换成证书绑定的域名。
    rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    location / {
        index index.html index.htm;
    }
}


#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name www.wmsspark.top;
    root html;
    index index.html index.htm;
    ssl_certificate cert/8611235_www.wmsspark.top.pem;  
    ssl_certificate_key cert/8611235_www.wmsspark.top.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;
    }
}

2.2 配置多域名的 https

1.先添加绑定对应IP

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.再次申请证书

在这里插入图片描述

在这里插入图片描述

  1. 证书签发成功后进行相应的下载

在这里插入图片描述

  1. 将下载的证书拉去到云服务器 /usr/local/nginx/conf/cert 下面
    在这里插入图片描述
  1. 重复上面的操作,将server复制一份到下面,修改对应位置即可(三处,已标记)

在这里插入图片描述

重启访问即可 http://api.wmsspark.top/

在这里插入图片描述
在这里插入图片描述

2.3 搭建 SpringBoot 项目

  1. 准备一个springboot项目,创建项目 nginx-app

在这里插入图片描述
在这里插入图片描述

  1. 创建包 com.zql.controller,并编写两个接口 IndexController.javaUserController.java

IndexController.java

package com.zql.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * @Author:Daniel
 * @Version 1.0
 */

@Controller
public class IndexController {


    @GetMapping({"/","/index"})
    public String index(){

        return "index";

    }
}

UserController.java

package com.zql.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Author:Daniel
 * @Version 1.0
 */

@Controller
public class UserController {
    
    @GetMapping({"/user/{id}"})
    @ResponseBody  //异步请求
    public String user(@PathVariable("id") Long userid){

        return "我是一个用户查询接口"+userid;

    }
}

在这里插入图片描述

  1. 在 resources下面的 templates 下面创建 index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>

<h1>Daniel创建的首页</h1>

</body>
</html>
  1. 在pom.xml中引入 freemarker依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  1. 修改添加如下到 application.properties
server.port=8088

spring.freemarker.suffix=.html
  1. 启动主启动,并访问 http://localhost:8088/

在这里插入图片描述

http://localhost:8088/user/3

在这里插入图片描述
完整源码 nginx-app

2.4 打包

在这里插入图片描述

查看:

在这里插入图片描述

2.5 上传服务器以及nginx 部署集群

  1. 在之前创建的文件夹Daniel下面再次创建 server / pros

在这里插入图片描述
在这里插入图片描述

  1. 将打包文件传输到云服务器pros下

在这里插入图片描述
注意:

(1) 将来 8081,8082,8083端口分别在安全组中必须开放

在这里插入图片描述

(2) 云服务器前提要装 jdk jdk 安装参考

  1. 上传项目到云服务器上(一条一条执行哦)

(1) Xshell或 SecureCRT进行

  #切换到文件夹下
cd /www/daniel/servers/pros/                
  #8080端口    nohup java -jar   打包文件  --server.port=安全组开放的端口号  >> 1.txt 生成的日志文件
nohup java -jar nginx-app-0.0.1-SNAPSHOT.jar --server.port=8080 >>1.txt &  

#查找是否有相应的端口启动
ps -ef | grep 808

ps -ef | grep tour
    
# 8081 端口
nohup java -jar nginx-app-0.0.1-SNAPSHOT.jar --server.port=8081 >>2.txt &

# 8083 端口
nohup java -jar nginx-app-0.0.1-SNAPSHOT.jar --server.port=8083 >>3.txt &

在这里插入图片描述

(2) Xftp 查看

在这里插入图片描述
(3) 浏览器测试

在这里插入图片描述

2.6 配置nginx和tomcat的负载均衡配置

  1. 修改云服务器 /usr/local/nginx/conf/wmsspark.config 文件

在这里插入图片描述

完整 wmsspark.config

#负载均衡配置
upstream tomcatservers {
   server 127.0.0.1:8080;
   server 127.0.0.1:8081;
   server 127.0.0.1:8083;
}


server {
    listen 80;
    server_name www.wmsspark.top; #需要将yourdomain替换成证书绑定的域名。
    rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
   
    #反向代理
    location / {
        proxy_pass http://tomcatservers;
    }
}

#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name www.wmsspark.top;
    root html;
    index index.html index.htm;
    ssl_certificate cert/8611235_www.wmsspark.top.pem;  
    ssl_certificate_key cert/8611235_www.wmsspark.top.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 / {
        proxy_pass http://tomcatservers;
    }
}


#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name api.wmsspark.top;
    root html;
    index index.html index.htm;
    ssl_certificate cert/8615757_wmsspark.top.pem;  
    ssl_certificate_key cert/8615757_wmsspark.top.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 / {
        proxy_pass http://tomcatservers;
    }
}
  1. 完成测试和配置

在这里插入图片描述
浏览器输入 http://www.wmsspark.top/user/2http://www.wmsspark.top

出现 如下

在这里插入图片描述

在这里插入图片描述

提示:记住:一定要重启nginx服务器即可。

宝塔的隐患 - Nginx安装的隐患

前提,域名要备案。必须手动安装nginx,如果之前使用宝塔安装过nginx的话,直接把阿里云服务器重置,换个系统,因为宝塔装nginx会写进去一些环境,卸载是卸载不干净的,切记!

三、拓展(HTTP向HTTPS演化的过程)

3.1 HTTP的访问形式

当我们访问百度的时候,浏览器发送一个请求,通过网址进行访问,如“http://baidu.com”,前面部分是协议,后面就是我们的域名,他们是构成我们整个url地址中最重要的2部分。这个请求首先会到达我们的DNS,通过DNS解析成我们要访问的外网ip,浏览器拿到这个ip后会发起针对这个ip的请求,并且被访问的服务器会跟根据请求的端口号辨认出要提供什么的服务。如果url没有携带资源地址,默认会到达服务的根目录下的index.html,浏览器拿到这个页面后会进行渲染。

在这里插入图片描述

3.2 HTTP是无状态的

HTTP协议是基于TCP之上的协议,定义了我们客户端和服务端文件的传输方式。如在一个HTTP请求过程,会带有request和response,他们都有一定的规范。HTTP是一个无状态的,每次请求的处理是独立的,不依赖其他请求,我们通过服务端技术Cookie和Session技术实现它的状态,从而满足我们业务场景的请求。

3.2.1 HTTP的缺陷

HtTP很多的缺陷,如通过HTTP进行通信时候,请求信息request和响应信息response是可以被拦截掉的,如果是被黑客拿到这些信息,他们就可以进行很多操作,本质来说它的通信也是明文传输。

3.2.2 HTTP与HTTPS的区别

在这里插入图片描述

HTTS是TCP与HTTP之间加一个SSL。想要了解HTTP和HTTPS的区别,我们最重要的还是要去了解什么是SSL。我们现在使用的版本大多是TLS。

3.3 什么是SSL

SSL(Secure Sockets Layer 安全套接层),是为网络通信提供安全及数据完整性的一种安全协议。SSL在传输层与应用层之间对网络连接进行加密,防止数据传输过程中被篡改。‍我们现在使用的版本大多是TLS,他是SSL续任者。

3.4 对称加密与非对称加密

  • 对称加密:加密和解密都是使用到同一个密钥。它存在一个问题,假设客户端传输一个密文,并把密钥也携带过去,那么在传输过程中,只要传输的密钥被拿到,那么对于密文来说一样是透明的。
  • 非对称加密:有公钥和私钥的概念,通过公钥加密的数据可以用私钥解密,通过私钥加密的数据可以用公钥解密。每一个客户端都有自己的公钥,而私钥放在服务端上,这样它可以解决我们对称加密存在的问题。

3.4.1 协商密钥过程

非对称加密中,我们需要一个协商密钥过程,让每一个客户端拿到不同的公钥,并且保证在交互的情况下才知道用什么算法。

在传统的模式下存在一个问题,客户端向服务端发起一个请求公钥的请求,在返回公钥给客户端的过程中,公钥被中间人篡改了,后续的客户端每一次请求都会用这个假的公钥加密,而中间人可以拦截到这个请求,解密后并篡改数据,用真的公钥加密再发送给服务端。

在这里插入图片描述

因为协商的过程一定存在,那么怎么去解决问题呢?我们不可能把公钥直接传给客户端,而是将加密后的公钥传给客户端,这样公钥就不被其他人篡改,那么又要让客户端知道去如何解密被加密后的公钥,这是一个循环的问题。

为了解决上述的问题,引入了第三方机构。服务端发给客户端的公钥先使用第三方机构的公钥加密后发给第三方机构,第三方机构用它自己的私钥解密在一次加密,并返回给服务器,这就是数字证书。

由于客户端拿到的数据证书都可以使用第三方机构的公钥进行解密,那么如果中间人以正规的渠道获取属于它的数字证书,这个时候他可以替换服务端给客户端的数字证书,对于客户端来说还是不知道真假。

在这里插入图片描述

3.5 HTTPS的处理方式

我们协商里,客户端如何去识别数字证书的合法性?我们的数据证书必须要有一些信息,让客户端知道这个数字证书是对于服务端的,而不中间人。客户端可以去请求第三方辨别。

但是通常情况下客户端可以内置一些第三机构的数字证书和公钥(在设置里面),利用这些可以去验证发服务端过来的数据证书去识别数字证书的合法性。

如果验通过了,浏览器得到公钥了,这个公钥后会加密一个浏览器随机生成的数据作为对称加密,并传给服务端。服务器使用私钥解密,根据3个随机数生成会话密钥,返回给浏览器。

在这里插入图片描述

这就是我们客户端对服务端验证的过程,它用到了对称加密,非对称加密,随机数(生成会话密钥)。由于使用非对称加密在数据加密解密过程需要消耗一定时间,降低了数据传输效率。所以在交换密钥环节使用非对称加密方式,之后的建立通信交换报文阶段则使用对称加密方式。这就是HTTPS的原理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Daniel521-Spark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值