Nginx 高级

文章目录

  • Nginx
    • 反向代理
      • 概念
      • 配置
    • 负载均衡
      • 概念
      • 配置
    • 动静分离
      • 概念
      • 配置
    • 网关
    • 防盗链
    • keepalived
    • nginx跨域

Nginx

反向代理

概念

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
在这里插入图片描述

正向代理
加速器: 属于正向代理 雷神加速,在我自己的电脑上安装的,启动雷神软件, 雷神给我们访问蓝洞,从蓝洞拿到资源,再给我们。我们是知道蓝洞服务器的地址的。

反向代理
我们开发了一个网站,但是总是收到别人的攻击, www.laohan.com 。 但是为了不让别人直接攻击我的服务器,我就做了一个代理服务器,nginx 。别人通过访问nginx就能代理到我的网址,其实他们是不知道我真正的服务器地址的,他们访问的只是我的nginx的地址。

一般会拿正向代理和方向代理来做对比,本质上来讲,就是看对谁负责

  • 反向代理:代理服务器是对服务器负责,站在服务器的一边的。
  • 正向代理:代理服务器是对客户端负责,站在客户端的一边的。
    在这里插入图片描述
    在这里插入图片描述

配置

这里所有的域名换成自己的域名

域名:xxx.cloud
修改配置文件下的server

 server {listen       80;server_name  www.xxx.work;location / {root   /home/www/www;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

在location 下添加 代理地址:proxy_pass http://xxx.cloud:8088;

并且注释root 和 index。因为启动了代理之后,那么静态文件就会失效了。

重新启动nginx,访问www.xxx.work 其实就相当于访问http://xxx.cloud:8088

负载均衡

ES/服务器: 容量有限/访问数量有限。 20 服务器,请求进来以后需要将请求平均分配到每个服务器上,将压力平摊。

概念

负载均衡:通过某种特点的算法,将用户的请求合理的分配到集群服务的某个服务器上。高并发的一种方案。

在这里插入图片描述

配置

upstream 和server配合使用

  • 在upstream中起别名 ,并配置多个服务器地址和端口
  • 在server的代理中使用起好的别名 proxy_pass http://别名
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;#负载upstream serverip{server 192.168.56.131:8088;server 192.168.56.132:8088;}server {listen       80;server_name  www.xxx.work;location / {proxy_pass http://serverip;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}}

在192.168.56.131和192.168.56.132服务器分别部署两个项目,并且启动
在这里插入图片描述

访问域名:www.xxx.work

  • 默认负载方式 轮询。
  • 负载权重
    weight=数字
    server 192.168.56.131:8088 weight=8;
    server 192.168.56.132:8088 weight=2;
  • down
    表示离线,不参加服务
    server 192.168.56.131:8088 weight=8 down;
  • 备用 backup
    正常情况不会使用这个机器,只有其他机器不能用的时候,才启用备用服务器
    server 192.168.56.131:8088 weight=8 backup;
    不停用132服务器的情况下,一直请求 132,当我们手动将132服务器关闭,那么请求就会走131服务器。
  • IP hash
    根据客户端ip地址转发同一台服务器,可以保持会话
  • least_conn
    最少连接访问
  • fair
    根据后端服务器响应时间转发
  • url_hash
    定向url转发

注意:IP hash least_conn fair url_hash在我们实际开发场景里不用
一般开发中我们使用轮询策略+权重(根据服务器性能),配合分布式session技术来开发。

动静分离

适用对象:中小型企业。
动静分离也是优化程序访问速度的一种方式。

概念

当我们向nginx发起请求的时候,nginx会将请求转发到后台服务器,后台服务器在将页面信息给了nginx,然后传递到用户,但是用户的页面会加载很多的静态资源 js css image,其实这些资源没必要再次通过nginx–>后台–>nginx–>用户,我们可以将资源直接放在nginx上,用户需要的资源可以直接从nginx上获取,从而提高响应速度和降低后台服务器的压力。
在这里插入图片描述

配置

记住这里的域名问题,不是复制过来就可以用的

  • 将jar包中的css删除,页面展示的时候 css丢失
  • 将css放入nginx服务html目录中,在server中添加新的location信息,指定加载的css页面,这样就可以从nginx中加载css资源了。
 	server {listen       80;server_name  www.xxx.work;location / {proxy_pass http://serverip;# root   home/www/www;# index  index.html index.htm;}location /css{root html;index index.html;}
  • 但是我们也想将js image font等都可以放到nginx服务器中,但是每个都location /css location /js比较麻烦,我们可以通过正则的方式匹配
 server {listen       80;server_name  www.xxx.work;location / {proxy_pass http://serverip;# root   home/www/www;# index  index.html index.htm;}location ~*/(js|css|image|img|lib){root html;index index.html;}

~*表示正则的开始, | 表示或者 ,然后将静态资源都放到 nginx中 即可。

网关

  • 内网代理

131服务开启防火墙,然后就不能直接访问了

systemctl start firewalld

firewall-cmd --reload

systemctl restart firewalld

  • 指定端口和ip访问

firewall-cmd --permanent --add-rich-rule=“rule family=“ipv4” source address=“192.168.56.181” port protocol=“tcp” port=“8088” accept”

  • 移除规则

firewall-cmd --permanent --remove-rich-rule=“rule family=“ipv4” source address=“192.168.56.181” port port=“8088” protocol=“tcp” accept”

firewall-cmd --list-all

  • 通过我们的nginx代理服务器还是能访问到的。
  • 我们的131服务器以后只能通过130服务器访问,130就像一个大门,是进入131的唯一通道,我们也把130服务器叫做网关服务器。在这里插入图片描述

防盗链

盗链:是指在自己的页面上展示一些并不在自己服务器上的内容。通常的做法是通过技术手段获得它人服务器上的资源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容。比较常见的是一些小站盗用大站的资源(图片、音乐、视频、软件等),对于这些小站来说,通过盗链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器。

b:130 很多资源

a:140 nginx做代理,代理b 访问a的地址,其实就是在访问b,a就可以在自己的服务器页面上打广告,利用b的资源吸引流量。

  • 再配置一个nginx服务器140, 140服务器代理130服务器。
    在这里插入图片描述
    访问 192.168.56.130
    在这里插入图片描述
    其实所有的静态资源都是从我们130服务器上加载的。

将以下代码添加到静态资源代码里,并且重新加载nginx服务器。

valid_referers 192.168.56.130;
if ($invalid_referer) {
return 403;
}

location ~*/(css|js|images|img|lib){valid_referers 192.168.56.130;if ($invalid_referer) {return 403;}root html;index index.html;
}

重新访问140服务器,可以靠到访问的静态资源都是403禁止访问的。

  • 原理: 访问时的refer和资源服务器上配置的refer是否一样,不一样就不让访问。
  • curl测试防盗链:
    • curl -I http://192.168.56.130/img/07.jpg
    • I 只显示头信息
    • curl -e “http://192.168.56.130” -I http://192.168.56.130/img/07.jpg -e 表示引用信息
      在这里插入图片描述

keepalived

yum install -y keepalived

cd /etc/keepalived

vi keepalived.conf

130服务器配置

! Configuration File for keepalivedglobal_defs {router_id lb130}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.56.166}
}

220 服务器配置

! Configuration File for keepalivedglobal_defs {router_id lb220}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 50advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.56.166}
}

systemctl start keepalived

systemctl status keepalived

systemctl restart keepalived

  • 原理: 192.168.56.166是一个虚拟地址,和各个服务器的ip地址关联(但是只能关联一个),默认是给主服务器的,如果主服务器挂了,那么这个虚拟ip就和从服务器关联。

nginx跨域

一般解决的是前端静态页面在不同服务器之间的访问。

# 在server下添加配置文件#允许跨域请求的域,* 代表所有add_header 'Access-Control-Allow-Origin' *;#允许带上cookie请求add_header 'Access-Control-Allow-Credentials' 'true';#允许请求的方法,比如 GET/POST/PUT/DELETEadd_header 'Access-Control-Allow-Methods' *;#允许请求的headeradd_header 'Access-Control-Allow-Headers' *;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW挖坑指南

一、挖坑指南 1.1、输出变量放在条件框内 错误写法: 现象:如果没进入对应的分支,输出为默认值 正常写法: 让每个分支输出的值都在预料之内。 1.2、统计耗时不准 错误写法 现象:统计出来的耗时是2000ms 正常写法&a…

ES8 学习 -- async 和 await / 对象方法扩展 / 字符串填充

文章目录 1. async 和 await1.1 基本语法1.2 使用示例1.3 案例练习 2. 对象方法扩展2.1 Object.values(obj)2.2 Object.entries(obj)2.3 Object.getOwnPropertyDescriptors(obj)使用示例 3. 字符串填充4. 函数参数的末尾加逗号 1. async 和 await async 函数,使得异…

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆…

c++的学习之路:8、内存管理与模板

一、 C/C内存分布 首先在c语言的动态内存管理中我知道了代码是如何存储数据的,然后c是根据c语言底层变化来的,那么c语言的内存管理就是适用c的内存管理,在c语言中程序是分为几个部分存储,例如在栈堆等等,他们的分布如…

Golang并发模型-Pipeline模型、Fan-in Fan-out模型

这段时间由于项目的需要,本人正在研究关于如何优雅的进行go的并发,以下是结合资料和视频的结果,文末会给出参考资料 Go语言的并发模型主要通过goroutine和channel实现,通过这个我们可以更有效地使用IO和CPU 这里我们围绕生成一个…

【随笔】Git 基础篇 -- 分支与合并(九)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

mysql 基本查询

学习了mysql函数&#xff0c;接下来学习mysql基本查询。 1&#xff0c;基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT 语句。SELECT语句的基本格式是&#xff1a; SELECT (*I <字段列表>} FROM <表1>,<表2>..[WHERE<表达式> [GROUP BY <…

手写简易操作系统(二十一)--硬盘驱动

前情提要 上面一节我们实现了 malloc 和 free 的系统调用&#xff0c;这一节我们来实现硬盘驱动。 一、硬盘分区 我们的文件系统安装在一块全新的硬盘中&#xff0c;我们先创建它&#xff0c;然后在给他分区。 1.1、创建硬盘 首先是创建&#xff0c;这个之前我们已经干过一…

Linux网络编程一(协议、TCP协议、UDP、socket编程、TCP服务器端及客户端)

文章目录 协议1、分层模型结构2、网络应用程序设计模式3、ARP协议4、IP协议5、UDP协议6、TCP协议 Socket编程1、网络套接字(socket)2、网络字节序3、IP地址转换4、一系列函数5、TCP通信流程分析 第二次更新&#xff0c;自己再重新梳理一遍… 协议 协议&#xff1a;指一组规则&…

Kafka架构概述

Kafka的体系结构 Kafka是由Apache软件基金会管理的一个开源的分布式数据流处理平台。Kafka具有支持消息的发布/订阅模式、高吞吐量与低延迟、持久化、支持水平扩展、高可用性等特点。可以将Kafka应用于大数据实时处理、高性能数据管道、流分析、数据集成和关键任务应用等场景。…

20240402—Qt如何通过动态属性设置按钮样式?

前言 正文 1、点击UI文件 2、选择Bool型或是QString 3、设置后这里出现动态属性 4、这qss文件中绑定该动态属性 QPushButton[PopBlueBtn"PopBlueBtn"]{background-color:#1050B7;color:#FFFFFF;font-size:20px;font-family:Source Han Sans CN;//思源黑体 CNbor…

【JavaEE初阶系列】——一万字带你了解 JUC常见类 以及 线程安全集合类(哈希表)

目录 &#x1f6a9;JUC(java.util.concurrent) 的常见类 &#x1f388;Callable 接口 &#x1f308;理解 Callable(相关面试题) &#x1f308;理解 FutureTask &#x1f4dd;线程创建方式 &#x1f388; ReentrantLock可重入锁 &#x1f308;ReentrantLock 优势&#x…

4.2日java总结,以及窗口的创建

今日份学习——字符串的进阶 1.StringBulider StringBulider是一个java里的关键字&#xff0c;可以看做一个容器&#xff0c;但是其是一个可以改变的容器&#xff0c;对其有四种操作可以进行&#xff0c;分别是添加元素&#xff08;append&#xff09;&#xff0c;反转元素&a…

谷粒商城实战(009 缓存-分布式锁)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第158p-第p165的内容 分布式锁 原理和使用 使用下shell对产生的命令进行发送 查看 -> 撰写 -> 撰写栏 idea 选中的代码提取成方法 加锁…

【教学类-09-07】20240401细线迷宫图02+箭头图片(A4横版一页-2份竖版)

作品展示 作品展示 word模板 重点说明 代码展示 批量制作细线条的迷宫图(A4横板一面2张竖版)箭头图片 作者&#xff1a; 1、落难Coder https://blog.csdn.net/u014297502/article/details/124839912 2、AI对话大师 3、阿夏 作者&#xff1a;2024年4月3日 numint(input(几人&…

Android14之BpBinder构造函数Handle拆解(二百零四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Docker:探索容器化技术,重塑云计算时代应用交付与管理

一&#xff0c;引言 在云计算时代&#xff0c;随着开发者逐步将应用迁移至云端以减轻硬件管理负担&#xff0c;软件配置与环境一致性问题日益凸显。Docker的横空出世&#xff0c;恰好为软件开发者带来了全新的解决方案&#xff0c;它革新了软件的打包、分发和管理方式&#xff…

AIGC之gradio系列学习教程(一)

主题:本篇即为入门,后续将会从函数和使用场景介绍。 Gradio 是一个开源 Python 包,可让快速为机器学习模型、API 或任何任意 Python 函数构建演示或 Web 应用程序。然后,您可以使用 Gradio 的内置共享功能在短短几秒钟内共享演示或 Web 应用程序的链接。无需 JavaScript、…

C#中值类型与引用类型的存储

目录 值对象与引用对象的存储 引用对象的成员存储 值对象与引用对象的存储 数据项的类型定义了存储数据需要的内存大小及组成该类型的数据成员。类型还决定了对象在内存中的存储位置——栈或堆。 C#中类型分为两种&#xff1a;值类型和引用类型&#xff0c;这两种类型的对象…

【蓝桥杯 C++高级组省赛以及2020年-蓝桥杯C++省赛合集+部分答案】

一、选择题&#xff08;单项选择&#xff0c;每空30分&#xff09; 请将选择题答案填入答题卡蓝色框内 第一题&#xff08;难度系数 1&#xff09; 结构化程序所要求的基本结构不包括( )。 A.顺序结构 B.GOTO()跳转 C.选择(分支)结构 D.重复(循环)结构 第二题&#xff…