• Nginx复习总结&学习总结


    #通过nginx部署前后端项目

    • 前端:vue项目
    • 后端:jar包
      具体nginx配置
    #虚拟主机04--开启科研管理系统
        server {
            listen       80;
            #域名,该域名指向公网ip
            server_name  scientific.lovelsj.com;
            #前端地址,这里是绝对路径
            location / {
                root   /www/dist;
                index  index.html index.htm;
            }
            #后端路径,注意这里的Scientific是application.yml里面的server-servlet-context-path: /Scientific,寻找/Scientific下的接口
            location /Scientific{
    	proxy_pass http://192.168.30.131:8060;
            }
    
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    nginx笔记

    nginx介绍

    nginx担当高性能的web服务器负载均衡器,流量网关,日志网关,日志服务器,贯穿了整个项目

    image.png

    1. nginx开源版本比较干净,就是一个负载均衡和高性能服务器–开源
    2. nginx-plus东西更多,是nginx升级版本
    3. 将nginx和Lua脚本进行整合–开源
    4. 更安全,更稳定,性能更高–开源

    image.png

    虚拟机的安装

    1. 准备软件:
      1. Vmware
      2. Virtualbox
      3. Parallels
    2. 准备镜像
      1. Centos7.4镜像
    3. 安装与配置操作系统
      1. 配置虚拟机上网
        先配置网卡,修改配置文件

    image.png
    2. 配置静态ip地址

    image.png

    image.png

    image.png

    image.png

    • 配置静态的ip地址,否则虚拟机会随即生成ip地址,每次连接比较麻烦

    image.png

    Nginx开源版本的安装

    • 首先进行解压缩nginx的tar包

    image.png

    • 解压完之后进入目录用编译安装的方式进行安装,用configure配置进行安装,如图,他缺少c语言编译

    image.png

    • 随即安装gcc

    image.png

    • 安装nginx,挑选位置进行安装
    yum install -y gcc
    ./configure ==prefix=/usr/local/nginx
    
    • 1
    • 2

    image.png

    • 发现缺少库,随即安装perl库
    yum install -y pcre pcre-devel
    
    • 1

    image.png

    • 发现缺少zlib库,安装zlib库
    yum install -y zlib zlib-devel
    
    • 1

    image.png

    • 接下来执行:make , makei nstall

    启动Nginx

    • 安装成功之后进入安装好的目录** /usr/local/nginx/sbin**
    • 启动nginx
    ./nginx
    
    • 1
    • 快速停止nginx
    ./nginx -s stop
    
    • 1
    • 优雅关闭nginx,在退出前完成已经接受的连接请求
    ./nginx -s quit
    
    • 1
    • 重新加载配置nginx
    ./nginx-s reload
    
    • 1

    image.png

    • 进入目录之后输入 ./nginx启动nginx之后可以在浏览器输入ip地址,发现进不去,这时候是防火墙的问题

    关于防火墙

    • 关闭防火墙
    systemctl stop firewalld.service
    
    • 1
    • 禁止防火墙开机启动
    systemctl disable firewalld.service
    
    • 1
    • 放行端口
    firewalld-cmd --zone=public --add-port=80/tcp --permanent
    
    • 1
    • 查看防火墙状态
    systemctl status firewalld
    
    • 1
    • 重启防火墙
    firewall-cmd --reload
    
    • 1
    • 我们关闭防火墙

    image.png
    随后能进去网页

    image.png

    • 随后关闭开机自启防火墙

    image.png

    安装系统服务

    • 因为我们每次都得自启动太麻烦,所以可以写一个脚本
    1. 创建脚本服务
    vi /usr/lib/systemd/system/nginx.service
    
    • 1
    1. 服务脚本内容—注意脚本中的路径
    [Unit]
    
    Description=nginx - web server
    
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    
    Type=forking
    
    PIDFile=/usr/local/nginx/logs/nginx.pid
    
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
    
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    
    ExecStop=/usr/local/nginx/sbin/nginx -s stop
    
    ExecQuit=/usr/local/nginx/sbin/nginx -s quit
    
    PrivateTmp=true
    
    [Install]
    
    WantedBy=multi-user.target
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 先关闭之前的nginx服务
    1. 重新加载系统服务
    systemctl daemon-reload
    systemctl reload nginx
    
    • 1
    • 2
    • 通过脚本启动nginx: systemctl start nginx
    • 查看nginx状态: systemctl status nginx
    1. 开机启动
    systemctl enable nginx.service
    
    • 1

    image.png

    • reboot关机,在启动试一下nginx是否自启动

    目录结构与基本运行原理

    1. 目录
    • sbin中放的是启动nginx的主程序
    • html中的index.html是加载的默认页面
      • 50x.html是报错后的页面
    • logs是记录日志的
      • access.log记录访问日志,记录访问时间,请求具体文件,等等,所以这个日志可能会很大,达到一定程度会报错.
      • error.log记录错误日志
      • nginx.pid记录着893就是nginx的进程pid

    image.png

    1. 更改默认页

      就是更改index.html

    2. 基本运行原理

    image.png

    客户端发起一个请求,nginx端主目录下/sbin有个nginx可执行文件,将这个文件跑起来,会开启master的主的进程,在主进程中读取配置文件并且再次做一个校验,然后开启子进程worker,主进程不处理业务,子进程解析请求
    
    • 1

    Nginx基础配置 (最重要的内容)

    1. 最小配置文件
    • 位置: /usr/local/nginx/conf/nginx.conf
    • nginx配置文件大量的注释文件,去掉注释文件之后的简化conf
    1. 核心配置
    2. 虚拟主机配置
    #工作的子进程个数,一个cpu内核对应一个进程
    worker_processes  1;
    
    events {
    //每一个worker进程对应的连接数
        worker_connections  1024;
    }
    #核心配置
    http {
    	#引用其他的配置文件mime.types到主配置文件里,记录所有mime的type,mime的type就是请求的头,头里面记录着返回或者发送的文件是什么类型
        include       mime.types;
    	#如果mime.types里面没有对应的类型,哪么就用默认流形式
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
    #虚拟主机,每一个主机之间互相不干扰
        server {
    	#监听80端口
            listen       80;
            server_name  localhost;  #域名,主机名
    	#http://lsj.cash/xxoo/index.html,location是匹配域名后面的资源  /xxoo/index.html
            location / {
    	#相对路径
                root   html;
                index  index.html index.htm;
            }
    	#http://lsj.cash/50x.html
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    虚拟主机和域名解析

    • 域名,dns,ip地址的关系
    • 浏览器,nginx与http协议
    • 虚拟主机原理
      • 通过ip地址打到这台服务器上,遵循的http协议,把数据报文返回给nginx,一台主机上可以对外来说一个公网ip就能访问了,但是一台主机不是实时有这么高的访问量,主机的资源会浪费的,我们可以在开一台主机,虚拟主机的话,我们可以把一台主机虚拟出来,本来我们通过域名才能访问到主机,一个域名对应一个ip地址,我们能不能想一下让多个域名对应到一个ip地址上,由nginx服务器端来判断你究竟的是访问哪一个域名,指向不同站点的目录就行,本质上也是访问一些资源,把资源放在不同的目录下,比如说我访问atguigu.com,http请求打过来了,访问的域名是atguigu.com,然后解析成一个ip地址,然后通过这个ip发送一个数据报文给nginx,nginx读到这个请求之后去对应的目录之下找数据资源,找到之后返回给客户端,以上的都是单机
      • 那如果是两个域名同时解析到一个ip地址,那么就会在协议层上也就是http协议上增加一些内容,在请求的报文请求头上,加上要请求的域名是啥,因为请求目标的ip地址是一样的,在一个ip上绑定了两个域名,想要把他们区分开,把资源划分在不同的目录下,那么在请求下,除了ip地址那么把域名也写下来,nginx知道他请求的某一个域名,nginx去特定目录找资源另外一个域名也是,解析到了一个域名去相关目录下找资源
    • 域名解析与泛域名解析实战
      • 我们可以更改本地hosts文件里的域名,第三个就是添加的虚拟机的域名和ip

    image.png

    • 我们ping一下这个域名看能不能通,这是在本机虚拟的情况下

    image.png

    • 测试一下能够展示

    image.png

    • 进行公网域名解析

    image.png

    主机记录填写*这个是泛解析,前缀不管是啥都行
    
    • 1

    image.png

    • 再ping一下公网域名

    image.png

    image.png

    • 域名解析相关企业项目实战技术架构
      1. 多用户二级域名
        比如说淘宝或者微博的二级域名系统,商家申请店铺的时候会生成一个网址,lsj.taobao.com,然后nginx通过反向代理到java后台的业务逻辑,通过查询数据库(查询域名前缀lsj),然后返回信息给nginx,然后返回给客户端

    image.png

    1. 短网址
      肯定有一个短网址运维的系统,用户访问一个短网址 dwz.cn/asdhaksd2456,先提交一个真实地址存到数据库里,再经过系统返回一个短网址,可以用UUID作为key,真实的网址作为value,存到数据库里面,nginx作为请求打到这个系统里面,取到后面的那个字符串进行数据库查询,然后通过redirect转向

    image.png

    1. httpdns

    • Nginx中的虚拟主机域名配置
      • 进行不同域名地址对应的资源配置

    image.png

    • 创建好资源之后,就去nginx.conf改配置
    #需要注意,端口号+域名是唯一的就行
    
    #虚拟主机01
        server {
            listen       80;
            server_name  localhost;
    #前面没有/,就是相对路径,相对于nginx的安装目录
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    
    #虚拟主机02
        server {
            listen       80;
            server_name  video.lovelsj.com;
    #没有从根目录开始就是相对路径,从根目录开始就是绝对路径:  /www/video;
            location / {
                root   /www/video;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    
    #虚拟主机03
        server {
            listen       80;
            server_name  pic.lovelsj.com;
    #没有从根目录开始就是相对路径,从根目录开始就是绝对路径:  /www/pic;
            location / {
                root   /www/pic;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 随后我们访问
      1. www.lovelsj.com

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tNKV0Ful-1656209981199)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f39bf796bebe4b50b4ddd86e79bf6971~tplv-k3u1fbpfcp-watermark.image?)]
    2. video.lovelsj.com

    image.png
    3. pic.lovelsjcom

    image.png

    ServerName匹配规则

    • 我们可以再同一servername中匹配多个域名
      • 在server_name后面写域名加一个空格在写一个域名即可
    • 完整匹配
      • 他会从头到尾去匹配,第一个匹配上了就不会往后去匹配上,从虚拟主机01-03
    • 通配符匹配
      • 我们可以在server_name后面加一个 *.lovelsj.com

    image.png

    • 还有正则表达匹配

    image.png

    反向代理----高性能

    1. 网关、代理和反向代理
      反向代理流程图,后端服务器只能往外传数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FYfZnIvF-1656209981200)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4e5d079e7765475bb8d457306b2f0d12~tplv-k3u1fbpfcp-watermark.image?)]

    1. 反向代理再系统架构中的应用场景
      nginx做请求中转

    2. Nginx的反向代理配置

    • 关键字proxy_pass
      proxy_pass 和root目录是二选一的,只要写了proxy_pass,那么就不会去执行root

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDID0Sez-1656209981200)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f47195e648474d75b9f91be3792b9a83~tplv-k3u1fbpfcp-watermark.image?)]

    1. 基于反向代理的负载均衡器
      upstream定义一组服务器,这个和server是同一级别的

    image.png

    1. 负载均衡策略
    • 故障转移
      nginx后面有许多业务服务器,负载均衡就是有一台服务器不可用了,就可以吧故障转移,另一台服务器提供的服务与第一台的服务相同,需要被负载均衡的服务器焦作服务器的集群,全都服务都一样,当用户请求数据的时候,nginx反向代理给集群的每一台服务器这种负载均衡叫做(轮询,但是无法保持会话)

    • 权重(weight)
      比例
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5VBWjBK-1656209981200)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c219342ee4a9496ab9c86e75c260ca5d~tplv-k3u1fbpfcp-watermark.image?)]

    image.png

    • down是不参与负载均衡,让他休息一会,让他下线

    image.png

    • backup是正常使用不用他,因为是备用机,当没有机器用的时候,那么就用备用机

    image.png

    下面是不太常用的负载均衡策略

    image.png

    image.png

    动静分离

    • 使用动静分离场景
    • 动静分离原理
    • Nginx动静分离配置

    URL-Rewrite

    Https证书配置

    首先http端口是80,https端口是443

    • 不安全的Http协议
    • Https原理
      • CA机构
      • 证书
      • 客户端(浏览器)
      • 服务器端
    HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
    
    HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
    
    
    HTTPS和HTTP的区别主要如下:
    
    1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
    2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 在线证书申请
      image.png

    image.png
    点击下载

    image.png

    image.png
    一共两个,一个是pem,一个是key,证书和私钥

    • 证书样例
      image.png
    • 我的证书安装文件,要把证书和密钥放到conf文件夹里面,然后用相对路径去找,也可以放到别的地方去用绝对路径查找
      image.png
      我们弄好之后一般重启会报错,那是因为nginx默认没有安装openssl,我们需要重新安装openssl
    1. 先找到当初解压nginx的目录,然后xshell进入该目录输入ls

    image.png

    1. 随后输入命令安装openssl,注意安装的目录,可能需要依赖openssl
    ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
    
    #依赖
    yum -y install pcre-devel openssl openssl-devel
    
    • 1
    • 2
    • 3
    • 4

    image.png

    1. 随后make,make之后进行备份,退出nginx,覆盖之前nginx,然后查看版本确认一下

    image.png

    1. 网址输入确认

    image.png

    下周复习并发和多线程

  • 相关阅读:
    Dijkstra算法求最短路
    一篇文章教你Pytest快速入门和基础讲解,一定要看
    第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第五节 - 在Python中打印转义字符的方法)
    吲哚菁绿ICG标记海藻酸钠|ICG-海藻酸钠|alginate-Indocyaninegreen
    CISCO设备信息泄漏漏洞案例2
    leetcode题型分析《链表》
    链表的奇偶重排
    Vscode中快速生成代码的方式
    QPixmap图像处理详解
    Mybatis-分页插件
  • 原文地址:https://blog.csdn.net/qq_51959224/article/details/125467441