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 keepalived

global_defs {
  
   router_id lb130
   
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.56.166
    }
}

220 服务器配置

! Configuration File for keepalived

global_defs {
  
   router_id lb220
   
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_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/DELETE
 add_header 'Access-Control-Allow-Methods' *;
 #允许请求的header
 add_header 'Access-Control-Allow-Headers' *;

在这里插入图片描述

相关推荐

  1. NGINX高级技巧

    2024-04-03 12:48:01       29 阅读
  2. Nginx高级-扩容

    2024-04-03 12:48:01       19 阅读
  3. Nginx高级数据结构之共享内存ngx_shm_t

    2024-04-03 12:48:01       7 阅读

最近更新

  1. leetcode705-Design HashSet

    2024-04-03 12:48:01       8 阅读
  2. Unity发布webgl之后打开streamingAssets中的html文件

    2024-04-03 12:48:01       8 阅读
  3. vue3、vue2中nextTick源码解析

    2024-04-03 12:48:01       9 阅读
  4. 高级IO——React服务器简单实现

    2024-04-03 12:48:01       8 阅读
  5. 将图片数据转换为张量(Go并发处理)

    2024-04-03 12:48:01       7 阅读
  6. go第三方库go.uber.org介绍

    2024-04-03 12:48:01       8 阅读
  7. 前后端AES对称加密 前端TS 后端Go

    2024-04-03 12:48:01       10 阅读

热门阅读

  1. Docker 设置redis 集群

    2024-04-03 12:48:01       3 阅读
  2. IPKISS ------ 导入 Lumerical S-matrix 仿真结果

    2024-04-03 12:48:01       3 阅读
  3. Gtest 和VLD一起使用报内存泄漏

    2024-04-03 12:48:01       2 阅读
  4. Nginx的常用命令以及配置文件“nginx.conf”的解读

    2024-04-03 12:48:01       3 阅读
  5. 动态加载json文件

    2024-04-03 12:48:01       4 阅读
  6. 卷积神经网络

    2024-04-03 12:48:01       3 阅读
  7. python项目练习——12.在线购物商城应用程序

    2024-04-03 12:48:01       4 阅读
  8. 微知识-git rebase常用的3个场景和2个本质

    2024-04-03 12:48:01       4 阅读