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;
        }

    }

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

image.png

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

image.png

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

image.png

  • 接下来执行:make , makei nstall

启动Nginx

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

image.png

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

关于防火墙

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

image.png
随后能进去网页

image.png

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

image.png

安装系统服务

  • 因为我们每次都得自启动太麻烦,所以可以写一个脚本
  1. 创建脚本服务
vi /usr/lib/systemd/system/nginx.service
  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
  • 先关闭之前的nginx服务
  1. 重新加载系统服务
systemctl daemon-reload
systemctl reload nginx
  • 通过脚本启动nginx: systemctl start nginx
  • 查看nginx状态: systemctl status nginx
  1. 开机启动
systemctl enable nginx.service

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,主进程不处理业务,子进程解析请求

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;
        }

    }

}

虚拟主机和域名解析

  • 域名,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

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

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. 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协议安全。
  • 在线证书申请
    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

image.png

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

image.png

  1. 网址输入确认

image.png

下周复习并发和多线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值