| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Nginx(反向代理 负载均衡,动静分离,防盗链) -> 正文阅读 |
|
[系统运维]Nginx(反向代理 负载均衡,动静分离,防盗链) |
目录 1. 什么是nginx?nginx能做什么?? ? ? ?? 1.反向代理 2.负载均衡 3.动静分离 4.防盗链 ??重中之重 : nginx的配置实例 2.安装nginx? 下载地址:Index of /download/ ? ?? 1.使用命令下载 $ sudo yum -y install pcre pcre-devel # 让 nginx 支持重写功能 2..一键安装剩余依赖: ?yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 安装nginx
? ? ? ? ? ? 5. 使用命令 ? ?? 安装成功后,在 ? ? ? ? ? ? 启动 ./nginx 后查看进程 ? 访问:ip ? ? 配置文件: ? ? ? ?? 如果开了防火墙 需要把特定的端口打开 nginx目录介绍:???存放默认的首页的 ?就是这个页面: ?nginx的日志访问日志,错误日志等等,这个要注意,当日志文件写满了怎么办?线上尤其注意 ?nginx的多进程模型,他是如何处理多个请求的nginx启动之后他会先启动一个Master的主进程,主进程呢回去读取检验配置文件,再启动Worker子进程来处理用户的请求。 ?nginx配置文件? ?配置文件详解:Nginx配置文件详解 - 程序员自由之路 - 博客园 ? ? worker_processes:?启动nginx的时候启动多少个worker子进程,基本的原则是一个CPU的内核配置一个worker_processes。CPU有多少内核配置多少的worker_processes worker_connections:每一个worker可以创建多少个链接。 include:配置文件比较多的时候引入其他的配置文件?mime.types里面都是文件类型的参数,用于服务端告诉浏览器这次返回的是什么文件,再返回的头里面加上这个类型,浏览器就根据这个类型对应的文件后缀来解析 ?default_type:如果mime.types没有包含当前的类型,则以这个默认的流的类型返回 ?sendfile:需不要将文件从服务器拷贝到nginx的这个应用程序中,开启关闭sendfile方式传输文件,可以在http块、server块或者location块中进行配置 ?keepalive_timeout:配置连接超时时间,此指令可以在http块、server块或location块中配置 server块:?? ? ?一个server块就相当于一个虚拟主机,多个虚拟主机之间互不干扰。 ? ?? listen:监听的端口, server_name:虚拟主机的域名,域名不同的时候,监听的端口可以相同 location:是用来匹配URI的(资源,就是域名之后的) root:相对路径 error_page:错误页配置 虚拟主机与域名解析:?虚拟主机与域名解析: 域名解析: ? ?在域名解析这里添加一条记录? ? ?多租户二级域名就需要泛域名解析:填通配符就行 ?如果主机记录什么都不填,没有www的前缀也能解析成功 nginx虚拟主机域名配置: ?首先我们要在nginx上创建两个站点,都在根目录下创建 ? ? ? 其次修改我们的配置文件 ? 访问根目录下的这个文件 ? 重启nginx: ?? ? ?访问到pro版本的小鹰 ? 我们再配置一个plus版的小鹰,再配置一个端口 OK? 现在我们来配置一下server_name, 由于两个域名都不是注册的域名所以我们要配置host文件 重新加载nginx服务? ./nginx -s reload? 以及重新启动虚拟机? reboot ?当然server_name的配置方式可以精确 ,通配符,正则的方式来匹配 ?server_name的剩下的匹配方式 ? 一个server_name可以配置多个主机名字 ? ? ? ?通配符的形式去配置,多租户的二级域名就可以这样配置,? 多个server从上到下匹配? 匹配上了就不再往下。 ?正则匹配: ?基于域名的几种互联企业的需求:? 1.多域名的实现: ? ? ?? 2.短网址的实现 ? ?3.httpdns 3.配置实例详解? ? ?1.正向代理在浏览器中配置代理服务器,通过代理服务器进行互联网访问。 ?正向代理的示意图以及存在的问题 ? ?如果路由器只有10m,网速是100M,那么下载东西的时候,还是会受限于这个路由器的10M,他进出都是要经过这个路由器,所以瓶颈比较明显。正向代理是从访问者出发,在访问的过程中隐藏了访问者的真实IP,因此你可通过正向代理来进行隐藏你自己的真实IP。 2.反向代理? 与正向代理的区别就是客户端事无感知的,你不知道你走没有代理的服务,正向代理要在客户端中配置代理服务器,反向代理只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴漏的是代理服务器地址.? 对外暴露的是代理服务器,隐藏的是真实服务器 反向代理的示意图? ? ?反向代理访问的时候也要经过网,比如下载一个文件,下载的请求会很小,但是到了服务器后数据直接从服务器返回客户端,而不是经过网关,这样的话就避免了正向代理的时候网关的限制。 反向代理同正向代理相反,可以隐藏我们真实服务器的一些信息,并且可以在服务端进行一些配置,仅仅允许代理服务器进行代理访问,这样就能够起到一定的防护作用 ?反向代理服务器在我们系统架构中的应用场景? 注意我们在正常的的反向代理的时候,可以去伪装一下当前访问的真实的地址,这样面向搜索引擎也有好处 但是当代理一些文件服务的时候,nginx这个时候就会成为性能的瓶颈,所以要使用负载均衡。 反向代理实操: ? 在location下面配置proxy_pass,proxy_pass与 root? index是二选一的存在 所以要将他们注释掉 ?配置好我们重启nginx后再次访问:就代理到了UFC的中文网页,看到"火箭"拉基奇VS"波兰大锤"布拉乔维奇 注意,如果我配置的时候把www去掉了,可能会起不到代理的效果,直接重定向到了真实的页面去了,还需要注意的是proxy_pass是不支持跳转到https的, ?3.负载均衡? ??如果请求数过大,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为请求分发到多个服务器上,就是负载均衡。 ?负载均衡的配置upstream,要跟proxy_pass配合使用 ?启动这两个服务,然后开始访问虚拟机的地址,然后会分别断到两个服务里面一人一次。 如果其中有一台挂掉了,不提供服务了,那么是不是有一半的请求会没有返回呢?当然不是的,负载均衡他是有重试的机制的,如果一台服务不停工服务了,nginx会把请求导向另外一台提供服务的机器上 ? 默认的负载均衡的策略是轮询啊,轮询的话有一个问题就是无法保持会话 负载均衡的策略: 权重: ?down 可以让某些机器不参与负载均衡 ?backup: 备用机? 其他都没法用了再用它 ?还有其他不太常用的负载均衡策略:这些生产环境都不用 ? ?4.动静分离?为了加快服务器的解析速度,可以把动态页面和静态页面交给不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。 ?适合中小型网站静态资源不多的情况 ? ? 动静分离示意图: ? ?? ? ?动静分离最小demo实操,现在我搞一个项目, ? ?有html页面也有图片: ?项目启动的效果如图: 现在我要做动静分离 我要把图片资源放在nginx反向代理的服务器上, 第一步先来给他配置一个反向代理: 访问虚拟机的地址:OK成功的? ? 删除工程里面的图片: ??下面配置静态资源的访问路径:这里需要重新配置一个location,同理,我们的js资源,css资源都可以这样来配置 ? 把资源拿到nginx里面去: ?? ? ?重新加载nginx配置后访问虚拟机:图片出来了,简单的动静分离成功 ? ?更高级的动静分离规则: 正则的方式来匹配? ?? ?5.防盗链?当我们访问代理服务器的时候,返回的html页面里面会引用一些js,图片,css等等。 ? 当他们第二次去请求这些资源的时候,虽然访问的是同一个站点,但是他们会在请求头带上这个Referer参数,Referer参数是个什么东西呢?这是Http协议所规定的,由浏览器来遵守的。这个第二次访问的时候才有,第一个请求是没有的。表示要请求的资源是从上一个页面来的。 ? 那我们防盗链的话就是判断第二次的请求的Referer是不是第一个请求的就可以了。 配置: ? ?加上none以后 不带refere可以访问,带refere就不能访问了,就是浏览器直接打开是OK的,但是内嵌到其他页面使用就是不行的 ?目前curl测试返回的是一个403的状态码,浏览器的请求返回的也是403 现在我们想的是给他返回一个错误的页面 该怎么配置呢? ? 首先在服务器下面弄一个错误的html页面 ?配置文件这样去配置: ? 直接return到这个location上也是可以的 ?效果: 如果我们想配置一个图片返回呢?整合rewrite 返回图片 6.URLReWrite伪静态配置? ?还是比较实用的,他能隐藏我们真实的后端服务器的地址, ? ?? ? ?rewrite关键字 ?? ? 正则匹配 ? 如何利用nginx做网关访问内网的服务器: ?网关nginx配置代理规则: ? 目标服务器配置防火墙的访问规则: ?这样就能实现服务器不能被外网直接访问,而是通过网关来访问了 ? ?? ?? ?? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 13:49:46- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |