Nginx(反向代理 负载均衡,动静分离,防盗链)

目录

1. 什么是nginx?nginx能做什么?

2.安装nginx

安装nginx

nginx目录介绍:  

 nginx的多进程模型,他是如何处理多个请求的

 nginx配置文件

虚拟主机与域名解析:

 基于域名的几种互联企业的需求:

3.配置实例详解

     1.正向代理

2.反向代理

 3.负载均衡

 4.动静分离

 5.防盗链

6.URLReWrite伪静态配置


1. 什么是nginx?nginx能做什么?

        Nginx是一个高性能的http和反向代理服务器,其特点是占用内存小,并发能力强。Nginx专为性能优化而开发,性能是其最重要的考量,能经受高负载的考验,有报告表明能支持高达50000个并发连接数。

1.反向代理

2.负载均衡

3.动静分离

4.防盗链

  重中之重 : nginx的配置实例

2.安装nginx

  下载地址:Index of /download/

    Nginx需要几个依赖包,分别是pcreopensslzlib,在安装nginx之前需要先安装这几个依赖。

1.使用命令下载pcre压缩包

$ sudo yum -y install pcre pcre-devel # 让 nginx 支持重写功能

pcre是一个perl库,包括perl兼容的正则表达式库,nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

2..一键安装剩余依赖:

 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

安装nginx

  1. nginx官网下载nginx,官网地址:https://nginx.org/download/
  2. 将压缩包拖到服务器上;
  3. 使用命令tar -zxvf  /usr/local/nginx-1.9.9.tar.gz解压压缩包;
  4. 使用命令./configure检查;

         

 

5. 使用命令make && make isntall编译安装; 

 

  

安装成功后,在usr会多出来一个文件夹,local/nginx,在nginxsbin文件夹下有启动脚本。

   

   

    启动 ./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配置代理规则:

  目标服务器配置防火墙的访问规则:

 这样就能实现服务器不能被外网直接访问,而是通过网关来访问了

    

  

  

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

时空恋旅人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值